Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Quão amplamente utilizados são os objetos Oracle?


Para começar, algumas funcionalidades padrão do Oracle usam Types, por exemplo, XMLDB e Spatial (que inclui a declaração de colunas de tipos de dados de tabela aninhada).

Além disso, muitos desenvolvedores PL/SQL usam tipos o tempo todo, para declarar coleções PL/SQL ou funções em pipeline.

Mas concordo que poucos lugares usam Types extensivamente e criam APIs PL/SQL a partir deles. Há várias razões para isso.
  1. A Oracle implementou objetos muito lentamente. Embora tenham sido introduzidos na versão 8.0, não foi até 9.2 que eles suportaram totalmente Herança, Polimorfismo e construtores definidos pelo usuário. A programação orientada a objetos adequada é impossível sem esses recursos. Não obtivemos SUPER() até a versão 11g. Mesmo agora, faltam recursos, principalmente as declarações privadas no TYPE BODY.
  2. A sintaxe é muitas vezes desajeitada ou frustrantemente obscura. A documentação não ajuda.
  3. A maioria das pessoas que trabalham com Oracle tende a vir da escola de programação relacional/procedural. Isso significa que eles tendem a não entender a POO ou não entendem onde ela pode ser útil na programação de banco de dados. Mesmo quando as pessoas têm uma boa ideia, elas acham difícil ou impossível implementar usando a sintaxe do Oracle.

Esse último ponto é o principal. Podemos aprender uma nova sintaxe, podemos persuadir a Oracle a completar o conjunto de recursos, mas só vale a pena se pudermos encontrar um uso para Tipos. Isso significa que precisamos de problemas que podem ser resolvidos usando Herança e Polimorfismo.

Trabalhei em um sistema que usava tipos extensivamente. Era um sistema de data warehouse, e o subsistema de carregamento de dados foi construído a partir de Types. A lógica subjacente era simples:
  • precisamos aplicar o mesmo modelo de regra de negócios para todas as tabelas que carregamos, para que o processo seja genérico;
  • cada tabela tem sua própria projeção, então as instruções SQL são únicas para cada uma.

A implementação do Type é limpa:o processo genérico é definido em um Type; a implementação para cada tabela é definida em um tipo que herda desse tipo genérico. Os tipos específicos podem ser gerados a partir de metadados. Eu apresentei sobre este tópico no UKOUG há alguns anos e escrevi com mais detalhes em meu blog.Saiba mais.

A propósito, a Teoria Relacional inclui o conceito de Domínios, que são tipos de dados definidos pelo usuário, incluindo restrições, etc. Nenhum tipo de RDBMS realmente suporta Domínios, mas a Implementação de Tipos da Oracle é definitivamente um passo no caminho.