martes, 8 de abril de 2008

Vistas materializadas en Oracle (2)

Activar la reescritura de consultas

Las vista materializada pueden ser útiles para obtener datos precalculados, obtenidos a partir de funciones de agrupamiento como Max, Count, Avg... como en el siguiente ejemplo:

CREATE MATERIALIZED VIEW LOG ON t2
WITH PRIMARY KEY, ROWID, SEQUENCE ( t_key, amt );

CREATE MATERIALIZED VIEW mv
REFRESH FAST ON COMMIT
AS SELECT t_key, MAX( amt ) AS amt_max
FROM t2
GROUP BY t_key;

Con esta vista, podemos realizar consultas como:

SELECT t_key, amt_max
FROM mv
ORDER BY t_key ;
De forma mucho más rápida que con la consulta equivalente:
SELECT t_key, Max( amt ) AS amt_max
FROM t2
GROUP BY t_key
ORDER BY t_key;
Lo bueno del caso es que si tenemos activada en la base de datos una funcionalidad llamada reescritura de consultas (Query Rewrite), Oracle puede usar la información almacenada en la vista materializada para responder la segunda consulta de forma más rápida. Podemos activar esta reescritura realizando la siguiente acción sobre la vista materializada:
ALTER MATERIALIZED VIEW mv ENABLE QUERY REWRITE ;

Nota: El gestor de base de datos Oracle tiene que permitir esta posibilidad. Si no está activa la sentencia anterior producirá un error.

Por defecto, las vistas materializadas tienen la opción de reescritura desactivada.

Para que sea útil, necesitamos ahora recopilar estadísticas de uso que permitan a Oracle optimizar las consultas. Para ello, hacemos uso de las funciones definidas en el paquete DBMS_STATS. En nuestro ejemplo, realizaríamos la siguiente llamada:

EXECUTE DBMS_STATS.GATHER_TABLE_STATS( USER, 'mv' );

Vista materializada de joins

En el caso de crear una vista materializada de un join, se deben cumplir ciertas condiciones adicionales si queremos que sea de refresco rápido:

  • Deben existir logs o registros para cada tabla implicada en el join

  • La sentencia SELECT no debe contener objetos

  • No se pueden usar sentencias GROUP BY, ni funciones de agrupación.

  • Los campos ROWID de todas las tablas implicadas deben aparecer en la cláusula SELECT

Además de estas obligaciones, también hay unas cuantas recomendaciones:

  1. Como este tipo de vistas suele ser bastante grande, ya
    que no tiene agrupaciones, se puede aumentar mucho la
    eficacia definiendo un índice para cada campo ROWID de
    la vista.

  2. Después de haber creado la vista, se deben realizar un
    análisis estadístico usando el paquete DBMS_STATS. Oracle
    necesitas estas estadísticas para optimizar la reescritura
    de consultas, como ya se explicó.

Referencias


sábado, 5 de abril de 2008

Vistas materializadas en Oracle (1)

Según la wikipedia*, las vistas materializadas se definen así:

En un sistema de gestión de base de datos que siga el modelo relacional, una vista es una tabla virtual, que representa el resultado de una consulta. Siempre que se consulta o se actualiza una vista normal, el SGBD convierte estas operaciones en consultas o actualizaciones de las tablas usadas para definir la vista. Una vista materializada utiliza una aproximación diferente: el resultado de la consulta se almacena en una tabla cache real, que será actualizada de forma periódica a partir de las tablas originales. Esto proporciona un acceso mucho más eficiente, a costa de un incremento en el tamaño de la base de datos y a una posible falta de sincronía, es decir, que los datos de la vista pueden estar potencialmente desfasados con respecto a los datos reales. Es una solución muy utilizada en entornos de almacenes de datos (datawarehousing), donde el acceso frecuente a las tablas básicas resulta demasiado costoso.

