Database design 主键和外键

Database design 主键和外键,database-design,primary-key,normalization,Database Design,Primary Key,Normalization,简单的问题,似乎在谷歌上找不到答案。我正在规范化一个数据库,并将其中一个表转换为第二个标准形式。问题是:表的主键也可以是同一表中的外键吗 如果这使它更容易理解,我将尝试消除表中的部分依赖项(但这可能是显而易见的,因为我提到了第二个范式) 我有一个表JobItem,它如下所示: 作业编号(主键), 项目代码(PK), 波纳姆, 项目说明, 项目类型, 小贩, 职务名称 作业名称部分取决于键的作业编号组件。 项目描述、项目类型和供应商取决于项目代码组件。 PO Num取决于整个键 我要问的是,一旦我

简单的问题,似乎在谷歌上找不到答案。我正在规范化一个数据库,并将其中一个表转换为第二个标准形式。问题是:表的主键也可以是同一表中的外键吗

如果这使它更容易理解,我将尝试消除表中的部分依赖项(但这可能是显而易见的,因为我提到了第二个范式)

我有一个表JobItem,它如下所示:

作业编号(主键),
项目代码(PK),
波纳姆,
项目说明,
项目类型,
小贩,
职务名称

作业名称
部分取决于键的
作业编号
组件。
项目描述、项目类型和供应商
取决于
项目代码
组件。
PO Num
取决于整个键

我要问的是,一旦我将部分依赖项剥离到它们自己的表中,我的键的组件是否也会成为引用新表的外键


编辑:充实示例,使其更加相关。

如果您发布表格的DDL,您将得到更好的答案。(发布
createtable
script。)根据经验,始终发布示例数据的DDL和INSERT语句

问题是:主键是否可以 表也可以是其中的外键 同一张桌子

是的,但这并不能说明你的处境。主键在一个表(表B)中,外键在另一个表(表a)中

自引用外键(表A中的外键引用表A中的候选键)相对不常见。也就是说,引用其他表的外键比引用自己表的外键更为常见

事实上,你可以在SO上找到很多设计——不仅仅是在SO上——它们使用自引用外键,而实际上它们不应该使用。这是发布DDL的另一个好理由

以后

我要问的是一旦我脱掉衣服 将部分依赖项转换为它们的 我自己的表,我的 钥匙也变成了外国的钥匙 参考新表格

对。很少有多列候选键的列需要完全引用不同的表。但在您的情况下,看起来您是对的——您的键的列应该引用新表中的主键。

类似的内容


尝试删除复合键。不可能,表中有依赖于复合键的属性。遗憾的是,我现在没有DDL。我现在只是在纸上设计桌子。用更多信息编辑原始帖子。@MGZero--您似乎已经更改了对问题的描述。是的,这正是我的意思!:)问题是一样的,我只是觉得我最初没有正确地描述它,所以我发布了更多的信息。你的图表显示了我的意思。顺便说一句,你用什么来创建那个图表?