2016-11-13 45 views
0

我真的不能找到解決我的問題,問題是:我真的必須在這裏創建一個主鍵嗎?孤立表上的主鍵


詳細

我的網站中有一個名爲translations中,我把每一個句子/單詞以不同的翻譯數據庫中的表。我有這樣的結構:

id | lang | text 
------------------- 
01 | 01 | hello 
01 | 02 | ciao 
01 | 03 | salut 
02 | 01 | surname 
02 | 02 | cognome 
02 | 03 | nom 

id被連接到一個字,該字段lang是一個數字,指示翻譯(01 =英語,02 =意大利語,03 =法國)和text是翻譯這個詞。

在這種情況下,如果我需要(例如)單詞你好我知道它有id = 1,然後我可以選擇語言。

這是創建這種表的好方法嗎?我不確定,但我覺得這很容易,因爲我可以打電話:

SELECT text FROM tablename WHERE id = ? AND lang = ? 

你可以看到?因爲我用PDO綁定了params。 'lang'是一個從cookie中獲取的常量(01,02,03)。

重要提示:在這裏我沒有主鍵,我只設置idlang獨特

+0

如果你有一個唯一索引,你應該做的是一個主鍵。我認爲你將_primary key_與_surrogate key_混淆。查看兩個術語。另外,您可以在DBA.SE上閱讀這個問題的答案:http://dba.stackexchange.com/questions/6108/should-every-table-have-a-single-field-surrogate-artificial-primary-key/6110#6110 –

回答

5

如果你想保持你的表結構,你必須每語言只是一個翻譯每個字,那麼你可以使用id + lang作爲主鍵

CREATE TABLE translations 
(
    id int, 
    lang int, 
    text varchar(150) NOT NULL, 
    PRIMARY KEY (id, lang) 
);