2009-08-23 14 views
1

Ich habe eine Datenbank, wo ich vermeiden muss, Duplikate einzufügen. Die Anforderungen sind:sql eindeutige und Einstellung Einschränkungen für Einsätze

Für die Teilmenge von Zeilen mit Spaltenpassenden 1, es keine, das die gleiche Spalte 2.

Für die Teilmenge von Zeilen mit Spaltenpassenden 1, da nicht sein kann, hat sein kann, dass habe die gleiche Spalte 3 und 4.

Ich bin neu in SQL also gibt es eine Möglichkeit zum Festlegen dieser Beziehungen, wenn ich die Datenbank erstellen (Tabelle erstellen) oder muss ich eine Auswahl treffen und diese Prüfungen manuell vor Einfügen in die Tabelle?

Antwort

4

Tatsächlich müssen die Spalten 1 und 2 eindeutig sein und auch die Spalten 1,3 und 4 müssen eindeutig sein. Wenn Sie also die Tabelle erstellen, können Sie zwei UNIQUE-Konstanten verwenden:

CREATE TABLE tbl (
    col1 varchar(255), 
    col2 varchar(255), 
    col3 varchar(255), 
    col4 varchar(255), 
    CONSTRAINT uc_first UNIQUE(col1, col2), 
    CONSTRAINT uc_second UNIQUE(col1, col3, col4) 
) 
+0

Danke. Eine Sache, gibt es eine Möglichkeit zu wissen, welche Einschränkung in SQLite ausgelöst wird? Google zeigt einige Leute, die sich beschweren, dass sie Zeichenfolgenvergleiche durchführen müssen (.IsSameAs ("SQLITE_CONSTRAINT [19]: Spalten 1, 3, 4, sind nicht eindeutig")). Seem klunky. – max

0

einfach den Ball ins Rollen zu bekommen ...

Könnten Sie nach der Einsatz sofort zurück gehen und duplizierte Zeilen löschen, die auf den contraints basierend Sie erwähnt?

+0

Ugh ... höflich darüber zu sein. Ja, du kannst; aber nein, es wäre schrecklich ineffizient, dies zu tun. –

+0

Fair genug. Ich habe aus Todd Owens Antwort gelernt, dass CONSTRAINT notwendig ist, wenn der Tisch erstellt wird. Ich nehme an, dass es nach der Erstellung geändert werden kann. Zurück zum Handbuch ... – pavium

Verwandte Themen