根据LibreOffice Base中的另一个表字段创建字段约束

时间:2016-01-08 12:39:55

标签: hsqldb libreoffice-base

我有3个表,“课程”(id,start_date),“订阅”(id,assistant_id,course_id,date)和“Assistants”(id,registration_date)。

如您所见,订阅会引用具有外键的课程和助理。

我需要添加CHECK约束,如果引用的Courses.start_date比引用的Assistants.registration_date旧,则会阻止创建订阅记录。有没有办法在自由基地做到这一点?

无法更改表格组织。

1 个答案:

答案 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