Объекты в PostgreSQL - PullRequest
       5

Объекты в PostgreSQL

6 голосов
/ 15 января 2011

PostgreSQL была первой базой данных, которая представила объекты в реляционных системах (сериализация) ... и это все, что я знаю об объектах и ​​PostgreSQL.Я проводил некоторые исследования, но, честно говоря, не нашел ничего хорошего.Есть ли хорошие статьи / книги об этом?

Ответы [ 6 ]

11 голосов
/ 15 января 2011

Я не уверен, что вы имеете в виду под "представлением объектов в реляционных системах". В PostgreSQL действительно есть пользовательские типы, но они не похожи на ООП.

AFAIK единственная причина, почему PostgreSQL иногда называют «объектно-реляционной базой данных», заключается в том, что он поддерживает наследование таблиц . Однако основным вариантом использования наследования фактически было разбиение таблицы ; ограничения производительности означают, что он не очень полезен для реализации «наследования объектов» (грядущий выпуск PostgreSQL 9.1 снимет некоторые из этих ограничений ).

Итог: здесь ничего не видно, PostgreSQL - это просто еще одна реляционная база данных.

8 голосов
/ 15 января 2011

Предисловие к документации Postgres 7 объясняет, почему они считают себя первопроходцами объектно-реляционных концепций (в Postgres 8 и более поздних версиях это было перефразировано / реструктурировано / удалено). документ истории дает более подробную информацию.

6 голосов
/ 12 марта 2014

Исторические документы рассказывают историю, но я был удивлен, увидев, что так много комментаторов упомянули об объектно-ориентированном программировании, которое является отдельной темой.

Postgres начал в Калифорнийском университете в Беркли как новаторский исследовательский проект, возглавляемый Майклом Стоунбрейкером, который ранее руководил там проектом разработки Ingres.

Классический пример объектно-реляционной базы данных включал хранение и извлечение не табличных данных, таких как изображения, аудио, мультимедиа и т. Д. Stonebreaker отказался от «взрыва данных», особенно в области Binary LargeОбъекты, такие как изображения и т. Д., И поняли, что традиционные СУБД не справились с этой задачей.

Одним из примеров, использованных для описания «видения», была необходимость поиска в базе данных изображений изображений закатов, основанных на атрибутах самих данных, а не просто метаданных (имена со строкой).закат », этикетки и т. д.).Концепция подразумевала разработку революционных методов индексации, например, основанных на доминирующем цветовом спектре (закаты, как правило, красные, оранжевые) или других атрибутах, в зависимости от типа данных.Эти идеи были реализованы в продукте Illustra, который был прямым потомком оригинальной работы команды Postgres.

Фактически, большинство функций ORDBMS были вычтены из базы кода Postgres, которая стала тем PostgreSQL, который мы знаемсегодня.В этом смысле вывод верен.Даже в PostgreSQL отсутствует аспект ORDBMS оригинального Postgres.

Итак, объекты в Oracle?Все еще не там.ООП в РСУБД?Совсем не та тема.

1 голос
/ 21 февраля 2012

Что ж, с некоторой точки зрения Postgresql может рассматривать сущности таблиц как составной тип, который можно рассматривать как объекты.

=> SELECT author FROM author;
|      author       |
+-------------------+
| "(1,'john doe')"  |
+-------------------+
| "(2,'Edgar')"     |
+-------------------+

В сочетании с массивом это может быть очень мощным

SELECT 
  author.id, 
  author.name,
  array_agg(post) AS posts
FROM 
  author 
    LEFT JOIN post ON 
        author.id = post.author_id 
GROUP BY 
  author.id;
| id |   name   |                  posts                 |
+----+----------+----------------------------------------+
|  1 | John Doe | {"(1,'first post')","(2,'new post')"}  |
+----+----------+----------------------------------------+
|  2 | Edgar    | {"(3,'Hello world')"}                  |
+----+----------+----------------------------------------+

Конечно, это не настоящий ООП.

0 голосов
/ 14 октября 2018

Как упомянул Мартин против Лёвиса, старый документ PostgreSQL 7 просто перечисляет следующие 3 пункта в этой теме:

  • наследование (таблица наследования)
  • типы данных (PostreSQL поддерживает JSON, Array и hstore)
  • функции

ИМХО, я полагаю, что эти функции были самыми передовыми, когда PostgreSQL представил их еще в 80-х годах, которые, однако, в настоящее время широко доступны в других базах данных. В то время как PostgreSQL все еще продвигает термин «объект», люди запутываются.

0 голосов
/ 05 октября 2016

Насколько я знаю, первой СУБД, предлагающей поддержку полномасштабных объектов (с пользовательскими типами, вложенностью, отношением master-detail и т. Д.), Была Oracle.Они даже добавили наследование в более поздних версиях, но, на мой взгляд, это было излишним.См. Пример сценария SQL, взятого из очень старой установки клиента Oracle (более 15 лет).

drop view department;
drop type dept_t;
drop type emp_list;
drop type emp_t;
create or replace type emp_t as object (
  empno number,
  ename varchar2(80),
  sal   number
);    
/

create or replace type emp_list as table of emp_t;    
/

create or replace type dept_t as object (
  deptno number, 
  dname varchar2(80),
  loc   varchar2(80),
  employees emp_list
);    
/

create or replace view department of dept_t
with object OID (deptno)
as select deptno, dname, loc,
          cast(multiset(select empno, ename, sal 
                        from emp 
                        where emp.deptno = dept.deptno
                        ) as emp_list ) employees
     from dept;

create trigger department_ins
instead of insert on department
for each row 
declare
  emps emp_list;
  emp  emp_t;
begin
  -- Insert the master
  insert into dept( deptno, dname, loc ) 
  values (:new.deptno, :new.dname, :new.loc);

  -- Insert the details
  emps := :new.employees;
  for i in 1..emps.count loop
    emp := emps(i);
    insert into emp(deptno, empno, ename, sal)
    values (:new.deptno, emp.empno, emp.ename, emp.sal);
  end loop;
end;    
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...