Ich versuche, eine Beziehung zu erstellen, wo vier verschiedene Teile enthalten sein können, aber jede Sammlung der gleichen Teile sollte als einzigartig behandelt werden.MySQL-Frage - Eindeutiger Schlüssel Funktioniert nicht richtig, oder missverstehe ich?
Beispiel: Eine Zuweisung muss eine zugewiesene Firma haben, kann optional einen zugewiesenen Standort, eine Arbeitsgruppe und ein Programm haben. Eine Zuweisung darf keine Arbeitsgruppe ohne einen Standort haben.
Nehmen wir an, wir haben Unternehmen A, B, C; Orte X, Y, Z; Arbeitsgruppen I, J, K und Programme 1, 2, 3.
So könnte gültige Beziehungen umfassen A - X - I - 1 A - Z - 2 B - Y C C - 3 B - Z - K
Aber ungültige Beziehungen würden A enthält - K (Arbeitsgruppe ohne Ort) Y - K - 1 (Kein Unternehmen)
Also, an meinen Tisch zu erstellen, habe ich
erstelltich meine, das würde alle meine Beziehungen neben der neccessity einer Zuweisung behandeln einen Ort zu haben, wenn es eine Arbeitsgruppe ist (was ich gerne programmatisch tun kann oder mit Trigger, glaube ich)
Allerdings, wenn ich testen dieses Schema erlaubt es mir die folgende ...
INSERT INTO test VALUES (1, null, null, null), (1, null, null, null);
... ohne Beschwerde ein. Ich vermute, dass (1, null, null, null) nicht gleich ist, weil Nullen enthalten sind. Wenn das der Fall ist, kann ich dann irgendwie mit dieser Beziehung umgehen?
Jede Hilfe wäre willkommen!
Das Setzen der Spalten auf "NOT NULL" würde funktionieren, würde aber auch das Hinzufügen von Daten wie Rob erfordern und ich schlug vor, dass die Datenbank die aufgelisteten Anforderungen korrekt erfüllt - wenn NULL nicht erlaubt ist, brauchen Sie a 'NO FOO' Wert, der ein gültiger Eintrag in der FOO-Tabelle ist, auf die sich der FK bezieht. –
Zum Erstellen des Index als Primärschlüssel: Das einzige Problem besteht darin, dass Sie keine AUTO_INCREMENT-Spalte erstellen können, wenn sie nicht Teil des Primärschlüssels ist. Das ist das Problem, das ich habe. –
Ein weiteres Problem mit den NULL-fähigen Spalten des PK besteht darin, dass sie NOT NULL werden und stattdessen 0 oder eine leere Zeichenfolge als Standardwert erhalten. – Rafa