Además, dado que la vista se almacena como una tabla real, se puede hacer con ella lo mismo que con cualquier otra tabla, siendo especialmente importante la capacidad de crear índices en cualquier columna, lo cual puede aumentar significativamente la velocidad de las consultas. En una vista normal, lo habitual es que sólo se permita utilizar índices sobre aquellas columnas que ya tienen definido un índice en la tabla original; a veces ni siquiera se ofrece esa posibilidad.

minority-report.0

Una vista materializada se define en base a una consulta a tablas, vistas y otras vistas materializadas. Generalmente se conoce a las tablas o vistas básicas como tablas maestras (si estamos hablando de replicación) o tablas detalle (si estamos hablando en términos de almacenes de datos). Es esta entrada hablaremos de tablas base, por considerar el uso de los términos maestro y detalle confusos.

Como crear una vista materializada

A la hora de crear una vista materializada en Oracle, debemos prestar especial atención al mecanismo de refresco; hay varias opciones: una de las más importantes es decidir si vamos a actualizar basándonos en las claves primarias o basándonos en el campo ROWID. Otra cuestión importante es si los refrescos van a ser automáticos o manuales. En el caso de ser automáticos, hay también varios parámetros importantes a tener en cuenta.

Veamos ahora las distintas opciones a la hora de definir el tipo de refresco.

Refresco completo

La forma más sencilla de especificar la forma en que los datos se actualizan desde las tablas básicas hasta la vista materializada es REFRESH COMPLETE. Con esta opción, se ejecuta la consulta que define la vista y se actualizan todos los datos, reemplazando la totalidad de los datos que hubiera antes.

Veamos el siguiente ejemplo:

CREATE MATERIALIZED VIEW mv
REFRESH COMPLETE
AS
SELECT * FROM t;

En este caso, no indicamos ninguna periodicidad, así que tenemos que hacer los refrescos manualmente. Para ello, se puede llamar al procedimiento almacenado DBMS_MVIEW.REFRESH, que acepta un primer parámetro list, que es una lista de vistas materializadas a refrescar, y un segundo parámetro method, al cual podemos pasarle el valor C para que realice un refresco completo:

EXECUTE DBMS_MVIEW.REFRESH( LIST => 'MV', METHOD => 'C' );

Evidentemente, si la vista materializada contiene muchos registros, y las tablas base cambian con poca frecuencia, reemplazar todos los datos cada vez que queramos refrescar no es nada recomendable. En estos casos, es mejor procesar solo aquellos registros que hayan cambiado; veremos esa posibilidad más adelante.

Refresco rápido

El sistema que permite actualizar sólo los registros que se hayan modificado se llama ´´FAST REFRESH``. Pero antes de poder crear una vista materializada con este sistema de refresco es necesario un mecanismo que registre dichos cambios en las tablas base. Este mecanismo se conoce como registro (log) de la vista materializada, y debemos crear dicho registro antes de poder crear la vista.

Pare crear el registro, usamos la sentencia CREATE MATERIALIZED VIEW LOG:

CREATE MATERIALIZED VIEW LOG ON t ;

No es necesario darle un nombre, porque una tabla solo puede tener un registro. El registro es una tabla, y se puede inspeccionar como cualquier otra, aunque el la práctica el desarrollador no tienen ninguna necesidad de referenciar a esta tabla. En cualquier caso, podemos consultar la estructura con la sentencia:

DESCRIBE MLOG$_T

El propósito del registro es almacenar la información de las modificaciones que sufra la tabla, identificando así los registros que deben ser refrescados. A la hora de identificar los registros, se pueden usar dos esquemas diferentes: basarnos en las claves primarias de la tabla o basarnos en los campos ROWID.

Para utilizar los campos de la clave primaria, hay que incluir WITH PRIMARY KEY a la hora de crear el registro, o no indicar nada ya que este es el valor que se asume por defecto:

CREATE MATERIALIZED VIEW LOG ON t WITH PRIMARY KEY;

