我在MySQL
数据库中有一个名为product_attributes的表。它由产品SKU(外键),属性标签和属性值组成。我需要确保SKU和属性标签的组合是唯一的。
插入此内容 合法
{001, 'weight', '100 lbs'}
{001, 'color', 'blue'}
{002, 'weight', '200 lbs'}
这将是 非法
{001, 'weight', '100 lbs'}
{001, 'weight', '200lbs' }
- 如何强制执行此约束?
- 我是否必须使用服务器端语言执行此操作,还是可以配置数据库来强制执行此操作?
- 这种类型的约束叫什么?
答案 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)
您可以将ProductSKU
和AttributeLabel
设为复合PK,也可以对它们设置唯一约束。要么达到你的目的。您可能希望使用代理键(或者因为您的模型层需要它),在这种情况下,唯一约束是可行的方法。
通常,无论您对数据库执行什么操作,您仍然需要使用代码来处理应用程序中的异常。