2

我有这 3 个实体学生、员工和讨论。
他们的关系是这样的: 1 个学生可以发表许多讨论;1名员工可以发表许多讨论;但 1 个讨论只能由学生或工作人员发布。可以让外键 studentID 和 staffID 都驻留在讨论实体中吗?但这样做可能会使其中的每条记录在这两个属性中都有 1 个空值。在此处输入图像描述

4

1 回答 1

6

应用第二范式 (2NF)将是一个指导方针:

第一种方法:为人员创建一个基表
您可能有一个People表来存储人员的共享属性。Student 和 Staff 将是该表的孩子,在 Discussion 表上使用 Peoples 表外键将解决问题。

第二种方法:有一个基表进行讨论
为了减少冗余,您可能有一个Discussion-Base表,这将是其他两个实体的基表: Staff-DiscussionStudent-Discussion表。
Discussion-Base表将包含共享属性。
当员工讨论表和学生讨论表的属性不同时,该解决方案将受到赞赏。
如果它们相同并且唯一的区别是可选的外键,那么您提到的设计是有效的。
希望这可以帮助。

于 2013-07-13T11:26:32.633 回答