我浏览了论坛,但我似乎无法找到我正在寻找的确切内容。我有一个超类型、员工和三个引用员工主键 ID 的子类型。雇员的子类型必须是不相交的。我的问题出现在我不明白在哪里设置约束来实现这一点。
CREATE TABLE Employee(
ID INT,
PRIMARY KEY(ID));
CREATE TABLE Manager(
ID INT,
Salary INT NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(ID) REFERENCES Employee(ID));
CREATE TABLE Server(
ID INT,
Tips INT NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(ID) REFERENCES Employee(ID));
CREATE TABLE Hostess(
ID INT,
hourly_sal INT NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(ID) REFERENCES Employee(ID));
我想通过相交值的视图创建约束,然后将视图的条目限制为 null 的约束,如下所示:
CREATE VIEW EMPLOYEE_DISJOINT AS
((SELECT ID FROM Server)INTERSECT (SELECT ID FROM Hostess))
UNION
((SELECT ID FROM Hostess) INTERSECT (SELECT ID FROM Manager))
UNION
((SELECT ID FROM Server) INTERSECT (SELECT ID FROM Manager));
ALTER VIEW EMPLOYEE_DISJOINT
ADD CONSTRAINT disjoint CHECK(ID = NULL);
试图在视图上创建一个约束,要求 Employee 中的所有主键对于一个且只有一个员工子类型是唯一的。有一个更好的方法吗?虽然这种方法似乎应该有效,但我收到以下错误:
ADD CONSTRAINT disjoint CHECK(ID = NULL)
*
ERROR at line 2:
ORA-00922: missing or invalid option
请帮助或指出我可能找到它的方向!万分感谢!