我正在设计一个关系数据库 - 下面是MySQL - 在DBDesigner 4。
我有3个表:module
,page
和lang
。每个模块都属于一个页面,每个页面都有一个特定的语言:
是否有特殊原因将外键page_lang_tag
自动添加到module
表中?我看来,应该可以在没有module.page_lang_tag
的情况下确定任何给定模块的语言。
我知道它可用于更优化的查询,但我正在处理的完整方案具有更复杂的关系,并且外键的数量很快就会非常。
也就是说,如果我要添加一个名为widget
的新表,其每个行属于一个模块,那么widget.module_id
,widget.module_page_id
和{{1}所有都会自动创建。
答案 0 :(得分:0)
问题始于表page
,其字段lang_tag
是表lang
中的外键(FK),但它也是表的主键(PK)的一部分。我知道这是因为PKs由DBDesigner使用黄色键描述,而FK有红色键(如果它们不是红色然后原谅我的记忆,我自2010年起就没有使用DBDesigner,我手头没有副本)。 / p>
由于page
和module
之间的关系,表page
的PK(即列id
和lang_tag
)在表格中迁移为FK module
再次,它们被不必要地添加到表格的PK中。
我无法判断您是否将lang_tag
添加到表page
的PK中,或者DBDesigner会自动执行此操作但这不正确(您不需要它而您不需要它)。
从lang_tag
的PK中移除page
,page_lang_tag
将从表module
中消失。另外,从表page_id
的PK中删除module
。