表中的两个主要非复合键

时间:2016-01-31 10:10:27

标签: mysql sql rdbms

我正在开发一个项目,我意识到我不确定如何使用多个主键。我有一个名为“User_Details”的表,其中包含客户ID,电子邮件地址和密码的详细信息。根据我的理解,我可以使用客户ID和电子邮件地址作为主键。在这种情况下,我只使用一个作为主键或两者兼而有之吗?如果我同时使用它们,它们会成为复合主键吗?

(PS。我有其他表,其中外键是客户ID)

3 个答案:

答案 0 :(得分:2)

您只能拥有一个主键,但绝对可以拥有其他唯一字段。

通常使用整数/ id作为主键优先于字符串键,并且id可能是自动分配的,因为电子邮件可能会更改 - 这对于外键关系是个问题。

由于您已将客户ID用作其他表中的外键,我建议您继续这样做。

答案 1 :(得分:1)

您只能有一个主键,但主键中可以有多个列,或者您也可以在表上使用唯一索引,这有点像主键,因为它们会强制使用唯一值,并将加快查询这些价值观。

最简单的方法是复合主键,它是由两列或更多列组成的主键。例如:

CREATE TABLE userdata (
userid INT,
userdataid INT,
info char(200),
primary key (userid, userdataid),
);

以下是更多信息:Link

答案 2 :(得分:1)

您可以拥有一个复合主键,它是由两列或更多列组成的主键。例如:

CREATE TABLE userdata (
  userid INT,
  userdataid INT,
  info char(200),
  primary key (userid, userdataid),
);

一个表可以有多个候选键。每个候选键都是一列或一组列,这些列是UNIQUE,一起使用,也是NOT NULL。因此,为任何候选键的所有列指定值足以确定有一行符合条件,或者根本没有行。

候选键是关系数据模型中的基本概念。

通常的做法是,如果一个表中存在多个键,则将其中一个候选键指定为主键。通常的做法是使表中的任何外键引用主键,而不是任何其他候选键。

我推荐这些做法,但关系模型中没有任何内容需要在候选键中选择主键。