3NF表是否可以具有带有重复值的PK,但所有非键都依赖于PK无传递依赖项?

问题描述

我知道PK必须具有唯一的值。我也知道,要使表位于3NF中,就不能有非键,这取决于另一个非键。

我正在尝试创建具有以下要求的表格:数据反映出一位教授可以有多个建议,可以在多个委员会中任职,并且可以编辑多个期刊。

我有一个具有以下属性的Professor表(均取决于PK):

  • EMP_NUM(FK)(PK)
  • PROF_RANK
  • PROF_OFFICE
  • COMMITTEE_CODE(FK)
  • JOURNAL_CODE(FK)
  • ADVISEE_CODE(FK)

教授A有5个COMMITTEE_CODE,因此我将不同的COMMITTEE_CODE放在不同的行上(以使每个框成为原子的),但这意味着我将必须重复EMP_NUM,PROF_RANK和PROF_OFFICE 5次。因此,现在将idk如果EMP_NUM可以再视为PK。

我在一些网站上看到了一些示例,这些示例在3NF表中具有重复的PK值。但是idk,难道PK不应该只有唯一的值吗?

如果我将EMP_NUM和COMMITTEE_CODE分开到一个新表中,我仍然必须对5个不同的COMMITTEE_CODE重复相同的EMP_NUM 5次。

解决方法

据我了解,教授是多对多的关系。在这种情况下,您应该创建一个连接表PROF_COMM_REL

SURROGATE ID
EMP_NUM (FK)
COMMITTEE_CODE(FK)

Professor表不应包含任何COMMITTEE_CODE,因为该关系存储在联接表中。

我还建议您使用代理键-代号没有任何含义,就像随时间变化的任何事物一样。例如,姓名不能为PK,因为一个人的姓名可以更改,这将暗示更新整个数据库结构