MySQL UNIQUE по-прежнему позволяет вставлять повторяющиеся строки, когда столбцы внешнего ключа имеют значение NULL [дубMySql

Форум по Mysql
Ответить Пред. темаСлед. тема
Anonymous
 MySQL UNIQUE по-прежнему позволяет вставлять повторяющиеся строки, когда столбцы внешнего ключа имеют значение NULL [дуб

Сообщение Anonymous »

У меня есть 3 таблицы ProdVariant, Variant, VariantValues.

Код: Выделить всё

ProductVariant
----------------------------
ProductVariantID  PK
ProductID         FK NOT NULL
VariantID         FK NULL
VariantValuesID   FK NULL

Variant
-----------------------------
VariantID         PK

VariantValues
------------------------------
VariantValuesID   PK
VariantID         FK NOT NULL

Продукт может находиться в таблице ProductVariant, если у него нет вариантов и значений VariantValues, то есть оба этих поля будут иметь значение NULL, но не могут иметь ни одного, ни другого. В строке должны быть поля Variant и VariantValues ​​со значениями NULL или оба с числовым значением.
Я установил ограничение UNIQUE для этой таблицы

Код: Выделить всё

ALTER TABLE ProductVariant
ADD CONSTRAINT ProdVarVarValUnique UNIQUE (ProductID, VariantID, VariantValuesID);
Это ограничение UNIQUE работает для всех входных данных, если я не попытаюсь ввести новую строку с теми же значениями, где VariantID и VariantValuesID равны NULL, а в новой строке оба этих столбца имеют значение NULL. Мне НЕ нужно разрешать ввод повторяющейся строки, если существующая строка

Код: Выделить всё

ProductID
1

VariantID
NULL

VariantValuesID
NULL
Когда я ввожу новую строку с теми же значениями, это разрешается
Если уникальность не ограничивает NULL, есть ли способ сохранить это уникальное ограничение, которое работает для любой другой ситуации, но также добавляет ПРОВЕРКУ, которая не допускает новую запись, если входные данные для Variant или VariantValues ​​имеют значение NULL и дубликат ProductID уже есть в таблице? Я надеюсь сделать это без необходимости использовать триггер. Я подумал о том, чтобы просто установить для полей VariantID и VariantValuesID в таблице значение NOT NULL, а затем просто вставить и оставить в таблицах Variant и VariantValues ​​строку, в которой все поля имеют NULL. Поля VariantID и VariantValuesID ОБА должны иметь значение NULL или ОБА поля должны иметь значение INT.

Подробнее здесь: https://stackoverflow.com/questions/793 ... s-are-null
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «MySql»