我有 3 个表,“课程”(id,start_date),“订阅”(id,assistant_id,course_id,日期)和“助理”(id,registration_date)。
如您所见,订阅使用外键引用课程和助手。
如果引用的 Courses.start_date 早于引用的 Assistants.registration_date,我需要添加 CHECK 约束以防止创建订阅记录。有没有办法在 Libre Base 中做到这一点?
无法更改表组织。
我有 3 个表,“课程”(id,start_date),“订阅”(id,assistant_id,course_id,日期)和“助理”(id,registration_date)。
如您所见,订阅使用外键引用课程和助手。
如果引用的 Courses.start_date 早于引用的 Assistants.registration_date,我需要添加 CHECK 约束以防止创建订阅记录。有没有办法在 Libre Base 中做到这一点?
无法更改表组织。
无法使用默认引擎创建这样的 CHECK 约束。从HSQLDB 1.8 文档:
ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>] CHECK (<search condition>);
向表中添加检查约束。在当前版本中,检查约束只能引用正在插入或更新的行。
这意味着来自TestSelfCheckConstraints.txt的如下命令会产生错误:
/*e*/CREATE TABLE TC6(A CHAR, B CHAR, C CHAR, D INT, CHECK(A IN (SELECT A FROM TC5)));
因此,要执行此类检查,您必须提前(或之后)使用查询进行验证。这可以通过在“事件”选项卡中添加宏来为表单完成。见这篇文章的想法:https ://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=21414 。
默认引擎相当陈旧,因此对于如此复杂的需求,最好设置 LibreOffice Base 以使用不同的数据库引擎。例如使用 MySQL,可以设置一个存储过程触发器来进行这种检查。请参阅MySQL 中的 CHECK 约束不起作用。