MySQL UNIQUE ermöglicht weiterhin das Einfügen doppelter Zeilen, wenn Fremdschlüsselspalten NULL sind [Duplikat]
Posted: 11 Jan 2025, 13:03
Ich habe 3 Tabellen ProdVariant, Variant, VariantValues.
Ein Produkt kann in der ProductVariant-Tabelle enthalten sein, wenn es keine Variants und keine VariantValues hat. Dann sind beide Felder NULL, es kann jedoch weder das eine noch das andere haben. Die Zeile muss entweder beide Felder „Variant“ und „VariantValues“ als NULL oder beide mit einem numerischen Wert enthalten.
Ich habe eine UNIQUE-Einschränkung für diese Tabelle festgelegt
Diese EINZIGARTIGE Einschränkung funktioniert für alle Eingaben, es sei denn, ich versuche, eine neue Zeile mit denselben Werten einzugeben, wobei die VariantID und VariantValuesID NULL sind und die neu eingegebene Zeile beide Spalten NULL ist. Ich muss NICHT zulassen, dass eine doppelte Zeile eingegeben wird, wenn eine vorhandene Zeile
ist
Wenn ich eine neue Zeile mit denselben Werten eingebe, wird dies zugelassen
Wenn ein Unique NULL nicht einschränkt, gibt es eine Möglichkeit, dies beizubehalten? Eindeutige Einschränkung, die in jeder anderen Situation funktioniert, aber auch eine CHECK-Funktion hinzufügen, die keinen neuen Eintrag zulässt, wenn die Eingabe für Variant oder VariantValues NULL ist und bereits eine doppelte ProductID in der Tabelle vorhanden ist? Ich hoffe, dies zu tun, ohne einen Trigger ausführen zu müssen. Ich habe darüber nachgedacht, einfach die Feldeinstellungen VariantID und VariantValuesID in der Tabelle auf NOT NULL zu setzen und dann einfach eine Zeile in den Tabellen Variants und VariantValues einzufügen und zu belassen, die alle NULL-Felder haben. Die Felder VariantID und VariantValuesID müssen BEIDE NULL sein oder BEIDE Felder müssen einen INT-Wert haben.
Code: Select all
ProductVariant
----------------------------
ProductVariantID PK
ProductID FK NOT NULL
VariantID FK NULL
VariantValuesID FK NULL
Variant
-----------------------------
VariantID PK
VariantValues
------------------------------
VariantValuesID PK
VariantID FK NOT NULL
Ich habe eine UNIQUE-Einschränkung für diese Tabelle festgelegt
Code: Select all
ALTER TABLE ProductVariant
ADD CONSTRAINT ProdVarVarValUnique UNIQUE (ProductID, VariantID, VariantValuesID);
ist
Code: Select all
ProductID
1
VariantID
NULL
VariantValuesID
NULL
Wenn ein Unique NULL nicht einschränkt, gibt es eine Möglichkeit, dies beizubehalten? Eindeutige Einschränkung, die in jeder anderen Situation funktioniert, aber auch eine CHECK-Funktion hinzufügen, die keinen neuen Eintrag zulässt, wenn die Eingabe für Variant oder VariantValues NULL ist und bereits eine doppelte ProductID in der Tabelle vorhanden ist? Ich hoffe, dies zu tun, ohne einen Trigger ausführen zu müssen. Ich habe darüber nachgedacht, einfach die Feldeinstellungen VariantID und VariantValuesID in der Tabelle auf NOT NULL zu setzen und dann einfach eine Zeile in den Tabellen Variants und VariantValues einzufügen und zu belassen, die alle NULL-Felder haben. Die Felder VariantID und VariantValuesID müssen BEIDE NULL sein oder BEIDE Felder müssen einen INT-Wert haben.