Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql JavaDB约束_Sql_Constraints_Derby - Fatal编程技术网

Sql JavaDB约束

Sql JavaDB约束,sql,constraints,derby,Sql,Constraints,Derby,我试图在JavaDB中创建一个约束。我有两个表:任务和子任务。这些表具有1:m关系(任务1:m子任务)。约束需要检查子任务中的开始日期是否不早于任务表中的开始日期。 不确定,如何才能做到这一点。 我的代码: 这给了我一个错误: “子查询”可能不会出现在检查约束定义中,因为它可能返回不确定的结果。 如何用SQL表示约束?非常感谢您的帮助。我现在不了解Derby,但几乎没有一个DBMS(除了存在问题的访问)支持CHECK约束或(类似概念)断言中的子查询,这些约束涉及多个表(Firebird文档说它确

我试图在JavaDB中创建一个约束。我有两个表:任务和子任务。这些表具有1:m关系(任务1:m子任务)。约束需要检查子任务中的开始日期是否不早于任务表中的开始日期。 不确定,如何才能做到这一点。 我的代码:

这给了我一个错误:
“子查询”可能不会出现在检查约束定义中,因为它可能返回不确定的结果。


如何用SQL表示约束?非常感谢您的帮助。

我现在不了解Derby,但几乎没有一个DBMS(除了存在问题的访问)支持
CHECK
约束或(类似概念)
断言中的子查询,这些约束涉及多个表(Firebird文档说它确实支持这些)

您可以阅读有关此精细答案所涉及困难的一些详细信息:


以声明方式强制约束的一种方法是在表
子任务中添加一个(冗余的)
任务。也可以在表
子任务中添加start\u date
列,并更改外键约束以包括该列。示例表定义:

CREATE TABLE task
( task_id INT NOT NULL PRIMARY KEY
, task_start_date DATE NOT NULL
, CONSTRAINT task_id_start_date_UQ
    UNIQUE (task_id, task_start_date)
) ;

CREATE TABLE subtask
( subtask_id INT NOT NULL PRIMARY KEY
, start_date DATE NOT NULL
, task_id INT NOT NULL
, task_start_date DATE NOT NULL
, CONSTRAINT task_subtask_FK
    FOREIGN KEY (task_id, task_start_date)
    REFERENCES task (task_id, task_start_date)
, CONSTRAINT subtask_should_not_start_before_task_CK
    CHECK (start_date >= task_start_date)
) ;

我现在不想讨论Derby,但是几乎没有DBMS(除了存在问题的Access)支持
CHECK
约束中的子查询,或者(类似的概念)
断言中的子查询,这些约束涉及多个表(Firebird文档说它确实支持这些)

您可以阅读有关此精细答案所涉及困难的一些详细信息:


以声明方式强制约束的一种方法是在表
子任务中添加一个(冗余的)
任务。也可以在表
子任务中添加start\u date
列,并更改外键约束以包括该列。示例表定义:

CREATE TABLE task
( task_id INT NOT NULL PRIMARY KEY
, task_start_date DATE NOT NULL
, CONSTRAINT task_id_start_date_UQ
    UNIQUE (task_id, task_start_date)
) ;

CREATE TABLE subtask
( subtask_id INT NOT NULL PRIMARY KEY
, start_date DATE NOT NULL
, task_id INT NOT NULL
, task_start_date DATE NOT NULL
, CONSTRAINT task_subtask_FK
    FOREIGN KEY (task_id, task_start_date)
    REFERENCES task (task_id, task_start_date)
, CONSTRAINT subtask_should_not_start_before_task_CK
    CHECK (start_date >= task_start_date)
) ;

您正在使用哪些数据库管理系统?您正在使用哪些数据库管理系统?