每个给定时间段一个表条目

时间:2014-08-22 12:44:15

标签: sql sql-server

我想知道你是否可以在SQL中创建约束,确保用户在每个给定的时间段内不输入多个条目。

例如:如果它是一天一次,我想你可以创建一个复合键,例如:(UserID,Day,Month,Year)。

有更合适的方法吗?你可以在任何时间间隔内完成吗?

3 个答案:

答案 0 :(得分:0)

是的,假设在日历时间线上定义了时间间隔,您可以这样做。也就是说,每周设置一次很容易。设置“条目之间至少一周”有点困难(即需要触发器)。

为此,您可以使用计算列和唯一索引。例如,以下内容确保每个日历年只有一个条目:

alter table t add theyear as year(datecol);

create unique index t_user_theyear on t(user, theyear);

答案 1 :(得分:0)

答案:

  

你不应该

不满意,所以我会尝试更好地解释。

您描述的功能不直接与持久性绑定。数据库有责任持久保存数据,而任何特定于域的逻辑都不属于该层。

您应该将该逻辑放入特定于域的层,自然是在Web服务器的代码中。

SQL不受限制或其他什么,但它不能考虑所有特定于域的案例和细微差别,而Web服务器正是为此而准备的:)

假设您的间隔紧随任意(不对齐小时,天或数据库可用的任何数据)。你必须使时间值离散。但是这个功能可能是任意复杂的,如下所示:

dicrete_time(t) ::= floor((t / 5 + 3) * (t * 2))

只要是monotonic increasing,就无法确定时间如何映射到离散时间。所以这不应该在数据库服务器上实现。它超出了范围。

答案 2 :(得分:0)

您无法在架构级别上执行此操作,因为列约束对每一行单独工作,与表的其余部分隔离。

您可以创建一个表触发器,您可以在其中实现所有这些检查,无论它们多么复杂。如果您无法控制所有数据源,那可能是唯一可行的选择。