基本上是标题。
什么会被认为更好:
关于以此为例:
说有一个具有许多属性的产品。我们希望属性中的所有列对于Product来说都是唯一的,例如:
Product
ID Name
1 Something
2 Other
Attribute
ID ProductID Name Code Alias1 Alias2
1 1 One O 1 |
2 1 Two T 2 ||
3 1 Three T 3 |||
4 2 Two T 2 ||
因此ID为4的属性会通过,因为它在ProductID = 2的所有列上都是唯一的。属性ID = 3将失败,因为它重复了ID = 2已经使用的Code = T。
答案 0 :(得分:1)
您似乎希望使用productid
对每对列分别设置唯一的约束:
create unique index unq_product_productid_name on product(productid, name);
create unique index unq_product_productid_code on product(productid, code);
create unique index unq_product_productid_alias1 on product(productid, alias1);
create unique index unq_product_productid_alias1 on product(productid, alias2);
您可以使用触发器来实现。但是,除非每个列对都有一个索引,否则确定唯一性将非常昂贵。因此,为了提高性能,您需要相同的索引。
拥有这些索引会产生开销-尤其是在数据修改操作方面。如果您很少这样做,那么没有索引的触发器就可以了。
不过,总而言之,我会在每对上使用单独的唯一索引,因为这是数据完整性检查的意图。从清晰表达您意图的代码开始。以后,如果性能存在问题,您可以尝试其他解决方案。
答案 1 :(得分:0)
您可以在两列上添加UNIQUE
索引:
CREATE INDEX UQ_tab ON tab_name(ProductId, Code);
-- before you do that you need to clean initial data