在我的數據庫過程中,我們用書(數據庫系統 - 整本書),它說,下面是標準的SQL有效create table語句:子查詢中的元組約束DB2
CREATE TABLE Participants (
meetid INT NOT NULL,
-- ...
CONSTRAINT RoomConstraint
CHECK (1 >= ALL (SELECT num FROM Numbers)
);
但是DB2抱怨並給出了20個可能的解釋,說明爲什麼這個聲明失敗。
那麼,DB2不支持元組約束中的子查詢嗎?如果不是,TRIGGER是實施子查詢約束的唯一解決方案嗎?
更新:我發現這個鏈接,指出這是不可能的:http://bytes.com/topic/db2/answers/837390-can-constraint-replace-trigger
但同樣是一個觸發器的唯一出路? (我試圖執行一個關係,其中一個屬性可以參考兩個不同的表(它不是我的數據庫))
更新2:它不無ALL
工作,要麼:
CREATE TABLE Foo (
meetid INT NOT NULL,
CHECK (meetid IN (SELECT meetid FROM Foo)));
更新3:的想法是,我想它引用類似下面兩個表的外鍵:從本質上講
Table Participants (pid, ...)
Table Rooms (room, ...)
Table People (userid, ...)
,一個pid不得以任何滾裝存在oms(屬性室)或People(屬性用戶標識)中。我可以使用行約束來檢查pid是否在Rooms或People中 - 但DB2不會讓我。 (我知道有很多其他東西來限制模擬外鍵)
請發佈真正的DDL。您的更新#2顯示了一個表格,您希望在插入它之前檢查meetid是否已存在於同一個表格中?你如何插入第一行? ;-) – 2010-09-09 20:22:02
INTEGRITY OFF :)我只是想知道當我必須使用子查詢時是否有一個很好的替代行約束。真正的例子是漫長而愚蠢的(一個設計錯誤的數據庫),所以我認爲最好不要發表。但我會更詳細地解釋我想要的內容(請參閱2秒內的更新3) – 2010-09-09 20:44:39