Database 3NF表是否可以有一个具有重复值的PK,但所有非键都依赖于该PK(无可传递依赖)?

Database 3NF表是否可以有一个具有重复值的PK,但所有非键都依赖于该PK(无可传递依赖)?,database,primary-key,3nf,Database,Primary Key,3nf,我知道PK必须有唯一的值。我还知道,对于3NF中的表,依赖于另一个非键,不可能有非键 我试图创建一个包含以下要求的表格:数据反映出一位教授可以有多个建议,可以在多个委员会任职,可以编辑多个期刊 我有一个具有以下属性的Professor表(所有属性都取决于PK): EMP_NUM(FK)(主键) 兰克教授 教授办公室 委员会代码(FK) 日记账编码(FK) 建议代码(FK) 教授A有5个委员会代码,所以我把不同的委员会代码放在不同的行上(使每个框原子化),但这意味着我必须重复EMP_NUM、P

我知道PK必须有唯一的值。我还知道,对于3NF中的表,依赖于另一个非键,不可能有非键

我试图创建一个包含以下要求的表格:数据反映出一位教授可以有多个建议,可以在多个委员会任职,可以编辑多个期刊

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

  • EMP_NUM(FK)(主键)
  • 兰克教授
  • 教授办公室
  • 委员会代码(FK)
  • 日记账编码(FK)
  • 建议代码(FK)
教授A有5个委员会代码,所以我把不同的委员会代码放在不同的行上(使每个框原子化),但这意味着我必须重复EMP_NUM、PROF_RANK和PROF_OFFICE 5次。所以现在idk如果EMP_NUM可以被认为是PK了

我在一些网站上看到了一些例子,它们在3NF表中有重复的PK值。但是idk,PK不应该只有唯一的值吗


如果我将EMP_NUM和COMMITTEE_代码分离到一个新表中,我仍然需要对5个不同的COMMITTEE_代码重复相同的EMP_NUM 5次。

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

SURROGATE ID
EMP_NUM (FK)
COMMITTEE_CODE(FK)
Professor表不应有任何
委员会代码
,因为关系存储在联接表中


我还建议使用代理键-ID,它没有任何意义,就像任何可以随时间变化的东西一样。例如,名字不能是PK,因为一个人的名字可以改变,这意味着更新整个数据库结构,因为我知道Committee教授是一个多对多关系。在这种情况下,您应该创建一个连接表
PROF_COMM_REL

SURROGATE ID
EMP_NUM (FK)
COMMITTEE_CODE(FK)
Professor表不应有任何
委员会代码
,因为关系存储在联接表中


我还建议使用代理键-ID,它没有任何意义,就像任何可以随时间变化的东西一样。例如,名字不能是PK,因为一个人的名字可能会改变,这意味着要更新整个数据库结构

我对3NF一无所知,但你肯定需要将教授和委员会的关系放入带有两个FK的单独表(实体)中。为什么EMP_NUM字段上同时有FK和PK属性?对我来说没有意义。@Arvo我尝试将教授的n个委员会放在一个单独的表中,每个委员会都有一个唯一的代码作为PK,但当我将其连接到教授表时,我仍然必须重复EMP_NUM。至于FK PK,我在这里看到了另一个问题,它说是的,我可以让FK充当PK(超级类型表)@Arvo是正确的,它们属于一个单独的表。正如您所指出的,这意味着Emp和Committee之间的关联实体包含每个Committee_代码重复的Emp_num。在这种情况下,关联表的PK是其两个FK的组合。关于EMP_NUM上的FK+PK,这是否意味着存在某个单独的employee表,其中EMP_NUM是PK?抱歉,我认为这是一个理论性不强,但实践性更强的SQL家伙——我只是想更好地理解您的模型:)@Arvo是的,有一个单独的EMP_NUM作为主键的employee表。我没有把它包括在这里,因为我认为这与问题无关。谢谢你的回答,顺便说一句:)我对3NF一无所知,但你肯定需要把教授和委员会的关系放在两个FK的单独表格(实体)中。为什么EMP_NUM字段上同时有FK和PK属性?对我来说没有意义。@Arvo我尝试将教授的n个委员会放在一个单独的表中,每个委员会都有一个唯一的代码作为PK,但当我将其连接到教授表时,我仍然必须重复EMP_NUM。至于FK PK,我在这里看到了另一个问题,它说是的,我可以让FK充当PK(超级类型表)@Arvo是正确的,它们属于一个单独的表。正如您所指出的,这意味着Emp和Committee之间的关联实体包含每个Committee_代码重复的Emp_num。在这种情况下,关联表的PK是其两个FK的组合。关于EMP_NUM上的FK+PK,这是否意味着存在某个单独的employee表,其中EMP_NUM是PK?抱歉,我认为这是一个理论性不强,但实践性更强的SQL家伙——我只是想更好地理解您的模型:)@Arvo是的,有一个单独的EMP_NUM作为主键的employee表。我没有把它包括在这里,因为我认为这与问题无关。谢谢你的回答,顺便说一句:)规范化到更高的NFs不会引入新的列。此外,也没有理由引入id列。问题的设计还存在其他问题。此外,这还提出了一种新的设计,但并没有从3NF或规范化的角度证明任何东西是正确的。此外,也没有理由引入id列。问题的设计还存在其他问题。此外,这提出了一种新的设计,但并不证明任何3NF或标准化方面的合理性。