On 02/25/11 15:06, Dmitriy Igrishin wrote:
> Пример:
> create table A (id int, name text);
> create table B (txt text) inherits A;
>
> select id, name from A;
>
> Выбраны все записи как из A, так и из B. Чего тут сложного-то?
> Никаких чрезмерных усилий :-)
>
> Или это не о том?
>
> Пример является надуманным. Даже имена выбраны так, что понять
> их предназначение невозможно.
Естественно, я не буду приводить тут примеры из реальных приложений. Они
занимают слишком много места.
> На практике же, когда анализ предметной области выявляет концепции
> проекта, следующим шагом после установления связей между ними,
> является определение операций над этими концепциями. И если две
> концепции связаны наследованием, то последнее не очень полезно
> без полиморфизма.
И он есть, как показал мой надуманный пример. Как минимум, для операции
select над концепциями A & B :-)
> Так вот определить полиморфные операции непосредственно в
> PostgreSQL (в том же PL/pgSQL) невозможно. Возможно только
> прилагая большую сообразительность и мастерство.
Не, мы всё-таки о разных вещах. Я о том, что операций над данными только
четыре штуки - select, insert, update, delete.
> Что касается понятия наследования, реализованного в
> PostgreSQL (INHERITANCE clause). Принимая в расчёт ограничения,
> указанные в п. 5.8.1, я вообще не понимаю зачем этот функционал был
> добавлен в PostgreSQL? Разве что только для выборки из всех таблиц,
> олицетворяющих производные классы, через таблицу, представляющую
> базовый класс (как в примере выше)? :-)
Почему только выборки? UPDATE/DELETE тоже.