Contenido verificado asociado a este RA
Fundamentos de las Bases de Datos Objeto-Relacionales (BDOR)
Esta unidad introduce las bases de datos objeto-relacionales, explicando su origen, características distintivas y las ventajas que ofrecen al combinar el modelo relacional con conceptos de la programación orientada a objetos.
Definición de Tipos Objeto y Tipos Colección
Esta unidad detalla cómo crear tipos de datos objeto con sus atributos y métodos, y cómo definir tipos de datos colección (VARRAY y NESTED TABLE) para manejar conjuntos de valores dentro de un contexto objeto-relacional.
Creación de Tablas Objeto y Tablas con Columnas Tipo Objeto
Esta unidad explica cómo integrar los tipos de objeto y colección definidos previamente en la estructura de la base de datos, creando tablas que almacenan objetos directamente o que contienen columnas cuyos tipos son objetos o colecciones.
Manipulación y Consulta de Datos Objeto-Relacionales
Esta unidad cubre las operaciones DML (INSERT, UPDATE, DELETE) y DQL (SELECT) para interactuar con datos almacenados en tablas de objetos y tablas con columnas tipo objeto, prestando especial atención a la integridad y consistencia de los datos.
Conceptos clave
Base de Datos Objeto-Relacional (BDOR)Tipo de Dato Definido por el Usuario (UDT)ObjetoAtributoMétodoColección (VARRAY, NESTED TABLE)Identificador de Objeto (OID)Herencia de tiposImpedancia objeto-relacionalCREATE TYPECREATE TYPE BODYAtributo de objetoMétodo de objetoSELF (pseudocolumna)VARRAYNESTED TABLETipo de colecciónTabla de objetos
Errores que conviene evitar
- Confundir una BDOR con una Base de Datos Orientada a Objetos (BDOO): Las BDOR mantienen el modelo relacional como base, añadiendo características de objetos, mientras que las BDOO son puramente orientadas a objetos y no se basan en el modelo relacional. La causa es no entender la naturaleza híbrida de las BDOR. Corrección: Recordar que las BDOR son una extensión del modelo relacional, no un reemplazo.
- Intentar aplicar la normalización relacional de forma estricta a los tipos objeto: Aunque la normalización es importante, el uso de tipos objeto y colecciones puede implicar cierta desnormalización controlada para mejorar el rendimiento y la cohesión de los datos. La causa es la aplicación rígida de reglas relacionales. Corrección: Evaluar el equilibrio entre normalización y encapsulación de objetos para optimizar el diseño.
- No implementar el cuerpo de un método declarado: Si se declara un método en el `CREATE TYPE` pero no se define su lógica en un `CREATE TYPE BODY`, el tipo de objeto será inválido y no se podrá usar. Causa: Olvido o desconocimiento de la necesidad del `TYPE BODY`. Corrección: Asegurarse de que cada método declarado tenga su implementación correspondiente en un `CREATE TYPE BODY`.
- Exceder el tamaño máximo de un VARRAY: Intentar insertar más elementos en un VARRAY de los que su tamaño máximo permite generará un error. Causa: No planificar adecuadamente el tamaño del VARRAY o usarlo para colecciones de tamaño impredecible. Corrección: Usar `NESTED TABLE` para colecciones de tamaño ilimitado o reevaluar el tamaño máximo del `VARRAY` si es posible.
- Omitir la cláusula `NESTED TABLE ... STORE AS` al crear una tabla con una columna de tipo `NESTED TABLE`: Esto resultará en un error de sintaxis o de compilación, ya que el SGBD necesita saber dónde almacenar los datos de la tabla anidada. Causa: Desconocimiento de que las tablas anidadas requieren un almacenamiento físico separado. Corrección: Incluir siempre `NESTED TABLE nombre_columna_coleccion STORE AS nombre_tabla_almacenamiento`.
- Intentar crear una `REF` a una tabla que no es una tabla de objetos o no tiene OID: Las referencias a objetos solo funcionan con tablas de objetos que tienen un identificador de objeto. Causa: No comprender el requisito de OID para las referencias. Corrección: Asegurarse de que la tabla a la que se hace referencia se haya creado con `OF nombre_tipo_objeto OBJECT IDENTIFIER IS SYSTEM GENERATED`.
- Intentar acceder a atributos de un objeto sin la notación de punto: Por ejemplo, `SELECT e.ciudad FROM EMPLEADOS e` en lugar de `SELECT e.direccion.ciudad FROM EMPLEADOS e`. Causa: Tratar los atributos de un objeto anidado como columnas de la tabla principal. Corrección: Recordar que los atributos de objetos anidados se acceden a través de la notación de punto, siguiendo la jerarquía del objeto.
- Modificar colecciones de forma incorrecta: Intentar actualizar elementos individuales de un `VARRAY` sin reemplazar la colección completa, o no usar `TABLE()` para modificar `NESTED TABLE`. Causa: Desconocimiento de las limitaciones y sintaxis específicas para la manipulación de colecciones. Corrección: Para `VARRAY`, generalmente se reemplaza la colección completa. Para `NESTED TABLE`, usar `UPDATE TABLE(...)` o `DELETE FROM TABLE(...)`.