Я изучал первую, вторую и третью нормальные формы и хочу улучшить работу по нормализации своих таблиц. Отчасти я понял, что никогда не понимал назначение таблиц один на один. Из того, что я понимаю, «необязательные» данные должны быть сгруппированы в другую таблицу, оставляя отдельные объекты без изменений, избегая при этом нюансов ведения нескольких пустых полей в одной монолитной таблице.
Итак, сценарий реального мира. В CMS я хочу поддерживать несколько разных типов «страниц», делая их расширяемыми с помощью дополнительных плагинов, не затрагивая исходную схему. Пока у меня есть эти примеры таблиц:
- Страницы (заголовок, путь, тип и т. Д.)
- ContentPages (аналогично базовой странице, но с полями ключевых слов / описания / содержимого)
- LinkedPages (аналогично базовой странице, но содержит ссылку на другую страницу)
- ProductPages (аналогично базовой странице, но с SKU и другой информацией, связанной с ecomm)
Пока все хорошо. Нет NULL. Самодокументированный дизайн. Суперпечатание / Подтипирование согласовано между моими моделями PHP и базой данных. Все денди.
ИСКЛЮЧИТЬ, учитывая любой идентификатор страницы, я не хочу делать первый запрос, чтобы получить информацию о базовой странице, выяснить, какой это тип страницы, а затем получить соответствующую информацию подтипа с помощью другого запроса. Нужно ли отслеживать это с помощью состояния приложения (или URL-адреса) или есть способ узнать, к какой таблице нужно присоединиться, зная только идентификатор страницы и ничего больше?
Это действительно просто с одной таблицей (очевидно), так как поля NULL подразумевают тип, или ENUM может сказать мне, что это такое. Переключение обратно на 1NF не является приемлемым ответом, так как я уже знаю, как это сделать. Я хочу научиться так;)
ОБНОВЛЕНИЕ: Также хотелось бы отметить, что каждое из свойств подтипа уникально для этого типа. Таким образом, любое общее свойство, общее для всех типов, конечно же, попадет в таблицу базовой страницы. Подтипы не будут иметь никаких других свойств. Это выглядело как логичный способ группировки вложенных таблиц, но, может быть, я побеждаю назначение таблиц один-к-одному с этим расположением ...