1
我已經瀏覽了論壇,但我似乎無法找到我正在尋找的東西。我有一個超類型,員工和三個引用員工主鍵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));
我想創建經由交叉值的視圖中的約束,那麼一個約束限制視圖的條目僅空,如下所示:
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
請幫助或指向我的方向我可能會找到它!萬分感謝!