Одиночное наследование таблиц (варианты дизайна наследования базы данных) за и против, и в этом случае оно использовалось?

Сегодня я изучил около двух подходов к наследованию базы данных:

По мнению моего ученика, Наследование отдельных таблиц делает базу данных меньшей по сравнению с другими подходами, поскольку она использует только одну таблицу. Но я читал, что более благоприятный подход Наследование классов класса по словам Билла Карвина.

Каковы преимущества и недостатки единственного наследования таблиц и в каком случае он должен использоваться?

Ответ 1

По мнению моего ученика, одностраничное наследование делает базу данных более малой по сравнению с другими подходами, потому что она использует только 1 таблицу.

Не обязательно. Если у объектов вашей иерархии не так много атрибутов, это приведет к множеству нулевых столбцов и будет тратить много места.

Но я читал, что более любимым подходом является Наследование класса на основе Билла Карвина.

ИМХО, нет единого ответа, разные стратегии (одна таблица для каждой иерархии, одна таблица для конкретного класса, одна таблица для каждого класса) имеют все сильные и слабые стороны и выбор одного или другого зависит от контекста.

Одиночные занавески для одного заглавия за и против, и в этом случае он использовался?

Эта стратегия хороша, когда вам нужны "полиморфные" запросы (нет необходимости в соединениях или объединениях), если вы можете свести к минимуму количество столбцов с возможностью NULL (и убедить DBA в том, что денормализованная схема не будет проблемой в долгосрочной перспективе),

На самом деле, я предлагаю проверить отображение объектов в реляционных базах данных: подробное описание O/R Скоттом Амблером (автором справочного документа об ORM) и особенно в разделе 2.6 Сравнение стратегий - нет смысла перефразировать его.

Его краткое изложение стратегии единого стола:

Преимущества:

  • Простой подход.
  • Легко добавлять новые классы, вам просто нужно добавить новые столбцы для дополнительных данных.
  • Поддерживает полиморфизм, просто изменяя тип строки.
  • Доступ к данным происходит быстро, потому что данные находятся в одной таблице.
  • Специальная отчетность очень проста, поскольку все данные находятся в одной таблице.

Недостатки:

  • Связывание внутри иерархии классов увеличивается, потому что все классы напрямую связаны с одной и той же таблицей. Изменение одного класса может повлиять на таблицу, которая может повлиять на другие классы в иерархии.
  • Пространство потенциально теряется в базе данных.
  • Указание типа становится сложным, если существует значительное перекрытие между типами.
  • Таблица может быстро расти для больших иерархий.

Когда использовать:

  • Это хорошая стратегия для простых и/или неглубоких иерархий классов, где между типами внутри иерархии мало или нет.

Но я горячо рекомендую прочитать всю газету.

Ответ 2

Наследование отдельных таблиц - хороший подход, когда подклассы не имеют много атрибутов или ассоциаций с другими классами. В противном случае таблица будет заполнена атрибутами, которые имеют смысл только для некоторых кортежей таблицы, и вам нужно будет добавить все виды ограничений, чтобы проверить, что они содержат только значения для кортежей соответствующего типа.

Кроме того, для всех запросов, которые должны иметь дело только с экземплярами одного из подклассов, потребуется дополнительное предложение, чтобы выбрать их на основе значения типа.