SQL表可以有多个带主键的列吗?

Gal*_*Gal 20 sql

SQL表可以有多个带主键的列吗?

Ton*_*ews 33

表只能有一个主键约束,但可以包含多个列,例如

create table my_table (col1 integer, col2 integer, col3 integer,
   primary key (col1, col2, col3)
   );
Run Code Online (Sandbox Code Playgroud)

除了主键之外,表还可以具有一个或多个UNIQUE约束,例如

create table my_table2 (col1 integer, col2 integer, col3 integer,
   primary key (col1, col2),
   unique (col2, col3)
   );
Run Code Online (Sandbox Code Playgroud)

  • 一起。Unique(col2) 和 unique(col3) 将是 2 个单独的约束。 (3认同)

Stu*_*Stu 29

如果您的意思是" SQL中的主键可以有多列 ",答案是肯定的.

  • 嗯,这是一个不同的问题,答案是否定的,不是永远的,如果你这样做,我将会帮助你解决问题并且伤害你.只是个人偏好,当然:-) (6认同)
  • 另一个好问题是,主键应该是多列.:) (5认同)

Jos*_*eph 7

如果您询问某个表是否可以将多个列作为主键,那么对于MS SQL Server,答案是肯定的,它称为复合(更正)键.


Erw*_*out 6

"通常复合键是一种糟糕的做法."

要小心那些试图卖给你这样废话的假先知.

关键是关键是关键是关键.密钥一组属性.没有更多,也没有更少.该集的基数可以是1,或者它可以> 1,它甚至可以是零!并且一键一对一地对应于一些唯一性约束.

关系模型没有处方,因为密钥/唯一性约束只能涉及单个属性.

此外,关系模型也没有任何前景,因为有一个以上的密钥,而且关系理论已经抛弃了(几十年来已经存在的)"主键"的概念(暗示这样的"主要的"关键在任何意义上都是"比其他关键词"更多的关键",因为完全没有必要和无关紧要.就密钥所暗示的唯一性而言,所有密钥都是平等的(并且不是一个特定密钥比其他密钥更平等的情况).

  • 定义唯一性的所有键都同样独特.外键不是定义唯一性的键.我不是在谈论那些.把这个概念称为"关键"是一个巨大的错误.当然,如果你对某些relvar/table/entity使用复合键,而在另一个relvar/table/entity中你必须"引用"前者,那么在那个'其他'relvar/table中需要一个复合外键/实体. (3认同)
  • 我不知道我应该投赞成票还是反对票。我同意第一部分,但我不同意所有键都是平等的。根据定义,主键必须是唯一的。外键可以为空、使用一次(一对一关系)或重复使用(无论数据库设计要求什么)。 (2认同)