gpt4 book ai didi

mysql - 数据库模式中的外键过多(冗余?)

转载 作者:行者123 更新时间:2023-11-29 23:21:14 28 4
gpt4 key购买 nike

我正在设计一个关系数据库 - 底层是 MySQL - DBDesigner 4 .

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

<小时/>

DBDesigner 4 schema

<小时/>

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

我知道它可以用于更优化的查询,但我正在研究的完整方案具有更复杂的关系,并且外键的数量非常快速增加。

也就是说,如果我要添加一个名为 widget 的新表,其中每一行都属于一个模块,则 widget.module_id, widget.module_page_idwidget.module_page_lang_tag 都会自动创建。

最佳答案

问题始于表 page,其字段 lang_tag 是表 lang 的外键 (FK),但它也是主表的一部分表的键(PK)。我知道这一点是因为 DBDesigner 使用黄色键描绘 PK,而 FK 使用红色键(如果它们不是红色,请原谅我的内存,自 2010 年以来我没有使用 DBDesigner,而且我手头没有副本)。

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

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

page的PK中删除lang_tagpage_lang_tag将从表module中消失。另外,从表 module 的 PK 中删除 page_id

关于mysql - 数据库模式中的外键过多(冗余?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27276151/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com