这是一个例子:
[ products ] id (INT) name-en_us (VARCHAR) name-es_es (VARCHAR) name-pt_br (VARCHAR) description-en_us (VARCHAR) description-es_es (VARCHAR) description-pt_br (VARCHAR) price (DECIMAL) 问题:每种新语言都需要修改表结构。
这是另一个例子:
[ products-en_us ] id (INT) name (VARCHAR) description (VARCHAR) price (DECIMAL)
[ products-es_es ] id (INT) name (VARCHAR) description (VARCHAR) price (DECIMAL) 问题是:每种新语言都需要创建新表,并且每个表中都有“价格”字段重复。
这是另一个例子:
[ languages ] id (INT) name (VARCHAR)
[ products ] id (INT) price (DECIMAL)
[ translation ] id (INT, PK) model (VARCHAR) // product field (VARCHAR) // name language_id (INT, FK) text (VARCHAR) 问题:难吗?
您的第三个示例实际上是通常解决问题的方式。努力,但可行。
从翻译表中删除对产品的引用,然后将翻译的引用放在您需要的地方(反之亦然)。
[ products ] id (INT) price (DECIMAL) title_translation_id (INT, FK)
[ translation ] id (INT, PK) neutral_text (VARCHAR) -- other properties that may be useful (date, creator etc.)
[ translation_text ] translation_id (INT, FK) language_id (INT, FK) text (VARCHAR) 作为一种替代方法(不是很好的替代方法),您可以有一个单独的字段,并将那里的所有翻译合并在一起(例如XML)。
Supplier Lieferant Fournisseur 来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。