我有一个格式为
的表格CREATE TABLE TimePeriod(
startTime integer NOT NULL,
endTime integer NOT NULL,
otherData TEXT
)
我需要确保时间段之间没有重叠。
示例:
startTime
11:00和endTime
13:00已在数据库中; startTime
10:30和endTime
11:30插入行; startTime
12:30和endTime
13:30插入行; startTime
11:30和endTime
12:30插入行; startTime
13:00和endTime
14:30插入行。Obs:我使用SQLite并且我将时间存储为午夜以来的秒数,如果需要,我可以更改表格结构。
答案 0 :(得分:1)
CHECK约束可能不包含子查询,因此您必须使用触发器。
为防止插入行,触发器必须评估RAISE功能。 当没有找到具有重叠时间的其他行时,WHERE过滤器会阻止此操作:
CREATE TRIGGER prevent_overlapping_time
BEFORE INSERT ON TimePeriod
FOR EACH ROW
BEGIN
SELECT RAISE(ABORT, 'overlapping time')
FROM TimePeriod
WHERE NEW.endTime > startTime
AND NEW.startTime < endTime;
END;