【发布时间】:2013-04-05 10:12:07
【问题描述】:
如下表:
Country Name | Country Code | isStandardName
----------------------------------------------------------
United States | USA | false
----------------------------------------------------------
United States of America | USA | True
----------------------------------------------------------
Yankees | USA | false
有一种情况,例如美国/美国等国家有不同的名称,国家代码相似(在本例中为美国),但其中一个可以是标准名称。在这种情况下,最简单的解决方案是强制执行一个约束,在该约束中,类似的国家/地区代码一次只能在 isStandardName 部分中包含一个布尔值 true。
换句话说,如何通过触发器/约束使“CountryCode , 'true'” 对一组相等的 countryCode 名称唯一?
关于如何强制执行此约束的任何建议?
【问题讨论】:
-
如果我们尝试添加
unique(countryCode, isStandardName),它也不允许超过1个布尔值false。因此,根据要求,最好创建trigger。 -
也许,而不是
isStandardName,有一个由UNSIGNED INTEGER组成的priority列。然后可以在(countryCode, priority)上定义UNIQUE约束,并将一些神奇的值(例如0)视为“标准名称”。 -
但是如果我们有三个 USA 和两个 false,则 unique (countryCode, isStandardName) 将不起作用!相等的 countryCode 的数量甚至可以变化到 10 个!
-
我认为再添加一列只会使情况更加复杂。我试图避免添加更多列。
-
@FidEliO:这就是我说“而不是...”的原因。
标签: mysql sql triggers constraints