我有一张表ITEM
,其中应包含:
ID_SERVICE , // foreign key to table SERVICE
ID_FILE , // foreign key to table FILE
ID_FUNCTION // foreign key to table FUNCTION
并且它必须由那3列(复合主键)标识,但是我的问题是有时我可能有一个没有函数的项(ID_FUNCTION
可能为null)。
如何重新设计此表以便它可以处理这些约束?
感谢。
答案 0 :(得分:3)
您创建唯一索引而不是主键约束。唯一索引允许任何键为空,但仍然强制每列的唯一性。语法与索引相同,但您在前面添加了唯一:
create unique index i_table_name
on table_name ( column_names )
tablespace
storage ( ... )
< etc >
唯一索引将自动创建一个独特的约束。如果你不想要索引,你可以自己创建约束:
alter table table_name
add constraint constraint_name unique (column_names)
Here是关于不同类型约束的更多信息。
答案 1 :(得分:0)
是否将ID_FUNCTION声明为NOT NULL?如果它不可为空,这可能是解决方案。更改表,以便ID_FUNCTION列允许空值。