具有复杂主键的Derby中的表

时间:2014-03-10 01:56:12

标签: sql derby

是否可以使用由外键fk1fk2fk3

组成的主键

其中:

  • fk1永远不应该为空

  • fk2fk3可以为null

我有以下SQL:

CREATE TABLE role_mappings (
       ROLE_NAME            VARCHAR(64)       NOT NULL,
       NESTED_ROLE_NAME     VARCHAR(64)       DEFAULT NULL,
       PRIVILEGE_NAME       VARCHAR(64)       DEFAULT NULL,
       PRIMARY KEY (ROLE_NAME, NESTED_ROLE_NAME, PRIVILEGE_NAME),
       CONSTRAINT fk_access_roles_rm_1 FOREIGN KEY (ROLE_NAME) REFERENCES access_roles (ROLE_NAME),
       CONSTRAINT fk_access_privileges FOREIGN KEY (PRIVILEGE_NAME) REFERENCES access_privileges(PRIVILEGE_NAME),
       CONSTRAINT fk_access_roles_rm_2 FOREIGN KEY (NESTED_ROLE_NAME) REFERENCES access_roles(ROLE_NAME)
);

当我将NULL插入NESTED_ROLE_NAMEPRIVILEGE_NAME时,我得到:

Column 'NESTED_ROLE_NAME'  cannot accept a NULL value.

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

主键值必须是唯一的。如果您在构成主键的这些字段中允许空值,则很快会遇到非唯一性问题。使用空值的AVOId将是我的建议。