2016-11-13 3 views
0

Ich kann nicht wirklich eine Lösung für mein Problem finden und die Frage ist: Muss ich wirklich einen Primärschlüssel hier erstellen?Primärschlüssel auf isolierte Tabelle


Einzelheiten

hat meine Website eine Tabelle in einer Datenbank translations genannt, in denen ich jedes Wort einzigen Satz/Put mit unterschiedlichen Übersetzungen. Ich habe diese Struktur:

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

Das Feld id zu einem Wort verbunden ist, lang das Feld ist eine Zahl, die die Übersetzung (01 = Englisch, 02 = Italienisch, 03 = französisch) und die text ist die Übersetzung anzeigt, von diesem Wort.

In diesem Fall, wenn ich (zum Beispiel) das Wort hallo brauche ich weiß, dass es ID = 1 hat und dann kann ich die Sprache wählen.

Ist dies ein guter Weg, um diese Art von Tabelle zu erstellen? Ich bin mir nicht sicher, aber ich finde das einfach, weil ich anrufen kann:

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

Sie können die? weil ich Params mit PDO binde. Die 'lang' ist eine Konstante, die aus einem Cookie (01,02,03) abgerufen wird.

Wichtiger Hinweis: hier habe ich keinen Primärschlüssel, ich habe nur gesetzt id und lang auf einzigartige

+0

verwenden Wenn Sie einen eindeutigen Index haben, sollten Sie, dass ein Primärschlüssel machen. Ich glaube, du verwechselst _primary key_ mit _surrogate key_. Schaut beide Begriffe nach. Sie können auch eine Antwort auf diese Frage auf DBA.SE lesen: http://dba.stackexchange.com/questions/6108/should-every-table-have-a-single-field-surrogate-artificial-primary-key/6110 # 6110 –

Antwort

5

Wenn Sie Ihre Tabellenstruktur behalten möchten und Sie müssen nur ein Übersetzung pro Sprache für jedes Wort , dann können Sie id + lang als Primärschlüssel

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