MySQL UNIQUE ermöglicht weiterhin das Einfügen doppelter Zeilen, wenn Fremdschlüsselspalten NULL sind [Duplikat]MySql

MySQL DBMS-Forum
Guest
 MySQL UNIQUE ermöglicht weiterhin das Einfügen doppelter Zeilen, wenn Fremdschlüsselspalten NULL sind [Duplikat]

Post by Guest »

Ich habe 3 Tabellen ProdVariant, Variant, VariantValues.

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

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

Code: Select all

ALTER TABLE ProductVariant
ADD CONSTRAINT ProdVarVarValUnique UNIQUE (ProductID, VariantID, VariantValuesID);
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

Code: Select all

ProductID
1

VariantID
NULL

VariantValuesID
NULL
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post