Sql 实现方法选择

Sql implementation method choice

我对构造 sql 约束感到困惑。

假设我有两个 table 命名的人和 rent_car。人有两列名为 person_id,工作。 rent_car 还有两列名为 person_id 和 renting_date.

约束:

哪种方法适合我?触发、检查或断言,为什么?

触发器发生, 声明性约束是。

声明性约束描述了一个状态,其中数据有效,因此必须始终满足它们。这意味着如果记录中的数据发生变化,则关于声明性约束的记录的有效性只能改变;记录的有效性 不得 由于宇宙其他部分的某些事件而改变。这就是为什么在强制执行它们的系统上,检查约束可能不会引用随时间变化的系统变量,例如 CURRENT_TIMECURRENT_USER,或 table 中的其他记录或记录在其他 table 中。外键约束的 ON DELETEON UPDATE 子句防止父 table 中的更改使子 table.

中的记录无效

另一方面,触发器是在离散时间点执行的过程。它执行的任何测试只需要在执行它们的瞬间得到满足,并且只针对它们参数的瞬时值进行测试。因此,触发器可以自由引用动态系统变量、其他记录、其他 table 甚至其他数据库。

那么针对你的问题。当您将记录与常量字符串进行比较时,我会为您的第二种情况使用声明性约束。对于租金,这将取决于。如果数据库正在记录发生 "right now," 的租金,则将时间与 "right now" 进行比较,这只能在触发器中完成。如果 table 记录了 未来租赁的预订, 则租赁时间将与常量进行比较,检查约束将是合适的。

据我了解,断言是一种工具,用于测试 代码的正确性, 而不是 数据的正确性, 等等不是实施业务规则的合适工具。

希望对您有所帮助。