【发布时间】:2013-10-17 03:40:42
【问题描述】:
我正在设计一个用于国际化内容的数据库。其中一个功能是标记系统,类似于 Stack Overflow 的功能。这就是我所拥有的:
TABLE tags
tag_id | int(11) unsigned | NOT NULL | PRI | auto_increment
TABLE tag_translations
| tag_translation_id | int(11) unsigned | NOT NULL | PRI | auto_increment
| fk_language_id | int(11) unsigned | NOT NULL | MUL |
| fk_tag_id | int(11) unsigned | NOT NULL | MUL |
| tag_name | varchar(255) | NOT NULL | UNI |
TABLE tag_relationships
| tag_relationship_id | int(11) unsigned | NOT NULL | PRI | auto_increment
| fk_tag_id | int(11) unsigned | NOT NULL | MUL |
| fk_solution_id | int(11) unsigned | NOT NULL | MUL |
首先,让标签表只包含一个 ID 似乎合理吗?其次,我怎样才能用唯一的字段是自动递增 ID 填充该列?
【问题讨论】:
-
@kinakuta 然后我们复制英文标签名称....想想如果标签名称稍后被修改怎么办?然后我们是更新翻译和名称还是只更新翻译?我想避免重复。如果(在某些时候)我们有其他语言的标签名称但没有英文怎么办?然后我们的标签列中就有了多语言标签名称。
-
@kinakuta 呵呵。那么“木工”的英语和西班牙语翻译没有相同的 ID。参照完整性被破坏。看看我在反对什么?
-
如果标签具有超出词汇名称的某种身份,这就是您在这里暗示两个词可以指代同一事物的暗示,那么这就是必须进入标签表的内容.无论是创造者,创造的时间,还是什么,这都是你需要决定的,因为你现在已经将它定义为一个词以外的东西。
-
同一个词用于多种语言怎么办?
-
这出现在最近的一个问题here 中,有人意识到他们实际上并不了解他们的员工,这在某些时候可能不会改变 - 渐渐地,每个领域似乎都必须如此移至具有
EffectiveDates 的历史记录表(甚至名称都可以更改!)。
标签: mysql database-design internationalization