Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不同时刻的约束_Sql_Sql Server - Fatal编程技术网

Sql 不同时刻的约束

Sql 不同时刻的约束,sql,sql-server,Sql,Sql Server,我有一张时间表 所以我的问题是:我如何限制一个值一天不能超过一次。 非常感谢。这取决于您需要“阻止”日程安排的级别。您想从UI、中间层还是在数据库级别阻止它 UI—针对DB或中间层检查执行AJAX检查,并防止在其中插入记录(这不是一个安全的解决方案,但值得一提,因为它会通知用户现有记录) 中层——最好的地方。查询数据库以查看是否存在具有给定vesselID和TourDate的记录。如果返回了任何记录,则不允许插入。然后,您可以重定向到页面,并向用户发送一条有用的消息。业务逻辑通常在这里,最好将

我有一张时间表

所以我的问题是:我如何限制一个值一天不能超过一次。
非常感谢。

这取决于您需要“阻止”日程安排的级别。您想从UI、中间层还是在数据库级别阻止它

  • UI—针对DB或中间层检查执行AJAX检查,并防止在其中插入记录(这不是一个安全的解决方案,但值得一提,因为它会通知用户现有记录)

  • 中层——最好的地方。查询数据库以查看是否存在具有给定vesselID和TourDate的记录。如果返回了任何记录,则不允许插入。然后,您可以重定向到页面,并向用户发送一条有用的消息。业务逻辑通常在这里,最好将业务逻辑与数据库分离

  • 数据库级—对于业务逻辑可见性来说,最健壮,但最不易维护,而且是一种糟糕的做法。许多选项,都很麻烦:

存储过程-插入时,检查记录,与中间层的过程相同,但您必须将“错误”消息通过漏斗传送到所有层

使用vesselID和TourDate的复合键可自动确保只能插入唯一的条目


插入时对表数据的约束-不仅仅是用于搜索优化的索引,而是实际约束。此约束可以添加到现有表格中,也可以是表格创建语句本身的一部分。

只需在船只和日期上添加唯一的约束/索引即可:

create unique index unq_tourschedule_vesselid_tourdate on tourschedule(vesselid, tourdate);
(使用唯一索引实现唯一约束。)


您应该在数据库中执行此操作,因此即使手动更改数据也会强制执行此约束。

是的,我创建了一个唯一的索引,一切正常。谢谢您的帮助

创建唯一索引(容器、日期)谢谢@Lashane它成功了!