我有3个表,“课程”(id,start_date),“订阅”(id,assistant_id,course_id,date)和“Assistants”(id,registration_date)。
如您所见,订阅会引用具有外键的课程和助理。
我需要添加CHECK约束,如果引用的Courses.start_date比引用的Assistants.registration_date旧,则会阻止创建订阅记录。有没有办法在自由基地做到这一点?
无法更改表格组织。
答案 0 :(得分:2)
无法使用默认引擎创建此类CHECK约束。来自HSQLDB 1.8 documentation:
ALTER TABLE< tablename>添加[CONSTRAINT< constraintname>] 检查(<搜索条件>);
向表中添加检查约束。在当前版本中,检查约束只能引用该行 插入或更新。
这意味着来自TestSelfCheckConstraints.txt的以下命令会产生错误:
/ * e * / CREATE TABLE TC6(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,可以设置存储过程触发器来执行此类检查。请参阅CHECK constraint in MySQL is not working。