Некоторые тонкости

Для дальнейших экспериментов в области наследования нам желательно заполнить наши таблицы данными. Для простоты я взял данные из интернет-магазина компании "Эльдорадо" (http://www.eldorado.ru)
Соответственно, на таблицу dvd потребуется наложить некоторые ограничения. А именно, поле id будет у нас ключевым, а все остальные поля не будут обращаться в NULL.
При этом выясняются некоторые интересные вещи - ограничения в общем случае не наследуются. Обратившись к руководству, можно прояснить ситуацию полностью. А именно:

  • ограничения CHECK и NOT NULL наследуются автоматически;
  • все остальные ограничения, включая первичные ключи, должны устанавливаться для таблиц-потомков вручную.

В руководстве есть указание, что в будущих версиях возможности наследования будут расширяться. Однако пока что, согласно списку TODO (http://www.postgresql.org/docs/faqs.TODO.html) в реализации наследования есть некоторые спорные моменты, которые планируется исправить:

  • при удалении ограничения из родительской таблицы оно в любом случае удаляется и из всех наследующих от неё таблиц, даже если условие CASCADE не указано (хотя в этом случае вообще должна выдаваться ошибка!);
  • в данный момент возможно удалить из таблицы унаследованное от родительской таблицы ограничение, что принципиально неправильно;
  • для оператора ALTER TABLE существует модификатор ONLY (который, впрочем, существует и для других операторов, но об этом потом), который должен создавать ненаследуемые ограничения. Однако они все равно наследуются. Мнение разработчиков таково, что такую возможность следует убрать и делать ВСЕ ограничения наследуемыми.

Back to top

(С) Виктор Вислобоков, 2008-2010