En caso de querer utilizar el campo ROWID podemos usar WITH ROWID:

CREATE MATERIALIZED VIEW LOG ON t WITH ROWID;

También se puede especificar una columna especial, de tipo secuencia, en el registro. Esto permite a Oracle aplicar las actualizaciones en la vista materializada en el orden correcto. Esto puede ser importante si se mezclan ordenes de inserciones, actualizaciones y borrados en una misma transacción. La forma de especificar este comportamiento es:

CREATE MATERIALIZED VIEW LOG ON t WITH SEQUENCE;

Dado que dicha mezcla de operaciones es lo más habitual, es recomendable crear nuestros registros con dicha opción.

Por último, tenemos la opción de definir aquellos campos cuyos cambios queremos monitorizar, con la opción WITH <Column List>. Solo los cambios en los campos especificados modificaran el registro:

CREATE MATERIALIZED VIEW LOG ON t WITH ( A, B, C );

Hay más opciones a la hora de crear el registro. Véase las referencias al final para más información.

Ahora, por fin, una vez creado el registro o log de cambios, podemos crear la vista materializada con la opción REFRESH FAST. En ejemplo seria:

CREATE MATERIALIZED VIEW LOG ON t WITH SEQUENCE ;

CREATE MATERIALIZED VIEW mv
REFRESH FAST
AS SELECT * FROM t;

Lo forma de actualización que el gestor asume por omisión, es decir, si no indicamos nada, es la llamada REFRESH FORCE; una combinación de los dos modos. Realiza un refresco FAST si es posible, y en caso contrario realiza un refresco COMPLETE.

Como antes, podemos forzar una actualización llamando al procedimiento DBMS_MVIEW.REFRESH, solo que esta vez usaremos como segundo parámetro el valor 'F' (De Fast):

EXECUTE DBMS_MVIEW.REFRESH( LIST => 'mv', METHOD => 'F' );

Aun cuando se haya definido con FAST REFRESH, podemos realizar un refresco completo, si lo consideremos oportuno, usando el valor C:

EXECUTE DBMS_MVIEW.REFRESH( LIST => 'mv', METHOD => 'C' );

De forma similar, una vista materializada creada con la opción COMPLETE REFRESH puede ser actualizada incrementalmente, aunque sólo si creamos los registros o logs necesarios en las tablas básicas.

Cuando actualizar

Hasta el momento no hemos dicho nada de cuando se deben refrescar los datos, y de hecho los hemos refrescado manualmente en los ejemplos mostrados. Este es de nuevo el comportamiento por defecto, y lo podemos incluir en la definición de la vista materializada con la sentencia REFRESH ON DEMAND:


CREATE MATERIALIZED VIEW mv
REFRESH ON DEMAND
AS SELECT * FROM t;

Para provocar estas actualizaciones, podemos utilizar los siguientes procedimientos:


  • DBMS_MVIEW.REFRESH

  • DBMS_MVIEW.REFRESH_ALL_MVIEWS

  • DBMS_MVIEW.REFRESH_DEPENDENT

La otra posibilidad es hacer que Oracle refresque la vista materializada automáticamente cada vez que se hace un commit a las tablas base. Eso se puede hacer incluyendo COMMIT en la sentencia REFRESH, como en el siguiente ejemplo:

CREATE MATERIALIZED VIEW mv
REFRESH FAST ON COMMIT
AS SELECT * FROM t;

No obstante, la actualización ON COMMIT solo es posible en determinadas situaciones:


  • La vista materializada debe ser definida con refresco rápido (FAST)

  • La vista materializada no puede contener campos de tipo objeto ni tipos adicionales de Oracle

  • Las tablas básicas implicadas nunca deben formar parte de transacciones distribuidas

Las dos primeras condiciones producirán un error en tiempo de compilación. El tercer caso producirá el error cuando se intente realizar una transacción distribuida en alguna tabla base.

