2011-04-17 113 views
0

我有一個表登錄有登錄名和密碼字段。兩者都是主要關鍵。如何將外鍵指向組合的主鍵?

而我有一個表格字符。哪個登錄可以有很多字符。那麼外鍵是如何工作的呢?

如何在字符表中創建外鍵來登錄?

我應該在字符表中創建2個字段作爲外鍵指向登錄嗎?

謝謝!

+3

爲什麼'login,password'是一個複合主鍵而不是'login'?一個'login'可以有多個密碼嗎? '密碼'似乎不夠穩定,無法成爲PK(IMO)的一部分 – 2011-04-17 21:47:29

+3

密碼是否爲主鍵有什麼用?!如果登錄更改會發生什麼情況,而另一個登錄所使用的另一個帳戶的密碼是?該數據庫實現看起來很奇怪... – 2011-04-17 21:47:46

+2

密碼字段不應該是主鍵的一部分。如果登錄ID和密碼都是主鍵的一部分,那麼密碼就會成爲該帳戶身份的一部分,而這很糟糕,原因很多。另外,這意味着登錄id在系統中不會是唯一的。 – 2011-04-17 21:48:32

回答

3

使用以下在創建表或改變腳本:

create table character (
    field1 varchar(30), 
    ..., 
    login varchar(12), 
    password varchar(128), 
    foreign key (login, password) references login (login, password) 
) 

現在,這一說,這似乎很奇怪,包括密碼登錄表的主鍵。我建議只在登錄表上使用主鍵,或者甚至可以使用代理鍵(整數標識)。使用包括登錄名和密碼的方法,您將允許在同一登錄下進行多次註冊。這可能沒問題,但似乎可以創建一個用戶不小心創建多個登錄的情況。此外,它會使管理丟失的密碼恢復變得更加困難。最後,每次密碼更改(並且用戶可以隨時更改密碼),它必須在每個引用字段中更新,並且會使密碼更改變得極其複雜。

+0

謝謝,但如果我的策略是正確的(不是),我仍然不明白如何處理這種情況。我怎麼能在Character表中添加一個新的實例(對象)?告訴我的SQL查詢,謝謝! – Seva 2011-04-17 21:53:32

+2

@seva - 你的字符表需要同時包含兩列('login,password') – 2011-04-17 21:55:54

+0

啊,現在我明白了。謝謝!而已! – Seva 2011-04-17 21:59:10