我有兩個表的用戶&房屋創建參照表的非主鍵列
用戶表的主鍵是地址&電話號碼組合(用戶通過註冊一個網頁,我不希望相同的用戶註冊兩次),userId列是串行但不是主鍵
在Stores表中,ownerID的列是來自users表的userID - 但由於它不是主鍵,因此無法設置引用(儘管它的序列號)
我該如何實現這個結果?
我有兩個表的用戶&房屋創建參照表的非主鍵列
用戶表的主鍵是地址&電話號碼組合(用戶通過註冊一個網頁,我不希望相同的用戶註冊兩次),userId列是串行但不是主鍵
在Stores表中,ownerID的列是來自users表的userID - 但由於它不是主鍵,因此無法設置引用(儘管它的序列號)
我該如何實現這個結果?
引用列不必是主鍵。
外鍵可以引用列爲主鍵或唯一約束。
這可以這樣做:
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)
);
你應該讓用戶標識的主鍵,所以你可以在國外鍵輕鬆地引用它。爲了消除手機和地址的重複,您可以爲這些列定義唯一約束或唯一索引。
我不知道你想達到什麼,但**地址和電話號碼作爲主鍵的組合**不是一個好主意! –
@RahulTripathi爲什麼? –
如果你的表中有一個UserId,那麼我建議你將它作爲主鍵,因爲那樣會更好! –