2014-11-22 119 views
1

所以基本上我有以下問題,以實現作爲Oracle SQL數據庫的一部分:SQL約束檢查另一個表列

表1(attR1位,attR2位)

表2(attr3,table1_attr1)

約束:一個table2元組只能有一些table1_attr1,table1中的元組attr2不爲null。

我曾嘗試以下(連同其他註釋掉的可能性),但它顯然是行不通的,因爲attR2位是不是一個獨特的價值:

CREATE TABLE table1 (
    attr1    VARCHAR(100) NOT NULL, 
    attr2    VARCHAR(200), 
    PRIMARY KEY(attr1) 
); 

CREATE TABLE table2 (
    attr3     INTEGER  NOT NULL, 
    table1_attr1  VARCHAR(100) NOT NULL, 
    table1_attr2   VARCHAR(50), --REFERENCES table1(attr2), 

    FOREIGN KEY (table1_attr1, table1_attr2) REFERENCES table1(attr1, attr2), 
    CONSTRAINT const_table1 CHECK(table1_attr2 IS NOT NULL), 

    PRIMARY KEY(attr3) 
); 

我需要一些幫助,因爲製作attR2位獨特不是一種選擇。 我已閱讀過有關製作某個功能的資訊,但我對它們並不十分熟悉。將嘗試它,如果他們是唯一的選擇。

回答

1

終於找到了我自己的答案。這聽起來很愚蠢,但我希望它能幫助那些在這個案子中掙扎的人。

通過添加:

UNIQUE(attR1位,attR2位)

table1我們正在創造一個獨特的密鑰,但由於主要是剛attR1位,有沒有辦法將有與不同的attr2 s相同的元組的副本。

要點是,現在這兩個組合是一個唯一的鍵,而不影響數據庫的其餘部分。因此table2中的檢查約束可以毫無問題地完成。