2016-11-13 89 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) 
);