【问题标题】:How to use Unique Composite Key如何使用唯一复合键
【发布时间】:2014-07-12 05:52:06
【问题描述】:

我有一张桌子

Item(ItemName*, ItemSize*, Price, Notes)

我正在制作 (ItemName,ItemSize) 的复合键来唯一标识项目。现在,在阅读了一些关于 stackoverflow 的建议使用 UNIQUE 的答案后,我将其修改为

Item(ItemID*, ItemName, ItemSize, Price, Notes)

但是如何对 ItemName 和 ItemSize 应用 UNIQUE 约束

如有问题请指正

【问题讨论】:

  • 你想用星号表达什么意思?
  • 我认为作为主键使用。

标签: database database-design


【解决方案1】:
ALTER TABLE Items ADD UNIQUE INDEX(ItemName, ItemSize);

here's an article 解释如何使用 SQL Server Management Studio 实现相同的目标。

【讨论】:

  • 抱歉没提,我不是要代码。请用文字解释。我正在 SQL Server 2005 中设计数据库。
  • 这个想法是在这两列上添加唯一索引(或相同的唯一约束)。
  • 我将如何在 SQL Server 中以图形方式执行相同的操作?
  • 不要使用唯一索引语法。使用唯一的约束。差异可能很重要。
  • 原则上,约束是数据库逻辑级别的一部分,而索引是数据库的物理实现。键正确地是一种逻辑特征,而不是物理特征。约束是标准 SQL 的一部分,而索引不是。大多数数据库用户都希望键作为约束来实现,而不仅仅是索引,如果您使用索引语法,他们可能会错过键存在的事实。许多开发和数据库管理工具也可能将约束识别为键而不是索引。此外,约束在信息模式中。索引不是。
【解决方案2】:
ALTER TABLE Items ADD CONSTRAINT uc_name_size UNIQUE (ItemName,ItemSize)

来自oraclepostgres 文档的参考

【讨论】:

    【解决方案3】:
    1. 您正在使用一个工具来完成一项任务。不理解:

      • 正如 Darin 所说,归根结底,SQL 是一种基于字符的语言
      • 任何和所有命令(本例中的数据操作或数据定义)都在 SQL 服务器上作为字符串执行
      • 有超过 100 种 GUI SQL Server 管理工具,从 MS 每隔一年不断制造的垃圾到不断增长的成熟产品(未替换或重写)
      • 你可以在你使用的任何 GUI 中单击或拖动或任何东西,但是当你点击“保存”或“应用”按钮时,都做同样的事情:发送一个 SQL 字符串到 SQL 服务器进行处理李>

      因此,是的,如果您要管理服务器或模型/实现数据库,您确实需要了解 SQL 命令级别发生的情况。否则点击或拖动时会做出意想不到的事情。

    2. SQL 已经存在了 30 多年,并且已经取得了长足的进步(它仍然非常有限,但这与这里无关)。以前我们只有
      {DROP|CREATE} [UNIQUE] [CLUSTERED] INDEX name ON table (columns, ...)
      句法。随着它的扩展,添加了更多的关系构造,我们有
      ALTER TABLE table {ADD|DROP} {UNIQUE|PRIMARY KEY} CONSTRAINT name (columns,...)
      语法。

      Dave Pinal 在一定程度上是正确的:就服务器内部的数据存储结构而言,INDEXCONSTRAINT 语法产生相同的结果,即索引。

      但他只是在回答一个问题,显然没有听说过新的CONSTRAINT 语法中隐含的 ISO/IEC/ANSI 标准 SQL 特征,而INDEX 语法中没有隐含这些特征(如果您使用它,您必须明确指定这些参数)。更重要的是,INDEX 语法中可以提供许多参数,而CONSTRAINT 语法中没有这些参数。因此存在显着差异,这可能与在默认状态下运行的小型服务器无关。

      一般来说,倾向于在物理层面上表现的人,或者有数百个表要管理的人,使用INDEX 语法; amd 与我们保持距离的人CONSTRAINT

      • 关键是,使用一个 XOR 另一个,不要使用组合:这会导致创建您甚至不知道的重复索引(因为它们不会显示在您正在查看的损坏的 MS GUI 面板中)。
        .

      Dave 把事情搞糊涂了:没有“主键索引”这样的东西。它是或者主键约束索引(可能是主键,并且具有与支持 PK 相关的设置)..

    3. 接下来会让任何人(无论是初学者还是其他人)感到困惑的是,您已经习惯了看到各种有趣的图画,这些图画应该描绘数据或数据模型,但事实并非如此。 MS 是最严重的违规者,在每个不同的产品中,都有完全不同的有趣图表和符号集。没有共性或标准;有一些符号描述了设计的重要方面,在一张图片中你可能想要在另一张图片中,但你无法得到它。

      嗯,实际上有一个关系数据库建模标准,称为 IDEF1X。但是MS没听说过。这个想法是标准的,所有关于模型的重要信息;微妙之处;等,在单个模型中被识别。许多不同的团队可以使用单一模型。当然,它有一套标准的符号和符号。

      • 重点是,学习标准,它会为你解开很多困惑。然后,无论您今天在屏幕上使用什么 GUI 工具,您都将清楚地知道您的数据模型中想要/拥有什么,以及服务器内部发生了什么。

      • 重点是,关于“我如何以图形方式执行此操作”,您可以在任何图表工具中执行此操作,因为您拥有模型,并且您在表格上设置选择设置。没有任何 MS GUI 曾经也不会提供给您。
        .

      GUI 不能替代知识。

    4. 1234563你怎么能变得比独特更独特?

    【讨论】:

    • 每件商品都各不相同,有些商品可能名称相同但尺寸不同,因此两者的组合是独一无二的。
    • 我是一名学生,我对语言很熟悉,但 GUI 让它变得简单。当然,我还必须学习语法,我正在学习。对于我的问题,我使用的是 Darin 建议的解决方案。
    • @LifeH2O。没问题。保持 (ItemName, ItemSize) 不变。
    • 到 4:他试图从 (ItemName, ItemSize) 作为 PRIMARY KEY 切换到仅 ItemID,然后在 (ItemName, ItemSize) 上有一个复合 UNIQUE KEY 以确保该组合不重复.
    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 2018-07-29
    • 2014-08-22
    • 1970-01-01
    • 2022-08-20
    • 2016-08-09
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多