Используя наследование в PostgreSQL

Кому-то, у кого есть опыт с помощью наследования в PostgreSQL: действительно ли стоит использовать его, или лучше не к? В которой ситуации Вы использовали бы его?

Честно говоря, я не полностью понимаю различия между реляционными моделями и моделями OO...

9
задан Dr. Person Person II 21 June 2011 в 15:59
поделиться

2 ответа

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

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

2
ответ дан 3 November 2019 в 04:41
поделиться

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

Существует 2 распространенных способа использования стандартных идиом SQL для наследования классов:

  • Каждый объект имеет отдельную строку в таблице суперкласса, а объекты подкласса также имеют строку в таблице, зависящей от подкласса, которая относится к полям суперкласса. по ссылке внешнего ключа.
  • Просто объедините все поля суперкласса и подкласса в одну большую таблицу и оставьте их равными NULL, где их значение не применимо. Это особенно хорошо работает в PostgreSQL, поскольку значения NULL занимают только 1 бит на строку, а добавление / удаление полей в существующие таблицы происходит очень быстро (независимо от объема данных). Вы могли бы написать триггер для проверки наличия обязательных полей для определенного типа класса.
5
ответ дан 3 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: