数据库模式中的外键太多(冗余?)

时间:2014-12-03 15:58:32

标签: mysql database database-design foreign-keys

我正在设计一个关系数据库 - 下面是MySQL - 在DBDesigner 4

我有3个表:modulepagelang。每个模块都属于一个页面,每个页面都有一个特定的语言:


DBDesigner 4 schema


是否有特殊原因将外键page_lang_tag自动添加到module表中?我看来,应该可以在没有module.page_lang_tag的情况下确定任何给定模块的语言。

我知道它可用于更优化的查询,但我正在处理的完整方案具有更复杂的关系,并且外键的数量很快就会非常

也就是说,如果我要添加一个名为widget的新表,其每个行属于一个模块,那么widget.module_idwidget.module_page_id和{{1}所有都会自动创建。

1 个答案:

答案 0 :(得分:0)

问题始于表page,其字段lang_tag是表lang中的外键(FK),但它也是表的主键(PK)的一部分。我知道这是因为PKs由DBDesigner使用黄色键描述,而FK有红色键(如果它们不是红色然后原谅我的记忆,我自2010年起就没有使用DBDesigner,我手头没有副本)。 / p>

由于pagemodule之间的关系,表page的PK(即列idlang_tag)在表格中迁移为FK module再次,它们被不必要地添加到表格的PK中。

我无法判断您是否将lang_tag添加到表page的PK中,或者DBDesigner会自动执行此操作但这不正确(您不需要它而您不需要它)。

lang_tag的PK中移除pagepage_lang_tag将从表module中消失。另外,从表page_id的PK中删除module