Otra posibilidad es definir actualizaciones periódicas, que sean realizadas automáticamente por el sistema pero que demanden menos recursos que las actualizaciones ON COMMIT. Para ello se le indica el momento de carga inicial de los datos con la sentencia START WITH (normalmente SYSDATE, es decir, ahora mismo, pero se puede especificar cualquier momento en el futuro) y una frecuencia de actualización con la sentencia NEXT. Por ejemplo, para definir una vista materializada que se actualice cada media hora, haríamos:


CREATE MATERIALIZED VIEW mv
REFRESH FAST
START WITH SYSDATE
NEXT SYSDATE + 1/48
WITH PRIMARY KEY
AS SELECT * FROM t;

La clausula REFRESH

En resumen, la sintaxis de la cláusula REFRESH es la siguiente:


REFRESH [fast|complete|force]
[on demand | commit]
[start with date] [next date]
[with {primary key|rowid}]

Referencias



lunes, 17 de marzo de 2008

1.6 Gestión de transacciones. ACID.

Una de los objetivos de usar una base de datos era el de garantizar la atomicidad de un conjunto de operaciones (Se utiliza la palabra atómico haciendo referencia al latín atomus, y éste del griego άτομος, con el significado de indivisible). La atomicidad es la garantía que nos da el sistema de que, ante la ejecución de una serie de operaciones, englobadas en lo que llamamos una transacción, o bien se ejecutan todas las operaciones, o bien no se efectúa ninguna.

En otras palabras, el conjunto de operaciones se ejecuta en su totalidad o no se ejecuta en absoluto, no dejando ningún efecto sobre el sistema. Una vez empezada una transacción, por tanto, esta puede acabar con una confirmación que la hace definitiva (Commit) o pueden ser cancelada en su totalidad (Rollback)

La atomicidad nos facilita mantener la consistencia de los datos. Decimos que una base de datos es consistente si se garantiza que siempre se verifican unas determinadas condiciones, definidas por nosotros, y que expresaremos en forma de reglas. Las condiciones deben cumplirse obligatoriamente antes y después de la transacción (pero pueden incumpliese transitoriamente dentro de la misma).

Por ejemplo, consideremos una transacción de fondos desde la cuenta A a la cuenta B. Definimos una regla de consistencia que establezca que la suma de los saldos de A y B debe ser constante. Esta regla debe cumplirse antes y después de la transacción, aunque si es posible que durante la transacción se produzcan inconsistencias.



El aislamiento es importante




Otra característica destacable de una transacción es su durabilidad. Esta garantiza que, en el instante en el que se finaliza la transacción, esta perdura. Incluso en el caso de fallo en el sistema, este deberá ser capaz de recuperarse y recordar todas la transacciones que hayan sido completadas.

Finalmente, un sistema de transacciones debe garantizar el aislamiento. El aislamiento es la garantía de que los cambios hechos dentro de cualquier transacción son invisibles al resto los usuarios, mientras esta no haya concluido. Así se garantiza que el resto de usuarios no observen los cambios intermedios.

El gestor de transacciones es la parte del gestor de base de datos que se asegura de mantener la atomicidad, durabilidad y aislamiento de las transacciones. Si no hay ningún error, al acabar la transacción esta se da por definitiva. Si se produce un error durante la transacción, el sistema debe restaurar la base de datos al estado en que estaba justo antes de que empezara la transacción. Este proceso se denomina recuperación de fallos.

Estas cuatros características de los sistemas gestores de bases de datos se suelen resumir con el acrónimo ACID, que corresponde con las iniciales en ingles de Atomicidad (Atomicity), Consistencia (Consistency), Aislamiento (Isolation) y Durabilidad (Durability).

viernes, 7 de marzo de 2008

1.5 Usuarios y administradores de la base de datos

Las usuarios de una base de datos pueden clasificarse en diferentes roles: Por un lado tenemos los usuarios, y por otro los adminstradores.

