Database 如何使用唯一复合密钥

Database 如何使用唯一复合密钥,database,database-design,Database,Database Design,我有一张桌子 Item(ItemName*, ItemSize*, Price, Notes) 我正在制作(ItemName,ItemSize)的复合键来唯一标识项。现在,在阅读了关于stackoverflow的一些答案,建议使用UNIQUE之后,我将其修改为 Item(ItemID*, ItemName, ItemSize, Price, Notes) 但是如何对ItemName和ItemSize应用惟一约束呢 如果有问题,请纠正 并解释如何使用SQLServerManagementStu

我有一张桌子

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

Item(ItemID*, ItemName, ItemSize, Price, Notes)
但是如何对ItemName和ItemSize应用惟一约束呢

如果有问题,请纠正

并解释如何使用SQLServerManagementStudio实现同样的功能

  • 您正被一个工具挂断以完成任务。但不了解:

    • 正如Darin所说,归根结底,SQL是一种基于字符的语言
    • 任何和所有命令(数据管理,或本例中的数据定义)都在SQL server上作为字符串执行
    • 有100多种GUI SQL Server管理工具,从MS每隔一年不断生产的垃圾到不断增长(未被替换或重写)的成熟产品
    • 您可以在您使用的任何GUI中单击或拖动或执行任何操作,但当您点击“保存”或“应用”按钮时,所有操作都会执行相同的操作:将SQL字符串发送到SQL server进行处理
    因此,是的,如果要注册服务器或建模/实现数据库,您确实需要了解SQL命令级别正在发生的事情。否则,当您单击或拖动时,将执行意外操作

  • SQL已经存在了30多年,并且已经走过了很长的一段路(它仍然非常有限,但这与本文无关)。在过去,我们只有
    {DROP | CREATE}[唯一][聚集]表(列,…)上的索引名

    语法。随着它的扩展,添加了更多的关系结构,我们有了
    ALTER TABLE{ADD | DROP}{UNIQUE | PRIMARY KEY}约束名称(列,…)

    语法

    Dave Pinal的观点是正确的:就服务器内部的数据存储结构而言,
    INDEX
    CONSTRAINT
    语法都会产生相同的结果,即索引

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

    通常,倾向于在物理级别上实现性能的人,或者有数百个表要管理的人,使用
    索引
    语法;amd将自己与现实世界隔离的人受到
    约束

    • 关键是,使用一个异或另一个,不要使用组合:这会导致创建您甚至不知道的重复索引(因为它们不会显示在您正在查看的已损坏的MS GUI面板中)。
      .
    Dave把事情弄糊涂了:根本没有“主键索引”这样的东西。它是主键约束或索引(可能是主键,并且具有与支持PK相关的设置)

  • 接下来,无论是初学者还是其他人,都会感到困惑的是,你已经习惯于看到各种各样的有趣的图形,这些图形应该是用来描述dat或数据模型的,而事实并非如此。MS是最坏的罪犯,在每一个不同的产品中,都有不同的有趣的图表和一组符号。没有共性或标准;有一些符号描述了设计的重要方面,在一张图片中,你可能想要在另一张图片中,但你无法得到它

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

    • 关键是,学习标准,它会为你消除很多困惑。然后,不管今天屏幕上有什么GUI工具,您都会清楚地知道数据模型中需要/拥有什么,以及服务器内部发生了什么

    • 重点是,关于“如何以图形方式进行此操作”,您可以在任何图表工具中进行此操作,因为您拥有模型,并且可以在表上设置和选择设置。没有微软GUI曾经或将永远给过您这些信息。
      .

    GUI不能代替知识

  • 您能否解释一下:如果您声明,
    (ItemName,ItemSize)
    在该特定表上形成一个唯一的键,那么您认为您需要什么基础来代替
    (ItemName,ItemSize
    ,再加上更多的
    ?你怎样才能变得更独特


  • 来自和文档的参考资料

    很抱歉没有提及,我不是要代码。请用文字解释一下。我正在SQL server 2005中设计数据库。我的想法是在这两列上添加唯一索引(或相同的唯一约束)。如何在SQL server中以图形方式执行相同操作?不要使用唯一索引语法。使用唯一约束。原则上,约束是数据库逻辑级别的一部分,而索引是数据库的物理实现。密钥是一种逻辑特性,而不是物理特性。约束是标准SQL的一部分,而索引不是。数据库的大多数用户都希望将键实现为约束,而不仅仅是索引,如果使用索引语法,他们可能会忽略键存在的事实。此外,许多开发和数据库管理工具可能会将约束识别为关键
    ALTER TABLE Items ADD UNIQUE INDEX(ItemName, ItemSize);
    
    ALTER TABLE Items ADD CONSTRAINT uc_name_size UNIQUE (ItemName,ItemSize)