2013-10-27 38 views
1

我有兩個表的用戶&房屋創建參照表的非主鍵列

用戶表的主鍵是地址&電話號碼組合(用戶通過註冊一個網頁,我不希望相同的用戶註冊兩次),userId列是串行但不是主鍵

在Stores表中,ownerID的列是來自users表的userID - 但由於它不是主鍵,因此無法設置引用(儘管它的序列號)

我該如何實現這個結果?

+0

我不知道你想達到什麼,但**地址和電話號碼作爲主鍵的組合**不是一個好主意! –

+0

@RahulTripathi爲什麼? –

+0

如果你的表中有一個UserId,那麼我建議你將它作爲主鍵,因爲那樣會更好! –

回答

2

引用列不必是主鍵。

外鍵可以引用列爲主鍵或唯一約束

這可以這樣做:

CREATE TABLE Users(
    address varchar(100), 
    phone_number varchar(20), 
    userid serial, 
    constraint pk primary key (address, phone_number), 
    constraint userid_unq unique (userid) 
); 

create table Stores(
    storeid int primary key, 
    ownerID integer, 
    constraint b_fk foreign key (ownerID) 
    references Users(userid) 
); 
1

你應該讓用戶標識的主鍵,所以你可以在國外鍵輕鬆地引用它。爲了消除手機和地址的重複,您可以爲這些列定義唯一約束或唯一索引。