简单的问题,似乎无法在Google上找到答案。我正在规范数据库,我正在将其中一个表转换为第二范式。问题是:表的主键是否也可以是同一个表中的外键?
如果它更容易理解,我试图消除表中的部分依赖(但这可能是显而易见的,因为我提到了第二范式)。
我有表JobItem,看起来像这样:
Job No (PK),
Item Code (PK),
PO Num,
Item Description,
Item Type,
Vendor,
Job Name
Job Name
部分取决于密钥的Job No
组件。
Item Description, Item Type and Vendor
取决于Item Code
组件。
PO Num
取决于整个密钥。
我要问的是,一旦我将部分依赖关系删除到自己的表中,我的密钥的组件是否也会成为引用新表的foriegn密钥?
编辑:充实示例更具相关性。
答案 0 :(得分:2)
这样的东西?
答案 1 :(得分:1)
如果您发布表格的DDL,您将获得更好的答案。 (发布CREATE TABLE
脚本。)根据经验,始终为样本数据发布DDL和INSERT语句。
问题是:可以是主键 表也是外键 同桌?
是的,但这并没有说明你的情况。您的主键位于一个表中(表B),而您的外键位于不同的表中(表A)。
自引用外键,其中表A中的外键引用表A中也的候选键,相对不常见。也就是说,引用其他表的外键比引用它们自己的表的外键更常见。
事实上,您可以在SO上找到相当多的设计 - 而不是只是在SO上 - 当他们真的不应该使用自引用外键时。这是发布DDL的另一个好理由。
<强>后来强>
我问的是,一旦我脱光了 部分依赖于他们的 自己的表,将我的组件 钥匙也变成了钥匙 参考新表?
是。在极少数情况下,多列候选键的列实际上需要完全引用不同的表。但在你的情况下,看起来你是对的 - 你的密钥列应该引用新表中的主键。