kyl*_*tme 2 sql-server sql-server-2014
如何为下表设置唯一键约束,以确保日期/开始时间和日期/结束时间之间的日期/时间跨度不与其他记录重叠?如果我需要添加计算列,什么数据类型和计算?
Column Name Data Type
Date date
BeginTime time(7)
EndTime time(7)
Run Code Online (Sandbox Code Playgroud)
谢谢。
亚历山大·库兹涅佐夫展示了一种可能的方法。存储没有重叠的时间间隔。
另请参阅 Joe Celko 的文章:连续时间段
这是表格和第一个区间:
CREATE TABLE dbo.IntegerSettings(SettingID INT NOT NULL,
IntValue INT NOT NULL,
StartedAt DATETIME NOT NULL,
FinishedAt DATETIME NOT NULL,
PreviousFinishedAt DATETIME NULL,
CONSTRAINT PK_IntegerSettings_SettingID_FinishedAt
PRIMARY KEY(SettingID, FinishedAt),
CONSTRAINT UNQ_IntegerSettings_SettingID_PreviousFinishedAt
UNIQUE(SettingID, PreviousFinishedAt),
CONSTRAINT FK_IntegerSettings_SettingID_PreviousFinishedAt
FOREIGN KEY(SettingID, PreviousFinishedAt)
REFERENCES dbo.IntegerSettings(SettingID, FinishedAt),
CONSTRAINT CHK_IntegerSettings_PreviousFinishedAt_NotAfter_StartedAt
CHECK(PreviousFinishedAt <= StartedAt),
CONSTRAINT CHK_IntegerSettings_StartedAt_Before_FinishedAt
CHECK(StartedAt < FinishedAt)
);
INSERT INTO dbo.IntegerSettings
(SettingID, IntValue, StartedAt, FinishedAt, PreviousFinishedAt)
VALUES(1, 1, '20070101', '20070103', NULL);
Run Code Online (Sandbox Code Playgroud)
约束强制执行这些规则:
| 归档时间: |
|
| 查看次数: |
2310 次 |
| 最近记录: |