Нули не безопасны, поэтому нет смысла пытаться сделать их безопасными или оправдать их или переопределить их как «безопасные».
Self-Противоречие
Когда вы говорите что-то вроде Если я должен нормализовать и разделить на 2 или 3 других, просто чтобы избежать множества пустых значений в моей таблице, или если я должен оставить одну таблицу и оставить пустые, чтобы упростить мой код и мой дизайн, и избежать лишних соединений. Я пытался быть обобщенным, чтобы увидеть, что является хорошим стандартом, чтобы мы могли применить его к различным сценариям. , вы работаете в перекрестных целях с самим собой , в нескольких разных точках. Так что никто не может помочь вам разумно. Первое, что нужно сделать, это решить ваши перекрестные цели.
Либо вам нужны стандарты (нормализация, нет пустых значений, много небольших быстрых таблиц, простота использования и простота расширения), либо вам нужен простой код (толстые таблицы, пустые значения, нет производительности, невозможно расширить)
Либо вам нужны общие стандарты или кратчайшие кодовые блоки.
1024 * Оправдание *
Теперь, будучи человеком, как миллионы кодировщиков перед вами, что бы вы ни выбрали, вы оправдаете. Просто посмотрите на противоречивые и противоречивые ответы. Все они делают свой выбор, а затем оправдывают их.
Один стандартный технический ответ
Но вы задали технический вопрос об известной теме, на которую гиганты отрасли ответили более 30 лет назад. Органы по стандартизации приняли эти принципы в качестве стандартов. Есть только один технический ответ. Другие ответы - это обоснование нетехнических и нестандартных методов.
Нормализовать. Не только для того, чтобы избежать множества пустых значений в моей таблице , а потому что, если он не нормализован, это не база данных, а плоский файл.
Нормализовать, потому что это избавляет от дублирования данных.
Нормализация, потому что нормализованные базы данных намного, намного быстрее, чем простые файлы.
Это вопрос простой физики. Нормализованные строки намного короче; поэтому гораздо больше строк помещается в один и тот же дисковый блок или страницу, и поэтому гораздо больше строк помещается в любую заданную память (кэш). Не должно быть сюрпризом, что это приведет к более быстрой обработке и меньшему количеству операций ввода-вывода для всех пользователей сервера.
Нормализация, поскольку результирующая база данных будет намного меньше (больше, таблицы меньше, но в целом меньше)
И, наконец, нормализованные данные не будут иметь нулевых значений.
Нули означают одну из двух вещей.
Либо «необязательные» поля (ну, они не могут быть столбцами, потому что это не база данных), что означает, что данные не нормализованы.
Или «отсутствует / неизвестно», что означает, что у вас нет целостности данных (опять же, обычный файл, а не база данных); данные не могут быть использованы для анализа.
Конечно, SQL громоздок с объединениями, но SQL - это все, что у нас есть, так что разберитесь с ним. Это значит, научиться кодировать объединения, использовать вырезать и вставить.
"Стоимость присоединения"
SQL был разработан для реляционной базы данных, а не для плоских файлов. Это означает много маленьких столов, а не меньше больших столов. Объединения являются пешеходными для реляционных баз данных, нет смысла «избегать объединений». В толпе программистов существует миф, который «объединяет стоимость», но до сих пор никто не предоставил никаких доказательств. Все поставщики SQL совершенствовали свои движки в течение 25 лет, сотни человеко-лет серьезными инженерами, чтобы гарантировать, что объединения ничего не стоят.
Теперь не путайте, не неправильно истолковывайте то, что я говорю:
стоимость указана в размере объединенных наборов данных; могут ли индексы использоваться; характер объединения; если есть несоответствие DataType; аргументы поиска; и т. д. Но сам код требуется для соединений (при условии, что мы присоединяемся к ключам). «стоимость соединения» - ничто. Просто проверьте статистику и планы запросов.
И не делайте своих оценок на основе ваших знаний, которые, как доказано, ограничены присоединением к толстым плоским файлам; чтобы быть уверенным, как я уже объяснил стоимость соединений, присоединение к этим монстрам стоит очень дорого.
SQL и не-SQL
Вы отметили свой вопрос «SQL» и «MySQL». SQL - это стандарт, опубликованный IEC / ISO / ANSI. MySQL не является SQL. Обработка Нуль изложена в Стандарте. То, что делает MySQL, нестандартно в обоих движках. На самом деле то, что он сделал в прошлом году и что он будет делать в этом году, отличается и нестандартно.
Чтобы назвать не-SQL, «SQL», когда SQL является стандартом, является простым обманом. Точно так же, как называть кучу простых файлов «базой данных».
Дело в том, что вы получите один ответ, если ваш вопрос был помечен как «SQL», и другой ответ, если он был помечен как «MyNonSQL».
Нормализовано для удобства кодера
Основная причина, по которой кодировщикам не разрешается проектировать «базы данных», прекрасно демонстрируется в этой теме. Они имеют полностью эгоистичный взгляд и не заботятся о производительности или простоте использования для других. Если бы мы оставили это им, они разработали бы плоские файлы, полные нулей, чтобы «упростить» свой код и фактически оправдать это.