2010-03-23 10 views
8

Ich habe zwei Tabellen -> Variablen (ID, Name) und Variable_Entries (ID, var_id, Wert).MySQL: Eindeutige Einschränkung für mehrere Felder

Ich möchte, dass jede Variable einen eindeutigen Satz von Einträgen hat. Wenn ich den Werteintrag einzigartig mache, kann eine andere Variable nicht denselben Wert haben, der nicht richtig ist.

Gibt es eine Möglichkeit, die Wertespalte für identische var_ids eindeutig zu machen?

Antwort

9

Ja:

alter table Variable_Entries add unique (var_id, value); 

Jetzt haben Sie eine eindeutige Einschränkung über var_id und zusammen Wert. Mit anderen Worten, kein Vorkommen von var_id und value kann mehr als einmal auftreten.

+0

Danke, und Leute unter too-- Ich konnte das nirgendwo finden – Cypher

+0

Gibt es eine Möglichkeit, dies zu erzwingen, wenn Sie die Tabelle erstellen? – puk

+2

Sie können nicht wissen, werden zu wollen, sondern für das Wohl der anderen, 'create table tbl_table ( \t id integer nicht null auto_increment, \t fname varchar (255), lname varchar (255), \t CONSTRAINT tbl_table PRIMARY KEY (id), \t unique (fname, lname) ) ' –

0

Fügen Sie einen eindeutigen Schlüssel von Variable_Entries für die kombinierten Felder var_id/value hinzu.

Außerdem sollten Sie immer singuläre Wörter für Tabellennamen verwenden (Benutzer statt Benutzer). Verwenden Sie niemals Großbuchstaben im Tabellennamen, da dies zu einem NIGHTMARE über verschiedene Betriebssysteme führt.

+0

Ich frage mich, warum sollten wir immer singulären Namen für Tabellennamen verwenden? –

+0

"Sie sollten immer singuläre Wörter für Tabellennamen verwenden" - ich stimme nicht zu. Ich benutze immer den Plural, und ich weiß, dass ich nicht alleine bin (ActiveRecord zum Beispiel macht dasselbe). –

+0

CakePHP hängt von Plural für Tabellennamen ab ... Es ist ein witziger Kommentar :) Großbuchstaben, obwohl ... stimme ich zu – luigi7up

6

Ja, können Sie ein zusammengesetztes unique key erstellen:

ALTER TABLE variable_entries ADD UNIQUE (var_id, value); 
+0

Danke für das Wort * Composite *, ließ mich verstehen, was es tut. –

Verwandte Themen