Usuarios


Los usuarios se dividen en:


  • Usuarios normales: Usuarios no sofisticados, que interactúan con el sistema mediante la ejecución de programas específicos escritos por otras personas. Normalmente la interfaz consiste en formularios e informes generados.

  • Programadores de aplicaciones: Profesionales informáticos que escriben los programas de aplicación que utilizan los usuarios. Para ello se suelen usar lenguajes convencionales, entornos de herramientas de desarrollo rápido de aplicaciones (RAD - Rapid Application Development) o lenguajes de cuarta generación.

  • Usuarios sofisticados: Interactúan con el sistema sin usar aplicaciones específicas, usando directamente el lenguaje de consultas. Los analistas que utilizan consultas para explotar los datos en la base de datos entran en esta categoría.

  • Usuarios especializados: son usuarios sofisticados que escriben aplicaciones de BD especializadas que no son adecuadas en el marco de procesamiento de datos tradicional.



Administrador de la base de datos


Usar un un sistema gestor de base de datos implica tener un control centralizado de las formas de acceso a los los datos. La personas encargadas de este control se denominan administradores de la base de datos. Sus funciones incluyen:

  • Diseño y creación de esquemas.

  • Definición de estructuras y métodos de accesos.

  • Modificar los esquemas y la organización física, si fuera necesario.

  • Mantenimiento de usuarios: Crear cuentas, roles, conceder o revocar autorizaciones a los usuarios para poder trabajar con los datos.

  • Mantenimientos rutinarios: copias de respaldo, comprobación de espacio ocupado en los discos, comprobaciones de rendimiento.

martes, 26 de febrero de 2008

1.4 Lenguajes de base de datos

Un sistema de base de datos proporciona un lenguaje de definición de datos (LDD) para especificar el esquema de la base de datos y un lenguaje de manipulación de datos (LMD) para expresar las consultas y las modificaciones a la base de datos. En la práctica, los dos lenguajes no suelen ir por separado, sino que forman un único lenguaje, como por ejemplo en el lenguaje SQL.

  • El Lenguaje de definición de datos (LDD) sirve para especificar el esquema de la BD. El objetivo del lenguaje es permitir especificar un conjunto de tablas, que se almacenan en un archivo especial llamado diccionario de datos o directorio de datos. Esta información son datos acerca de los datos, es decir, metadatos.

  • El Lenguaje de manipulación de datos (LMD) permite acceder y manipular los datos organizados. Hay dos tipos: LMD procedimentales, que requieren que el usuario especifique que datos se necesitan y como obtenerlos, y LMD no procedimentales, que sólo requieren del usuario que especifique qué datos necesita, sin necesidad de indicar también como obtenerlos.


Las operaciones quu se pueden realizar sobre la información almacenada en una base de datos son:

  • La consulta o recuperación de la información almacenada

  • La inserción de información nueva

  • El borrado de información

  • La modificación de la información


Una consulta es una instrucción para recuperar información, y la
parte del LMD que implica recuperación de información se llama
Lenguaje de Consultas. Existen varios lenguajes de consultas.
En el tema 4 se estudiará SQL, el más extendido de todos. En
el tema 5 se estudiarán otros.

Acceso a la base de datos desde programas de aplicación


Los programas de aplicación se escriben normalmente en un lenguaje de alto nivel (Cobol, C, C++, Python, Java, etc...), que denominaremos lenguaje anfitrión. Para acceder a la base de datos, las instrucciones LMD necesitan ser ejecutadas desde el lenguaje anfitrión. Hay dos maneras de conseguir esto:

  • Mediante una API (Librería de procedimientos) que permita enviar instrucciones LMD y LDD a la base de datos, así como recuperar los resultados. Un ejemplo de un API de ese tipo es ODBC (Open Data Base Connectivity), definida para permitir el acceso a la base de datos desde C. JDBC (Java Data Base Connectivity) es similar, utilizando como lenguaje anfitrión Java.

  • Extendiendo la sintaxis del lenguaje anfitrión para incorporar llamadas LMD dentro del programa del lenguaje anfitrión. Normalmente se implementa con un preprocesador. Si se utiliza esta técnica se dice que el lenguaje de consulta está embebido en el lenguaje anfitrión.

