Banco de dados objeto-relacional - Object–relational database

Um banco de dados objeto-relacional ( ORD ), ou sistema de gerenciamento de banco de dados objeto-relacional ( ORDBMS ), é um sistema de gerenciamento de banco de dados (DBMS) semelhante a um banco de dados relacional , mas com um modelo de banco de dados orientado a objetos: objetos, classes e herança são diretamente suportado em esquemas de banco de dados e na linguagem de consulta . Além disso, assim como com sistemas relacionais puros, ele oferece suporte à extensão do modelo de dados com tipos e métodos de dados customizados .

Exemplo de um modelo de banco de dados orientado a objetos

Pode-se dizer que um banco de dados objeto-relacional fornece um meio-termo entre os bancos de dados relacionais e os bancos de dados orientados a objetos . Em bancos de dados objeto-relacionais, a abordagem é essencialmente a de bancos de dados relacionais: os dados residem no banco de dados e são manipulados coletivamente com consultas em uma linguagem de consulta; no outro extremo estão OODBMSes em que o banco de dados é essencialmente um armazenamento de objeto persistente para software escrito em uma linguagem de programação orientada a objetos , com uma API de programação para armazenar e recuperar objetos e pouco ou nenhum suporte específico para consulta.

Visão geral

A necessidade básica do banco de dados objeto-relacional surge do fato de que os bancos de dados Relacional e Objeto têm suas vantagens e desvantagens individuais. O isomorfismo do sistema de banco de dados relacional com uma relação matemática permite explorar muitas técnicas e teoremas úteis da teoria dos conjuntos. Mas esses tipos de bancos de dados não são ideais para certos tipos de aplicativos. Um modelo de banco de dados orientado a objetos permite recipientes como conjuntos e listas, tipos de dados arbitrários definidos pelo usuário, bem como objetos aninhados. Isso traz semelhanças entre os sistemas de tipo de aplicativo e sistemas de tipo de banco de dados, o que elimina qualquer problema de incompatibilidade de impedância. Mas os bancos de dados de objetos, ao contrário dos relacionais, não fornecem nenhuma base matemática para suas análises profundas.

O objetivo básico do banco de dados objeto-relacional é preencher a lacuna entre os bancos de dados relacionais e as técnicas de modelagem orientada a objetos usadas em linguagens de programação como Java , C ++ , Visual Basic .NET ou C # . No entanto, uma alternativa mais popular para alcançar essa ponte é usar um sistema de banco de dados relacional padrão com alguma forma de software de mapeamento objeto-relacional (ORM). Considerando que os produtos tradicionais RDBMS ou SQL-DBMS focados no gerenciamento eficiente de dados retirados de um conjunto limitado de tipos de dados (definidos pelos padrões de linguagem relevantes), um DBMS objeto-relacional permite que os desenvolvedores de software integrem seus próprios tipos e os métodos que aplicar a eles no DBMS.

O ORDBMS (como ODBMS ou OODBMS ) é integrado a uma linguagem de programação orientada a objetos . As propriedades características de ORDBMS são 1) dados complexos, 2) herança de tipo e 3) comportamento do objeto. A criação de dados complexos na maioria dos SQL ORDBMSs é baseada na definição preliminar do esquema por meio do tipo definido pelo usuário (UDT). A hierarquia dentro de dados complexos estruturados oferece uma propriedade adicional, herança de tipo . Ou seja, um tipo estruturado pode ter subtipos que reutilizam todos os seus atributos e contêm atributos adicionais específicos para o subtipo. Outra vantagem, o comportamento do objeto , está relacionada ao acesso aos objetos do programa. Esses objetos de programa devem ser armazenáveis ​​e transportáveis ​​para processamento de banco de dados, portanto, geralmente são chamados de objetos persistentes . Dentro de um banco de dados, todas as relações com um objeto de programa persistente são relações com seu identificador de objeto (OID) . Todos esses pontos podem ser tratados em um sistema relacional adequado, embora o padrão SQL e suas implementações imponham restrições arbitrárias e complexidade adicional

Na programação orientada a objetos (OOP) , o comportamento do objeto é descrito por meio de métodos (funções de objeto). Os métodos indicados por um nome são diferenciados pelo tipo de seus parâmetros e pelo tipo de objetos aos quais foram anexados ( assinatura do método ). As linguagens OOP chamam isso de princípio do polimorfismo , que é definido resumidamente como "uma interface, muitas implementações". Outros princípios OOP, herança e encapsulamento , estão relacionados a métodos e atributos. A herança de método está incluída na herança de tipo. Encapsulamento em OOP é um grau de visibilidade declarada, por exemplo, através do public , private e protected modificadores de acesso .

