2012-05-08 12 views
8

erstellt ich die Tabelle T1T2 die und t2 wie folgt Tabellen t1 verbindet:Kombination von zwei Spalten eindeutige Einschränkung

CREATE TABLE t1t2(
id integer primary key, 
t1_id integer, 
t2_id integer, 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

Ist es möglich, eine Einschränkung (Restriction) zu definieren, die nur einmalige ermöglicht Werte von Tupel (t1_id, t2_id)? Oder sollte ich das in der Anwendung überprüfen?

Antwort

14
CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id) 

Sie müssen wahrscheinlich NOT NULL zu den Deklarationen für jede der beiden Spalten hinzufügen.

Alternativ können Sie wählen, die Primärschlüsselspalte zu verzichten (wenn alles, was Sie verwenden es für ist Einzigartigkeit) und erstellen Sie den Primärschlüssel auf der Kombination von t1_id und t2_id:

CREATE TABLE t1t2(
t1_id integer NOT NULL, 
t2_id integer NOT NULL, 
PRIMARY KEY (t1_id, t2_id), 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

Der Primärschlüssel ist ein Spezialfall eines UNIQUE-Indexes. Wenn Sie den zusammengesetzten PRIMARY KEY verwenden, werden eine Spalte und ein Index gespeichert, aber Ihre Anwendung muss sowohl t1_id als auch t2_id kennen, um eine einzelne Zeile aus der Tabelle abrufen zu können.

+0

nur Es ist nicht zu halten für Einzigartigkeit (ich die t1t2.id Spalt muß), aber ich bin interessiert in der alternativen Methode. Könnten Sie den Tisch zeigen? Ich werde einige Zeit warten, bevor ich akzeptiere, Gewissheit zu haben, dass dies richtig ist, danke. – xralf

+1

Siehe bearbeitete Antwort. –

6

Sie können Ihrer create table-Anweisung eine eindeutige Integritätsbedingung hinzufügen. Dies muss nicht der Primärschlüssel sein.

UNIQUE(t1_id, t2_id), 
0

Sie Ihren einzigartigen Primärindex mit diesen Optionen erstellen könnten Ihren Primärschlüssel und eine eindeutige Einschränkung SQL Lite New Index option

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – mathielo

Verwandte Themen