表中的2个主键

时间:2011-10-21 06:33:37

标签: database primary-key

在数据库中的表中创建主键很好。制作综合小学也很好。但为什么我不能在表中有2个主键?如果我们有2个主键,可能会出现什么问题。

假设我有一张学生表。我不希望每个学生的卷号和姓名都是唯一的。那为什么我不能在表中创建2个主键?我现在没有看到任何逻辑问题。但我肯定错过了一个严重的问题,这就是它不存在的原因。

我是数据库的新手,所以不要太了解。它也可能造成技术问题。如果有人可以就此教育我,那将会很高兴。

感谢。

5 个答案:

答案 0 :(得分:2)

您可以为两列UNIQUE(roll,name)创建UNIQUE约束。

答案 1 :(得分:2)

根据定义,PK是unique,因为它用于标识其他行,例如,当外键引用该表时,它引用了PK。

如果您需要其他列像PK一样“行动”,请为其指定属性uniquenot null

答案 2 :(得分:1)

嗯,这只是定义。不能有两个“主要”条件,就像不能有两个“最新”版本一样。

每个表都可以包含多个unique个键,但如果您决定使用主键,这只是其中一个unique键,您认为“最重要的一个” “,它唯一地标识每条记录。

如果您有一个表并得出结论,您的主键不能唯一地标识每个记录(也意味着不能有两个具有相同主键值的记录),那么您选择了错误的主键key,根据定义,主键的字段必须唯一地定义每个记录。

但是,这并不意味着没有其他字段组合唯一地标识记录!这是第二个功能的起点:参照完整性。

您可以使用主键“链接”表格。例如:如果您有一个Customer表和一个Orders表,其中Customers表在客户编号上有一个主键,而Orders表有一个主键在订单号和客户编号上,这意味着:

  1. 每个客户都可以通过其客户编号唯一识别
  2. 每个订单都由订单号和客户编号唯一标识
  3. 然后,您可以在客户编号上链接两个表格。然后,数据库系统会确保一些事情,其中​​包括您无法在未先删除订单的情况下删除在数据库中拥有订单的客户。否则,您将无法查找客户数据,这将违反数据库的参照完整性。

    如果你有两个主键,系统就不知道确保参照完整性,所以你必须告诉系统使用哪个键 - 这会使一个主键更重要,这会使它是主键的“主键”(!)。

答案 3 :(得分:1)

可以在一个表中有多个候选键,但按照惯例,每个表只有一个键叫做“primary”。这只是一个惯例,它并没有对键的功能产生任何真正的影响。主键与任何其他候选键没有区别。如果您觉得拨打多个“主要”键很方便,那么我建议您这样做。在我看来(我不是唯一一个),根本没有指定“主要”密钥的想法本质上是一个过时的概念,在数据库设计中并不重要。

您可能有兴趣知道关于关系数据库模型的早期论文(例如,EFCodd,关系模型的发明者)实际上使用术语“主键”来描述所有关键词关系,而不仅仅是一个。因此,每个表的多个主键有一个非常好的先例。指定一个主键的想法是最新的,并且可能通过ER建模技术的普及而得到普遍使用。

答案 4 :(得分:0)

在第二个属性(名称)上创建唯一索引,它与具有其他名称的主键几乎相同。

来自维基百科(http://en.wikipedia.org/wiki/Unique_key):

  

一个表最多只能有一个主键,但不止一个主键   键。主键是唯一指定的列的组合   一排。这是一个独特键的特例。一个区别是   主键具有隐式NOT NULL约束,而唯一键具有隐式NOT NULL约束   不。因此,唯一键列中的值可能为NULL,也可能不为NULL,   实际上这样的列最多可以包含一个NULL字段。   另一个区别是必须使用另一个来定义主键   语法。