我有一张桌子
Item(ItemName*, ItemSize*, Price, Notes)
我正在制作(ItemName,ItemSize)的复合键以唯一标识项目。现在,在阅读了stackoverflow上的一些答案后,建议使用UNIQUE我将其修改为
Item(ItemID*, ItemName, ItemSize, Price, Notes)
但是如何在ItemName和ItemSize上应用UNIQUE约束
如果有问题
,请更正答案 0 :(得分:10)
ALTER TABLE Items ADD UNIQUE INDEX(ItemName, ItemSize);
和here's an article解释了如何使用SQL Server Management Studio实现相同目的。
答案 1 :(得分:1)
您正忙于使用One Tool执行任务。不理解:
因此,是的,如果要添加服务器或模型/实现数据库,则需要了解SQL命令级别发生的情况。否则,当您单击或拖动时,您将执行意外操作。
SQL已经存在了30多年,它已经走过了漫长的道路(它仍然非常有限,但这与此无关)。在过去,我们只有
{DROP|CREATE} [UNIQUE] [CLUSTERED] INDEX name ON table (columns, ...)
句法。随着它的扩展,增加了更多的关系构造,我们有了
ALTER TABLE table {ADD|DROP} {UNIQUE|PRIMARY KEY} CONSTRAINT name (columns,...)
语法。
Dave Pinal的观点是正确的:就服务器内部的数据存储结构而言,INDEX
和CONSTRAINT
语法都会产生相同的结果,即索引。
但他只是在回答一个问题,显然还没有听说过较新的CONSTRAINT
语法中隐含的ISO / IEC / ANSI标准SQL特性,INDEX
并未暗示这一点。语法(如果使用它,则必须明确指定这些参数)。更重要的是,INDEX
语法中可以提供许多参数,这些参数在CONSTRAINT
语法中不存在。因此存在显着差异,这可能与在默认状态下运行的小型服务器无关。
通常,那些倾向于在物理层面上表现,或者有数百个表要管理的人使用INDEX
语法;和那些与身体上的我们保持距离的人CONSTRAINT
。
Dave混淆了一些事情:没有“主键索引”这样的东西。 要么主键约束或索引(可能是主键,并且设置与支持PK相关)..
接下来会让任何人,初学者或其他人感到困惑的是,你习惯于看到各种有趣的绘画,这些绘画应该用来描绘数据或数据模型,但事实并非如此。 MS是最糟糕的罪犯,在每个不同的产品中,有一个完全不同的有趣图表和一组符号。没有共性或标准;有一些符号描绘了设计的重要方面,在一张图片中你可能想要在另一张图片中,你无法得到它。
嗯,实际上有一个名为IDEF1X的关系数据库建模标准。但MS没有听说过它。这个想法是关于模型的标准,所有重要信息;细微之处;等,在单一模型中识别。许多不同的团队可以使用单一模型。当然,它有标准的符号和符号集。
重点是,学习标准,它会为你清除很多困惑。然后,无论您今天在屏幕上使用什么GUI工具,您都会知道您在数据模型中明确想要/拥有什么,以及服务器内部发生了什么。
点是,“我如何以图形方式执行此操作”,您可以在任何图表工具中执行此操作,因为您拥有该模型,并且您设置了选择表格上的设置。没有MS GUI曾经或者永远不会给你 。
GUI不能代替知识。
您能解释一下:如果您声明,(ItemName, ItemSize)
在该特定表格上形成一个唯一键,您认为您需要的基础是(ItemName, ItemSize
,还有更多{{1} }}?如何才能获得比独一无二的独特性?
答案 2 :(得分:0)