【发布时间】:2021-12-21 05:34:58
【问题描述】:
下表存储了不同日期范围内的产品价格
id
productID
startDate
endDate
price
如何在数据库级别确保给定日期没有多个条目。 (MongoDB / MySQL)
正确设置
startDate endDate
2020-01-01 2020-01-05
2020-01-07 2020-01-07
2020-01-08 2020-01-20
不正确的设置
日期 2020-01-04 有两个条目(第一个和第二个)
startDate endDate
2020-01-01 2020-01-05
2020-01-04 2020-01-07
2020-01-08 2020-01-20
【问题讨论】:
-
我猜你需要一个触发器。
-
您是否希望 (1) 确保当前数据没有重叠 (2) 以防止与现有行重叠的行插入?
-
如果 2 个范围重叠,则下一个表达式为真:
start1 < end2 AND start2 < end1。 -
@SalmanA 什么样的触发器?
-
@Akina 我想在插入时确保。此表中的每个新插入都会导致更新/插入/删除操作的组合。例如,在正确的 SET 中,如果我想添加第 5 到 25 的条目,则需要更新第 1 条目,删除第 2 和第 3 条目并为 21 到 25 日创建新条目。我想确保这个表永远不会得到重叠的条目。如果我在每次操作后都执行验证查询,那么这将导致过多的开销,因为在此表中每小时会发生数百次插入。
标签: mysql mongodb indexing database-design