У меня есть таблица сотрудников, которая имеет 10 столбцов, и я должен создать ограничение уникального ключа для идентификатора, имени, адреса, мобильного телефона
В приведенном выше случае адрес может быть нулевым, а мобильный - нулевым,Однако, когда они приходят, уникальность должна быть сохранена.
сначала я создал уникальное ограничение, объединив все вышеперечисленные ключи и соблюдая следующее.
Фактическое поведение в MySQL.
001-Thiagu-NULL-900000 - Accepted
001-Thiagu-NULL-900000 - Accepted
001-Thiagu-0001-900000 - Accepted
001-Thiagu-0001-900000 - Rejected - Duplicate Record
Ожидаемое поведение во всех базах данных
001-Thiagu-NULL-900000 - Accepted
001-Thiagu-NULL-900000 - Rejected - Duplicate Record
001-Thiagu-0001-900000 - Accepted
001-Thiagu-0001-900000 - Rejected - Duplicate Record
По сути, аналогичное должно учитываться при дублировании независимо от того, существует ли значение как NULL или Нет.
КомуПреодолев эту проблему, я отбросил идею объединения и создания уникальных объектов, добавив столбцы к ограничению уникальности, и создал новый столбец строкового типа с ограничением уникальности.
По одной вставке каждой записи, которую я вручную строю и даюзначение на любой вставке, чтобы сохранить уникальность.
Это будет правильный подход или любой другой способ исправить в первом выше подходе, который я не уверен.
Созданныйограничение должно работать для MySQL, SQL Server, Oracle и Postgres.