1.3 Modelo de datos

Los modelos de datos son heramientas conceptuales que sirven para describir los datos, las relaciones entre los datos, las condiciones o restricciones que deben cumplir estas relaciones y, finalmente, la semantica de las mismas. Se verán dos modelos diferentes, el modelo Entidad-Relación, creado originalmente por Peter Chen, y el modelo Relacional, creado por Edgar Frank Codd. ambos modelos son equivalentes, en el sentido de que una serie de trasformaciones permite siempre pasar de un modelo a otro.

Existen, no obstante, muchos otros modelos. A nivel general, estos modelos se pueden clasificar en tras grandes grupos: modelos lógicos basados en objetos, modelos lógicos basados en registros y modelos físicos

Modelo Entidad-Relación (E-R)



En este modelo se utiliza en concepto de Entidad para representar los objetos básicos del sistema que queremos modelar. Las entidades se caracterizan por tener unos atributos, y por tener establecidas relaciones entre si. Todo el sistema se construye sobre estos tres conceptos, lo que le proporciona una de sus principales virtudes: su sencillez. Veamos con más detalle cada uno de estos conceptos.


Entidades


Una entidad es cualquier "objeto" discreto sobre el que se tiene información. Se representa mediante un rectángulo, etiquetada con el nombre de la entidad en su interior. La naturaleza de la entidad debe ser tal que sea perfectamente distinguible del resto del modelo. Por ejemplo, en un sistema bancario, las personas, las cuentas bancarias o las sucursales se podrían interpretar como entidades.

Normalmente en el sistema a modelar hay más de un ejemplar de la Entidad. Cada uno de estos ejemplares se denomina instancia. Por ejemplo, "Ana" y "Benito" pueden ser dos instancias distintas de la entidad "persona". Las instancias no se representan en el diagrama.


Relaciones


Una relación describe cierta interdependencia (de cualquier tipo) entre entidades. Se representa mediante un rombo, que debe unirse mediante líneas con las entidades que relaciona (es decir, los rectángulos).

Una relación no tiene sentido sin las entidades que relaciona. Por ejemplo: una persona (entidad) trabaja (relación) para un departamento (entidad).


Atributos


Los atributos son propiedades relevantes propias de una entidad y/o relación. Se representan mediante una elipse etiquetada con nombre en su interior. Cuando un atributo es identificativo de la entidad se subraya.

Los atributos describen información útil sobre las entidades. En particular, los atributos identificativos son aquellos que permiten diferenciar a una instancia de la entidad de otra distinta. Por ejemplo, el atributo identificativo que distingue a un empleado de otro podría ser su número de la Seguridad Social.



Se debe destacar que las líneas del diagrama solo unen atributos con entidades, o atributos con relaciones, o entidades con relaciones. En un diagrama de E/R NO existen otros posibles usos para las líneas aparte de los mencionados. Un error común es unir directamente dos entidades. No se puede unir con una linea una entidad con otra, obligatoriamente han de pasar por una relación.

Se denomina conjunto de entidades (entity set) al conjunto de todas las instancias que pertenezcan a una entidad. El conjunto de todas las relaciones del mismo tipo se denominan conjunto de relaciones.

Además de representar entidades y relaciones, el modelo permite representar restricciones que los datos almacenados deban cumplir. Una restricción importante es la correspondencia de cardinalidad, que expresa el número de entidades con las que otra entidad se puede asociar a través de una relación.

Veremos con más detalle el modelo relacional en el tema 2.

