Мне любопытно, есть ли здесь у MySQL метод.
У нас есть ТОННА разреженных таблиц (индустрия здравоохранения может быть немного проблемной в этом отношении) с тонной столбцов, которые может иметь значение null (или не иметь значения / неизвестно. Наш микросервис поверх БД - java, который поддерживает нулевые значения (или для нас не существует). Мы также используем спящий режим, который предварительно компилирует @NamedQuery JQL в SQL вперед времени (поэтому невозможно перевести u.col =: col во время перевода запроса, чтобы включить u.col is null по сравнению с u.col = null). Это означает, что hibernate генерирует u.col = null, что на самом деле не SQL совместимый (что действительно очень плохо, так как это было бы очень приятно и было источником путаницы для каждого разработчика, которого мы нанимаем ... даже некоторых старших разработчиков. Я не понимаю, почему они просто не устраняют путаницу там - в по крайней мере, для языков с нулевыми значениями это было бы хорошо).
У нас в качестве примера (но обычно больше 5/6 столбцов)
firstName, middleName, lastName
, и я думаю, что это будет ясно мы не хотим
John null Smith
* 1 010 * дважды в базе. В этом нет никакого смысла. К сожалению, у нас может быть 2/3 столбца с нулями. Таким образом, стандарт SQL позволяет нам иметь тонны дубликатов и ЗНАТЬ, какие значения могут быть нулевыми, ЗАРАНЕЕ (мы просто не знаем, поскольку каждый клиент продолжает сталкиваться с уникальными ситуациями, когда внезапно один из этих столбцов имеет значение null).
Это означает, что выполнение чего-то вроде ПЕРВОГО ответа в этом сообщении ниже не очень полезно для нас (так как вы должны знать ВСЕ ситуации заранее) ...
Создать уникальное ограничение с нулевыми столбцами
(У него там отличный ответ !!) Увы, нам придется угадывать, и это будет неверно. Есть ли способ указать postgres создать индекс для 5 столбцов и сделать так, чтобы значения NULL были уникальными, а не несовпадающими.
Другой способ - использовать КАЖДОЕ значение в postgres по умолчанию до строки длины 0 . Я не уверен, как postgres к ним относится. Я помню, что oracle рассматривал это как null.
Есть идеи, как бороться с postgres здесь? Есть ли в MySQL что-то, что тоже может это исправить?
спасибо, Дин