我想知道你是否可以在SQL中创建约束,确保用户在每个给定的时间段内不输入多个条目。
例如:如果它是一天一次,我想你可以创建一个复合键,例如:(UserID,Day,Month,Year)。
有更合适的方法吗?你可以在任何时间间隔内完成吗?
答案 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)
您无法在架构级别上执行此操作,因为列约束对每一行单独工作,与表的其余部分隔离。
您可以创建一个表触发器,您可以在其中实现所有这些检查,无论它们多么复杂。如果您无法控制所有数据源,那可能是唯一可行的选择。