metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-02-25 09:24 pm

Postgresql table inheritance

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

[identity profile] max-posedon.livejournal.com 2010-02-25 11:22 pm (UTC)(link)
Не запутайтесь, Postgresql table inheritance не имеет никакого отношения к ООП-наследованию. Это штука нужна для так называемого partitioning - ака кластеризации.

Для мапинга ООП-наслоедования в базу, в postgresql принято использовать классические методы ( те кто незнают, смотрят http://www.martinfowler.com/eaaCatalog/index.html "Object-Relational Structural Patterns:", хоть там и не все).

Чем тут нам может помочь Postgresql? хм, сложной view-шкой делающей виртуальную STI, если не она выбрана для хранения, плюс возможность иметь один sequence на несколько таблиц, если выбран вариант хранения наследования по нескольким таблицам. Вроде бы пожалуй и всё.

Кстати, PostgreSQL считается полу-ООП базой не за возможности обрабатывать ООП понятия "наследование и тд" - этого она не умеет, а за возможность добавления любых своих типов + за поддержку gist и gin индексов.

[identity profile] metaclass.livejournal.com 2010-02-26 10:27 am (UTC)(link)
Оно сильно на ООП похоже, поэтому путается. Т.е. с первого прочтения это больше похоже на ООП, чем на что-то другое.