将唯一约束应用于SQL中的列组合

时间:2010-10-18 17:40:05

标签: sql mysql database database-design constraints

我在MySQL数据库中有一个名为product_attributes的表。它由产品SKU(外键),属性标签和属性值组成。我需要确保SKU和属性标签的组合是唯一的。

示例 -

插入此内容 合法

{001, 'weight', '100 lbs'}
{001, 'color', 'blue'}
{002, 'weight', '200 lbs'}

这将是 非法

{001, 'weight', '100 lbs'}
{001, 'weight', '200lbs' }

- 如何强制执行此约束?
- 我是否必须使用服务器端语言执行此操作,还是可以配置数据库来强制执行此操作? - 这种类型的约束叫什么?

3 个答案:

答案 0 :(得分:7)

尚未对此进行测试,但添加唯一键的DDL(数据定义语言)为

ALTER TABLE foo
ADD CONSTRAINT UniqueSkuAttribKey UNIQUE (SKU, Attribute)

主键是

ALTER TABLE foo
ADD CONSTRAINT PrimaryFooKey Primary (SKU, Attribute)

答案 1 :(得分:4)

对两行使用唯一约束

ALTER TABLE product_attributes ADD CONSTRAINT unique_sku_attribute UNIQUE (sku, attribute);

编辑:从唯一索引重写为唯一约束。糟糕

答案 2 :(得分:3)

您可以将ProductSKUAttributeLabel设为复合PK,也可以对它们设置唯一约束。要么达到你的目的。您可能希望使用代理键(或者因为您的模型层需要它),在这种情况下,唯一约束是可行的方法。

通常,无论您对数据库执行什么操作,您仍然需要使用代码来处理应用程序中的异常。