gpt4 book ai didi

database-design - 数据库设计和外键 : Where should they be added in related tables?

转载 作者:行者123 更新时间:2023-12-04 07:17:17 25 4
gpt4 key购买 nike

我的数据库中有一个相对简单的表子集,用于跟踪称为 session 的东西。这些是学术 session (想想特定类(class)的类(class))。表示 session 信息的表格是:

sessions
session_terms
session_subjects
session_mark_item_info
session_marks

所有这些表都有自己的主键,就像一棵树, session 有术语,术语有主题,主题有标记项,等等。所以每个表都至少有它的“父”外键。

我的问题是,在设计方面,将 session 主键作为外键包含在其他表中以轻松选择相关 session 项是个好主意,还是冗余过多?

如果我在所有表中包含 session 外键(或表中所有父外键),我可以轻松地选择 session 的所有标记。例如,类似

SELECT mark FROM session_marks WHERE sessionID=...

如果我不这样做,那么我将不得不将选择与类似的东西结合起来

WHERE something IN (SELECT...

哪种方法“更正确”或更有效?

提前致谢!

最佳答案

第二种方法更正确。实际上,为了提取 session 信息,您将连接表,不要害怕加入关系数据库的全部要点。您不想重复自己(规范化)。所以你只会保留对父级的引用,而不是 parent.parent。

这个问题对于初学者来说经常出现,他们认为在子子表中创建相同的键会让他们的生活更轻松,因为选择可以变成:

SELECT blah FROM MyTableSubSub WHERE SessionID=340

问题是您在表中引入了重复数据,这些数据可能不需要知道它们的父级。事实上,在您设计的某个地方,您可以通过加入另一个表来找到此信息。例如:

SELECT blah FROM MyTableSubSub mtss INNER JOIN ParentTable p ON p.ID = mtss.ID...

到达那个点后,您就可以在父表中找到 session ID。所以不要重复相关表中的列。

关于database-design - 数据库设计和外键 : Where should they be added in related tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515728/

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