【发布时间】:2011-01-17 22:19:27
【问题描述】:
我们的数据库中有一种特殊的表,用于存储其自身更改的历史记录。所谓的“自存档”表:
CREAT TABLE coverages (
id INT, # primary key, auto-increment
subscriber_id INT,
current CHAR, # - could be "C" or "H".
record_version INT,
# etc.
);
它存储我们订阅者的“覆盖范围”。字段“current”表示这是当前/原始记录(“C”)还是历史记录(“H”)。
对于给定的订阅者,我们只能有一个当前的“C”覆盖,但我们不能创建具有 2 个字段(*subscriber_id 和 current*)的唯一索引,因为对于任何给定的“C”记录,都可能有任何数字“H”条记录 - 更改历史记录。
所以索引应该只对current == 'C' 和任何subscriber_id 是唯一的。
这可以在 Oracle DB 中使用“物化视图”之类的东西来完成:我们可以创建一个物化视图,它只包含具有 current = 'C' 的记录,并使用这些创建一个唯一索引2 个字段:*subscriber_id,当前*。
问题是:如何在 MySQL 中做到这一点?
【问题讨论】:
-
唯一索引的目的是什么?非唯一索引不能做什么?这听起来有点像过早的优化...
-
我们有多个应用程序服务器 (web),它们可以尝试同时插入相同的记录(并且确实发生了)。我们需要防止覆盖表中出现重复。
标签: mysql unique-constraint unique-index