基于 LibreOffice Base 中的另一个 table 字段创建字段约束

Create field constraint based on another table field in LibreOffice Base

我有 3 个表,"Courses"(id, start_date), "Subscriptions"(id, assistant_id, course_id, date) 和 "Assistants"(id, registration_date).

如您所见,订阅引用带有外键的课程和助手。

我需要添加 CHECK 约束,如果引用的 Courses.start_date 早于引用的 Assistants.registration_date,它将阻止创建订阅记录。有没有办法在 Libre Base 中做到这一点?

Table 无法更改组织。

默认引擎无法创建此类 CHECK 约束。来自 HSQLDB 1.8 documentation:

ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>] CHECK (<search condition>);

Adds a check constraint to the table. In the current version, a check constraint can reference only the row being inserted or updated.

这意味着来自 TestSelfCheckConstraints.txt 的如下命令会产生错误:

/*e*/CREATE TABLE TC6(A CHAR, B CHAR, C CHAR, D INT, CHECK(A IN (SELECT A FROM TC5)));

因此,要执行此类检查,您必须提前(或之后)使用查询进行验证。这可以通过在“事件”选项卡中添加宏来为表单完成。请参阅此 post 以获取想法:https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=21414

默认引擎相当旧,因此对于如此复杂的需求,最好将 LibreOffice Base 设置为使用不同的数据库引擎。例如使用 MySQL,可以设置一个存储过程触发器来进行这种检查。参见 CHECK constraint in MySQL is not working