História

Os sistemas de gerenciamento de banco de dados relacional de objeto surgiram a partir de pesquisas ocorridas no início dos anos 1990. Essa pesquisa estendeu os conceitos de banco de dados relacional existentes, adicionando conceitos de objeto . Os pesquisadores pretendiam manter uma linguagem de consulta declarativa baseada no cálculo de predicados como um componente central da arquitetura. Provavelmente o projeto de pesquisa mais notável, Postgres (UC Berkeley), gerou dois produtos traçando sua linhagem para essa pesquisa: Illustra e PostgreSQL .

Em meados da década de 1990, surgiram os primeiros produtos comerciais. Estes incluíam Illustra (Illustra Information Systems, adquirido pela Informix Software , que por sua vez foi adquirida pela IBM ), Omniscience (Omniscience Corporation, adquirida pela Oracle Corporation e tornou-se o Oracle Lite original) e UniSQL (UniSQL, Inc., adquirida pela KCOMS ) O desenvolvedor ucraniano Ruslan Zasukhin, fundador da Paradigma Software, Inc. , desenvolveu e distribuiu a primeira versão do banco de dados Valentina em meados da década de 1990 como um SDK C ++ . Na década seguinte, o PostgreSQL se tornou um banco de dados comercialmente viável e é a base para vários produtos atuais que mantêm seus recursos de ORDBMS.

Os cientistas da computação passaram a se referir a esses produtos como "sistemas de gerenciamento de banco de dados objeto-relacional" ou ORDBMSs.

Muitas das idéias dos primeiros esforços de banco de dados relacional de objeto foram amplamente incorporadas ao SQL: 1999 por meio de tipos estruturados . Na verdade, qualquer produto que siga os aspectos orientados a objetos do SQL: 1999 pode ser descrito como um produto de gerenciamento de banco de dados relacional de objeto. Por exemplo, o DB2 da IBM , o banco de dados Oracle e o Microsoft SQL Server afirmam oferecer suporte a essa tecnologia e o fazem com vários graus de sucesso.

Comparação com RDBMS

Um RDBMS pode geralmente envolver instruções SQL como estas:

   CREATE TABLE Customers  (
       Id          CHAR(12)    NOT NULL PRIMARY KEY,
       Surname     VARCHAR(32) NOT NULL,
       FirstName   VARCHAR(32) NOT NULL,
       DOB         DATE        NOT NULL   # DOB: Date of Birth
    );
    SELECT InitCap(Surname) || ', ' || InitCap(FirstName)
      FROM Customers
     WHERE Month(DOB) = Month(getdate())
       AND Day(DOB) = Day(getdate())

A maioria dos bancos de dados SQL atuais permite a criação de funções personalizadas , o que permitiria que a consulta apareça como:

    SELECT Formal(Id)
      FROM Customers
     WHERE Birthday(DOB) = Today()

Em um banco de dados objeto-relacional, pode-se ver algo assim, com tipos de dados definidos pelo usuário e expressões como BirthDay() :

    CREATE TABLE Customers (
      Id           Cust_Id     NOT NULL  PRIMARY KEY,
      Name         PersonName  NOT NULL,
      DOB          DATE        NOT NULL
    );
    SELECT Formal( C.Id )
      FROM Customers C
     WHERE BirthDay ( C.DOB ) = TODAY;

O modelo objeto-relacional pode oferecer outra vantagem, pois o banco de dados pode fazer uso dos relacionamentos entre os dados para coletar facilmente os registros relacionados. Em um aplicativo de catálogo de endereços , uma tabela adicional seria adicionada às acima para conter zero ou mais endereços para cada cliente. Usando um RDBMS tradicional, a coleta de informações para o usuário e seu endereço requer uma "junção":

     SELECT InitCap(C.Surname) || ', ' || InitCap(C.FirstName), A.city
       FROM Customers C join Addresses A ON A.Cust_Id=C.Id -- the join
      WHERE A.city="New York"

A mesma consulta em um banco de dados objeto-relacional aparece de forma mais simples:

    SELECT Formal( C.Name )
      FROM Customers C
     WHERE C.address.city="New York" -- the linkage is 'understood' by the ORDB

Veja também

Referências

links externos