【问题标题】:Two foreign keys referencing the same primary key. Is it in normal form?两个外键引用同一个主键。是正常形式吗?
【发布时间】:2019-12-16 11:01:57
【问题描述】:

如果一个表中有两个外键引用另一个表的同一个主键,这个表会是正常形式吗?

【问题讨论】:

  • 如果你的设计需要,那是正常的。
  • 是的,这是一种规范化设计,但并非所有 DBMS 都支持这种构造(例如 SQL Server)或通过该结构(MS-Access)进行级联更新和删除。
  • 表所在的NF与FK或其他表无关。是否可以声明 FK 与其他 FK 无关。 PS“规范化”和“正常形式”没有更多细节并不意味着什么特别。而且你似乎不知道这意味着什么。请引用“正常形式”的确切含义的定义并解释为什么您会被卡住使用它。您的问题与NF有关吗?也许您的意思不是“在 NF 中”而您的意思是“精心设计”?请参阅 How to Ask、其他 help center 链接、点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。
  • 请通过编辑而非 cmets 进行澄清。重新“我如何规范化”:请发布一个新问题,不要在 cmets 中提出新问题。但是——这只是要求我们用定制的教程重写你的教科书并做你的(家庭)作业,而你没有表现出任何研究或其他努力。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。按照教科书的理由展示您的工作步骤,并在您遇到困难时提出 1 个具体问题。

标签: sql database database-normalization


【解决方案1】:

同一个表中的两个 FK 引用同一个父/PK 并没有本质上的错误。我想说,在这种方法中,非正常形式的可能性通常更高,但这归结为您的具体情况。

您在 Person 表中对医生和患者进行建模的方法是一个不错的设计选择。一般来说,对于数据库设计,最好根据数据的角色或用途对 day 进行建模,而不仅仅是数据域。换句话说,如果患者和医生在您的系统中扮演非常不同的角色,为什么不使用单独的医生和患者表呢?这将避免诸如意外引用医生而您应该引用患者或反之亦然的问题;或者如果不同的用户/进程对医生和患者数据具有不同的访问权限。您当前的设计在标准化方面很好;但在整体数据模型方面有一点奇怪的味道。

【讨论】:

  • 我的架构是 Person 表:PeronID、Name、Age、Address 和 Appointment 表:AppID、Date、PatientID、New/GeneralPatient、DoctorID、DoctorCertification。 PersonID 是患者的 PatientID 和医生的 DoctorID,一个人可以有多个约会。我如何规范化这个?
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 2017-01-16
  • 2023-03-17
  • 2021-09-12
  • 2012-10-31
相关资源
最近更新 更多