Modelo relacional



En modelo relacional se denomina así porque se utiliza un conjunto de relaciones o tablas para representar todo; tanto los datos como las interdependecias entre ellos (Las relaciones a las que hace referencia el modelo relacional no se deben confundir con el concepto general de relación, que se usa en el modelo Entidad/Relación; se refiere aquí al concepto matemático de relación: un conjunto de tuplas. Haciendo unas cuantas salvedades, podemos asumir que una relación o conjunto de tuplas es equivalente a una tabla). Cada tabla está compuesta por varias columnas, y cada columna tiene su propio nombre, que debe ser único. Este modelo es un ejemplo de modelo basado en registros. Estos modelos se denominan así porque la base de datos se estructura en registros de formato fijo, de diferentes tipos. Cada tabla contiene registros de un tipo particular. Cada tipo de registro define un número fijo de campos, donde cada campo representa un atributo.

El modelo de datos relacional es el modelo más ampliamente usado, y la mayoría de los sistemas actuales se basan, parcial o totalmente, en el modelo relacional. Se estudiará este modelo con más detalle en los temas 3 al 7.

Es habitual realizar primero un esquema E-R, situado en un nivel superior de abstracción, que luego es traducido al modelo relacional. En el Tema 2 se verá con más detalle este mecanismo de traducción.

Por último, se ha de destacar que en el modelo relacional es posible crear esquemas que tengan carencias graves, como por ejemplo, información duplicada. El tema 7 se dedicará íntegramente a evitar estos malos diseños y se presentarán los conceptos de normalización.


Más información

martes, 19 de febrero de 2008

1.2 Visión de los datos

Tema 1. Introducción


1.2 Visión de los datos


Como vimos en el post anterior, sobre los principales problemas que debe resolver un sistema gestor de base de datos, uno de ellos proporcionar a los usuarios una visión abstracta de los datos, de forma que pueda despreocuparse de los detalles concretos del almacenamiento de la información.


Esta simplificación de los detalles de almacenamiento y gestión de los datos se realiza a diversos niveles.



Nivel Físico

En este nivel se describen en detalle las estructuras de datos que definen como se almacenan realmente los datos. Las preocupaciones en este nivel tienen que ver con tamaño de los registros, uso de la cache, estructuras de los índices, etc...

Nivel lógico

En este siguiente nivel, lo que se define es quedatos se van a almacenr, así como las relaciones entre los mismos y las restricciones que queremos incluir, tanto a nivel de valores de los dominios como a condiciones generales que debe cumplir la base de datos en todo momento. Este nivel permite describir la base de datos completa en base a un subconjunto de estructuras relativamente simples. La idea es que los usuarios a nivel lógico (Diseñadores y administradores de bases de datos) no necesitan preocuparse del nivel físico.

Nivel de vistas
Este nivel completa, mediante la definición de vistas, las necesidades finales de acceso a los datos. La vista puede reorganizar la información del nivel lógico, ampliando, transformando o incluso reduciendo la información que se desea mostrar
al usuario (Programadores y administradores de bases de datos). Además de esconder los detalles del nivel lógico, las vistas proporcionan un mecanismo de seguridad que evita los accesos a determinadas partes de la base de datos.


Los datos almacenados en una bases de datos se ven modificadas a lo largo del tiempo, normalmente. Se denomina ejemplar de la base de datos a la colección de información almacenada en la misma en un momento determinado. El diseño completo de la base de datos se llama esquema de la base de datos. Existen diferentes esquemas, de acuerdo con los niveles explicados anteriormente. Así, el esquema físico describe el diseño final en el nivel físico, mientras que el esquema lógico lo describe en el nivel lógico. Normalmente, es el esquema lógico el más importante, ya que afecta de manera importante a los programas de aplicación. El nivel físico, aunque relevante, se puede alterar en la mayoría de los casos sin que las aplicaciones se vean afectadas.