【问题标题】:How to make a composite key in mssql?如何在 mssql 中创建复合键?
【发布时间】:2019-07-22 13:35:53
【问题描述】:

我想在 mssql 中创建一个复合键。例如{地址(城市,州,邮政编码)}。

我是 sql 新手。我想知道是否有在表中创建复合键的确切语法。我见过一个类似的问题,答案是创建列并向这些列添加唯一约束。但是,我不知道这是否解决了我的问题。

代码可能是这样的:

CREATE TABLE Employee(
SSN INT PRIMARY KEY NOT NULL,
FirstName NVARCHAR(50) NOT NULL,
City NVARCHAR(50) NOT NULL,
State NVARCHAR(50) NOT NULL,
ZipCode INT NOT NULL
);

我想这样的地址使用 3 个不同的键是没有问题的。但是,我想知道是否有更好的解决方案。

提前致谢。

【问题讨论】:

  • 复合键是什么? PS SSN 作为密钥可能会导致问题。意味着输入数据的人必须先知道它。此外,如果出现错误并且他们想要对其进行编辑,则可能会导致任何引用的表出现问题。
  • @TonyHopkinson 我举了一个例子;复合键将在这种情况下得到解决。也让 SSN 成为 pk 不是这里的主要内容,这只是一个例子。我要问的是如何使地址成为由城市、州和邮政编码组成的复合键

标签: sql composite-key


【解决方案1】:

我不建议使用该三元组的密钥,因为它可能碰巧有多个员工具有相同的三元组城市、州和邮政编码。 无论如何,如果你想有一个唯一的约束,请执行以下操作:

CREATE TABLE Employee(
SSN INT PRIMARY KEY NOT NULL,
FirstName NVARCHAR(50) NOT NULL,
City NVARCHAR(50) NOT NULL,
State NVARCHAR(50) NOT NULL,
ZipCode INT NOT NULL
CONSTRAINT address UNIQUE(City, State, ZipCode)
);

这样,您可以确保 City、State 和 ZipCode 对于表中的所有行都是唯一的。

【讨论】:

    【解决方案2】:

    Key在关系数据库中起着重要的作用;它用于识别表中的唯一行。它还建立了表之间的关系。

    • 在您的情况下,使用复合键对您的表没有帮助 正在创造。由于多个 SSN 可以具有相同的城市、邮政编码、 状态作为输入。

    • 我建议使用另一个表作为地址并拥有这些
      那里唯一的列。

    • 如果您说明您的要求(您是什么
      将使用这些键)。

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多