跨境电商系统多语言内容的设计方案
方案1:一个表设计一个多语言内容关联表
表解构
1 | - product_categories |
数据
product_categories:
| category_id |
|---|
| 1 |
| 2 |
product_categorie_l10ns:
| category_id | locale | name |
|---|---|---|
| 1 | en | food |
| 1 | zh-CN | 食物 |
| 1 | zh-TW | 食物 |
| 2 | en | cage |
| 2 | zh-CN | 笼子 |
| 2 | zh-TW | 籠子 |
products:
| id | category_id |
|---|---|
| 1 | 1 |
| 2 | 1 |
product_l10ns:
| product_id | locale | title | desciption | detail |
|---|---|---|---|---|
| 1 | en | millet | desc 1 | detail 1 |
| 1 | zh-CN | 小米 | 简介 1 | 详情1 |
| 1 | zh-TW | 小米 | 簡介 1 | 詳情1 |
| 2 | en | maize | desc 2 | detail 2 |
| 2 | zh-CN | 玉米 | 简介 2 | 详情2 |
| 2 | zh-TW | 玉米 | 簡介 2 | 詳情2 |
方案2:共用一个多语言内容表
优点:只需要一个表来保存多语言数据。
缺点:数据量过大时性能拉胯。
本地化内容中的数据在访客端查询的时候,属于非实时关键数据(无价格、库存等数据),都是可以缓存的,所以只要系统本地化数据量不是超级大,都可以优先考虑使用此方案。
数据操作时需要增加参数:able_type、able_id、column,封装一下增加复杂度不多。
表解构
1 | - product_categories |
able_type + able_id 多态关联
数据
product_categories:
| category_id |
|---|
| 1 |
| 2 |
products:
| id | category_id |
|---|---|
| 1 | 1 |
| 2 | 1 |
l10ns:
| able_type | able_id | name | locale | title | body |
|---|---|---|---|---|---|
| product_categories | 1 | name | en | food | NULL |
| product_categories | 1 | name | zh-CN | 食物 | NULL |
| product_categories | 1 | name | zh-TW | 食物 | NULL |
| product_categories | 2 | name | en | cage | NULL |
| product_categories | 2 | name | zh-CN | 笼子 | NULL |
| product_categories | 2 | name | zh-TW | 籠子 | NULL |
| products | 1 | title | en | millet | NULL |
| products | 1 | title | zh-CN | 小米 | NULL |
| products | 1 | title | zh-TW | 小米 | NULL |
| products | 1 | desciption | en | desc 1 | NULL |
| products | 1 | desciption | zh-CN | 简介1 | NULL |
| products | 1 | desciption | zh-TW | 簡介1 | NULL |
| products | 1 | detail | en | NULL | detail 1 |
| products | 1 | detail | zh-CN | NULL | 详情1 |
| products | 1 | detail | zh-TW | NULL | 詳情1 |
跨境电商系统多语言内容的设计方案