Database design 数据库规范化-外键一致性

Database design 数据库规范化-外键一致性,database-design,database-schema,diagram,database-normalization,database-diagram,Database Design,Database Schema,Diagram,Database Normalization,Database Diagram,我正在开发一个数据库模式,但在开发模式的一部分上,我犹豫不决。我有外键指向某些表,许多表包含指向一个中心表的外键 在我设计的两个表中,我设置了一个“ID类型”查找(外键列出ID所属的类型/表),然后设置了一个FK ID值。我想知道我是否应该为所有表外键这样做,以保持一致。对于这两个表,它们可能需要连接到不同的表,具体取决于记录的内容。假设人们被绑定到流程的不同方面,那么人员记录将被链接回一个表或另一个表,这取决于他们参与流程的位置 对于其他表,它们实际上只会链接到主中心表。我应该直接将一个显式外

我正在开发一个数据库模式,但在开发模式的一部分上,我犹豫不决。我有外键指向某些表,许多表包含指向一个中心表的外键

在我设计的两个表中,我设置了一个“ID类型”查找(外键列出ID所属的类型/表),然后设置了一个FK ID值。我想知道我是否应该为所有表外键这样做,以保持一致。对于这两个表,它们可能需要连接到不同的表,具体取决于记录的内容。假设人们被绑定到流程的不同方面,那么人员记录将被链接回一个表或另一个表,这取决于他们参与流程的位置

对于其他表,它们实际上只会链接到主中心表。我应该直接将一个显式外键保留到该表中,还是让它一致地成为ID类型/表和基于ID类型表链接的FK ID

如果这不合理,请让我知道,我会尽力更好地解释


谢谢

与同事交谈时,有人建议我没有外键列,该列基于另一个表标识符列链接到不同的表。显然,这很快就会变得危险,因为如果人们不小心,ID可能会错误地链接到错误的表

建议先设置人员表,然后设置多个人员交叉引用表,每个数据区域对应一个人员需要链接到的位置。每个CR表都有一个非空外键,并且只记录FK链接到的1表。还将有一个人员类型ID,以便一个人可以在需要存在的尽可能多的CRs中拥有多个类型/卷


如果有人不同意,我非常高兴能得到尽可能多的拍摄。

你不清楚。例如“我设置了一个“ID类型”查找([…]),然后设置了一个FK ID值”——我们不知道“设置”是什么意思,也不知道FK到哪里。明确所指内容。请给出DDL、示例数据和表格的含义。PS FK是约束。他们说代词也出现在其他地方。它们告诉DBMS,给定表的含义和可能出现的业务情况,数据库状态会出现什么。设计表格的含义。使用ID识别/命名业务实体/事物。通常不需要关联表id,其实体构成PK。根据自我回答的第一句话,这是一个外键列,它基于另一个表标识符列链接到不同的表(请参见我的评论)所以这是和/或的重复。你的问题中没有任何线索表明这是关于这个答案中第一句话的内容。FK反模式通常是对“SQL/数据库子类型”建模的错误方式。(谷歌我的stackoverflow评论。这个答案的其余部分和你的问题一样不清楚。你需要停止用脑海中出现的词语(如“数据区域”)标记你没有说过的东西。)并说出您的意思。示例有帮助,但您仍然需要说明它们是什么示例。当列列表的子代码值必须出现在另一列列表中时,FK约束在设计中有效。我们声明FKs,以便DBMS拒绝无效更新。如果列的值仅限于位于其他几个位置之一,则(每个类型列)则这不是FK保留的示例;这是一个不同的约束。每个目标表的不同的可空列集将是FKs。类型列可以指示哪些FK(或多个表,如果每个表有一个)等等。所以可能只是每个FK是否为空。但这些都是子类型的反模式。所以这个答案。