这似乎是一个简单的问题,但我很难过:
我创建了一个关于汽车的数据库(在Oracle SQL开发人员中)。我在其他表中有一个名为: Manufacturer 的表和一个名为 Parentcompany 的表。 由于一些制造商是大公司所有,我也会在我的数据库中显示它们。 parentcompany 表是“父表”,制造商表是“子表”。 我创建了两个列,每个列都有自己的主键。
出于某种原因,当我插入列的值时,我能够为制造商和 Parentcompany 的主键使用相同的值
列: ManufacturerID 是制造商的主要关键字。这个值是:'MBE'
列: ParentcompanyID 是 Parentcompany 的主键。这个值是'MBE'
两者都具有相同的价值。我的思维逻辑有问题吗? 或者我只是不明白主键是如何工作的? 主键只需要在表中是唯一的,而不是数据库吗?
如果有人了解情况,我将不胜感激。
答案 0 :(得分:1)
每个表的主键都是唯一的。
查看本教程:SQL - Primary key
主键是表中唯一标识每个字段的字段 数据库表中的行/记录。主键必须包含唯一键 值。主键列不能具有NULL值。
一个表只能有一个主键,可以包含单个或 多个领域。当多个字段用作主键时,它们 被称为复合键。
如果某个表在任何字段上定义了主键,则不能 有两个记录具有相同的字段值。
答案 1 :(得分:0)
主键是表唯一的。您可以为DB中的每个单独的表使用相同的PI值。实际上,经常会发生PI,通常是代表行ID的增量数字:1,2,3,4 ......
对于您的情况,更常见的实现是具有名为Company的分层表,其具有字段:company_name和parent_company_name。如果公司有父项,则在字段parent_company_name中,它将具有来自字段company_name的一些值。
答案 2 :(得分:0)
有两个原因可以解释为什么两个不同PK中的相同值可能没有问题。在您的情况下,它似乎从数据的语义自然流动。
“制造商”表格中的一行和“父公司”表格中的一行似乎都指向相同的东西,即公司。在这种情况下,在两个表中给公司提供相同的id不仅是可能的,而且实际上是有用的。它代表制造商和母公司之间的1对1对应关系,而不添加额外的列作为FK。
答案 3 :(得分:0)
感谢您的快速解答! 我想我现在知道该怎么做了。我将创建一个通用的公司表,其中将存储所有公司。然后我会创建,因为我沿着像制造商和母公司那样引用公司表中某个公司的特定公司表。 为了澄清,我将放入子公司表的唯一一列是一个列,其外键引用公司表的列,是吗?
对于主键,我只是感到困惑,因为我听到很多关于需要独特的键,并且不能与另一个键具有相同的值。那么这个条件只适用于表,而不是整个数据库。谢谢你的澄清!