sql >> Base de Datos >  >> RDS >> Oracle

¿Qué tan ampliamente utilizados son los objetos de Oracle?

Para empezar, algunas funciones estándar de Oracle utilizan tipos, por ejemplo, XMLDB y espacial (que incluye la declaración de columnas de tipos de datos de tablas anidadas).

Además, muchos desarrolladores de PL/SQL usan tipos todo el tiempo para declarar colecciones de PL/SQL o funciones segmentadas.

Pero estoy de acuerdo en que pocos lugares usan Tipos de manera extensiva y construyen API PL/SQL a partir de ellos. Hay varias razones para esto.

  1. Oracle ha implementado Objetos muy lentamente. Aunque se introdujeron en la versión 8.0, no fue hasta la 9.2 que admitieron completamente la herencia, el polimorfismo y los constructores definidos por el usuario. La programación orientada a objetos adecuada es imposible sin esas características. No obtuvimos SUPER() hasta la versión 11g. Incluso ahora faltan características, sobre todo las declaraciones privadas en TYPE BODY.
  2. La sintaxis suele ser tosca o frustrantemente oscura. La documentación no ayuda.
  3. La mayoría de las personas que trabajan con Oracle tienden a provenir de la escuela de programación relacional/procedimental. Esto significa que tienden a no entender OOP, o no entienden dónde puede ser útil en la programación de bases de datos. Incluso cuando a las personas se les ocurre una buena idea, les resulta difícil o imposible implementarla utilizando la sintaxis de Oracle.

Ese último punto es el clave. Podemos aprender nueva sintaxis, podemos persuadir a Oracle para que complete el conjunto de funciones, pero solo vale la pena si podemos encontrar un uso para los tipos. Eso significa que necesitamos problemas que puedan resolverse usando herencia y polimorfismo.

He trabajado en un sistema que utiliza tipos de forma extensiva. Era un sistema de almacenamiento de datos y el subsistema de carga de datos se creó a partir de tipos. La lógica subyacente era simple:

  • necesitamos aplicar la misma plantilla de reglas comerciales para cada tabla que cargamos, por lo que el proceso es genérico;
  • cada tabla tiene su propia proyección, por lo que las instrucciones SQL son únicas para cada una.

La implementación de Tipo es limpia:el proceso genérico se define en un Tipo; la implementación de cada tabla se define en un Tipo que hereda de ese Tipo genérico. Los tipos específicos se pueden generar a partir de metadatos. Presenté este tema en el UKOUG hace algunos años y lo escribí con más detalle en mi blog.Más información

Por cierto, la teoría relacional incluye el concepto de dominios, que son tipos de datos definidos por el usuario, incluidas las restricciones, etc. Ningún tipo de RDBMS admite dominios, pero la implementación de tipos de Oracle es definitivamente un paso en el camino.