Допустим, у нас есть объект с именем Widget, для которого мы можем построить таблицу базы данных.
Теперь, допустим, у нас есть два набора дополнительных деталей для описания виджетов. Каждый набор данных доступен в отдельное время . Итак, скажем, у наших виджетов есть три фазы в их жизненном цикле ...
В фазе 1 у нас просто есть виджет с именем и описанием.
widgets
-------
id (PK)
name
description
В фазе 2 наш виджет получает рост и вес.
widgets
-------
id (PK)
name
description
height
weight
В фазе 3 наш виджет получает пункт назначения и стоимость доставки.
widgets
-------
id (PK)
name
description
height
weight
destination
shipping_cost
Приведенная выше схема (для «фазы 3») означает, что запись базы данных для виджета в фазе 1 или 2 будет иметь нулевые значения .
В качестве альтернативы, мы могли бы создать схему, которая никогда не будет иметь нулевых значений (но вместо этого родительская запись может иметь ноль, одну или две дочерние записи в зависимости от текущей фазы жизненного цикла виджета):
widgets
-------
id (PK)
name
description
widget_specs
-------
id (PK)
widget_id (FK)
height
weight
widget_delivery
-------
id (PK)
widget_id (FK)
destination
shipping_cost
Всегда ли верна одна из этих альтернатив? Есть ли у каждого оправданные плюсы и минусы? Если ответ зависит от большего количества переменных, каковы они? При каких условиях одна альтернатива станет очевидным предпочтительным выбором?
В принятом ответе будет приведен современный авторитетный источник по теме.
Редактировать : Я чувствую, что это легко может быть спорным, но это также тема, которая должна иметь оправданные плюсы и минусы и, следовательно, авторитетный ответ. Это просто вопрос, который меня беспокоил, потому что я видел, что это было сделано в обоих направлениях без обоснования или рассмотрения альтернативы. Я просто хотел бы знать, какой правильный , в соответствии с текущими типами DBA, устанавливающими тренд.