Inicio > SQL > Columnas Virtuales – Metadatos en estructuras físicas

Columnas Virtuales – Metadatos en estructuras físicas

La evolución del motor de base de datos Oracle se nutre de tres fuentes:

  • Resolución a errores (bugs) y consolidación de funcionalidades incompletas de versiones anteriores.
  • Incorporación de soluciones a nuevas necesidades tecnológicas y a tendencias estratégicas en el tratamiento de la información.
  • Propuestas de nuevas funcionalidades surgidas en el departamento de I+D+I de Oracle.

Como parte de las nuevas características y funcionalidades incorporadas en la versión 11g del gestor de base de datos Oracle, a continuación se detallará e ilustrará con ejemplos una de ellas: las Columnas Virtuales.  Crean una nueva tendencia en cuanto a la definición de objetos mixtos, conformados por una parte física y otra lógica, ambas combinadas en un mismo objeto de base de datos.

En términos teóricos se definiría como la consecución de la unificación entre una estructura física (como es la de tabla) y una estructura lógica o metadato. Un ejemplo de este tipo de estructura, pero de definición global, serían las vistas (view).

Si por un lado las estructuras lógicas o metadatos evolucionaron hacia estructuras físicas, como es el caso de vistas a vistas materializadas, en este caso la propuesta va más allá e incorpora la posibilidad de incluir columnas calculadas o metadatos como parte de una estructura física (table).

Este tipo de columnas, definidas en tablas e integradas dentro del diccionario de datos, van asociadas a funciones, dotando de esta forma a una estructura física de propiedades de elementos lógicos (metadatos). Pueden ser definidas como la derivación de un cálculo aplicado a una columna existente de la tabla (de la cual deriva).

Las funciones que se les pueden aplicar son las integradas dentro del grupo de las Built-In Functions (de Oracle  i/o Standard ANSI SQL) o bien las creadas a partir de código PL/SQL. A estas últimas deberán asignárseles la misma concesión de privilegios que a la tabla, pero en modo de ejecución –GRANT EXECUTE-,  para no incurrir en problemas de accesibilidad a dichas columnas.

Para ilustrar y tener mayor seguimiento del concepto, se mostrarán las características de las columnas virtuales a partir de un ejemplo. En él se utiliza una entidad denominada “Clientes”. En su definición, aparte de contener información de los clientes de una entidad bancaria, destaca  la trasformación del atributo –no estructurado-  denominado “Cuenta Bancaria”.

  • Definición

Como se puede observar, se ha estructurado la columna “CUENTA_BANCARIA”, creando mediante  Built-In Functions las columnas virtuales:

–   ENTIDAD (Código de entidad bancaria), SUCURSAL (Código de la sucursal bancaria u oficina), CCONTROL (Código de Control) y CODIGOCC (Código de Cuenta).

Y mediante la utilización de una función en PL/SQL “F_LETRA_NIF” otra columna virtual:

–   L_NIF (Letra del NIF) a partir del cálculo realizado con el DNI_TITULAR.

El uso de funciones de usuario obliga a que éstas sean deterministas y se definan como tales (DETERMINISTIC), de la misma forma que al definir índices de función. (“La definición de funciones no deterministas suelen dar problemas cuando son consultadas a través de un índice asociado”).

  • Ventajas

A parte de las muchas funcionalidades de negocio que se pueden obtener de ellas, otras ventajas generalizadas son:

a.   No ocupan espacio físico. (Están almacenadas de forma lógica –virtual– en el diccionario de datos).

Pudiéndose comprobar ejecutando esta sentencia antes y después de la creación de las columnas virtuales:

(Donde se obtiene el mismo resultado).

b.   Pueden ser candidatas a claves primarias o claves únicas (con su correspondiente índice asociado). Por lo tanto, también se pueden crear índices normales por estas columnas virtuales. Serán índices de función.

c.   Permiten la definición de integridad referencial respecto a columnas de otras tablas. Definiéndose para ello como constraints de claves foráneas –“FK”-. d.   Puede formar parte de la clave de particionamiento de tablas de gran volumen de información. Como mejora al acceso a la información y a la gestión de partes de un gran grupo de información (por ejemplo: purga de particiones).

  • Consideraciones

a.   Una columna virtual nunca puede ser objeto de una referencia a otra columna virtual de la misma tabla.

b.   Si la columna virtual está constituida por una función determinista, no será posible utilizarla como Columna Clave de particionamiento.

c.   La función asociada debe devolver sólo valores escalares o XMLType. Nunca podrá devolver tipos de datos subministrados por Oracle –predefinidos-, tipos definidos por el usuario, datos LOB  o LONG RAW.

d.   Una columna virtual nunca puede ser tratada en acciones de “inserción de nuevos valores” o “actualización”. Se trata de una columna calculada y, por tanto, no tiene sentido el aplicarle valores en este tipo de operaciones DML (Insert y/o Update).

e.   El tiempo de cálculo va en función de la función que la defina. Normalmente, en las definidas a partir de Built-In Functions, el acceso a ellas tiene una penalización despreciable. Y para aquellas que están definidas a partir de funciones propias en PL/SQL, estarán en dependencia del “coste“ o penalización de ejecución de estas funciones.

Unir lo “virtual o lógico“ con lo “físico o empírico“ a nivel atómico, como es el caso de las columnas virtuales, abre una serie de expectativas de implementación que antes no se poseía.

Categorías:SQL Etiquetas: , ,
  1. Huarcaya
    mayo 8, 2013 en 23:40

    Muy bueno el tutorial

  2. Pilar
    julio 24, 2013 en 10:48

    Genial. Un artículo, conciso y claro. Gracias

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: