Diseño físico de bases de datos
Índice
- Introducción
- Objetivos
- 1.Conceptos previos
- 2.El nivel lógico
- 3.El nivel físico
- 3.1.La página
- 3.1.1.Estructura de una página
- 3.1.2.Estructura de una fila
- 3.1.3.Estructura de un campo
- 3.1.4.Gestión de la página
- 3.1.5.Otros tipos de páginas
- 3.2.La extensión
- 3.3.El fichero
- 3.4.Visión general de las E/S en un SGBD
- 3.1.La página
- 4.El nivel virtual
- 5.Transformación del modelo lógico en el modelo físico
- 5.1.Tabla
- 5.1.1.Clave primaria y clave alternativa
- 5.1.2.Índice
- 5.1.3.Restricciones
- 5.2.Espacio para tablas
- 5.3.Base de datos
- 5.1.Tabla
- 6.Implementación de métodos de acceso
- 6.1.Los métodos de acceso a una BD
- 6.1.1.Los datos
- 6.1.2.Los accesos por posición
- 6.1.3.Los accesos por valor
- 6.1.4.Los accesos por varios valores
- 6.2.Implementación de los accesos por posición
- 6.3.Implementación de los accesos por valor
- 6.3.1.Necesidad de los índices
- 6.3.2.Características generales de los índices
- 6.3.3.Árboles B+
- 6.3.4.Dispersión
- 6.3.5.Índices agrupados
- 6.4.Implementación de los accesos por varios valores
- 6.5.Índices del sistema Oracle
- 6.5.1.Accesos por valor
- 6.5.2.Accesos por varios valores
- 6.1.Los métodos de acceso a una BD
- Resumen
- Glosario
- Bibliografía
Introducción
Objetivos
-
Conocer la estructura física que utiliza la base de datos para almacenar los datos de manera no volátil.
-
Conocer la funcionalidad y la estructura del nivel virtual y del nivel físico.
-
Aprender a realizar el diseño físico de la base de datos a partir de su diseño lógico adaptado a las características de un SGBD concreto.
-
Definir los índices necesarios y convenientes en cada tabla para que las aplicaciones tengan un buen rendimiento cuando accedan a la base de datos.
-
Conocer los diferentes métodos de acceso necesarios para efectuar consultas y actualizaciones en los datos almacenados en las bases de datos.
-
Comprender la utilidad de los índices para la implementación de los accesos por valor.
-
Conocer la estructura de los índices de árboles B+.
1.Conceptos previos
2.El nivel lógico
2.1.Componentes lógicos
3.El nivel físico
3.1.La página
-
Los datos se almacenan en dispositivos externos pero, por otro lado, sabemos que para efectuar cualquier operación tienen que estar presentes en la memoria principal del ordenador. Debe haber, pues, un transporte de datos entre la memoria externa (que normalmente es un disco) y la memoria interna (o memoria principal). Este transporte se hace empleando una unidad discreta de transporte de datos que en los SO (8) se denomina bloque y en los SGBD recibe el nombre de página.
-
Paralelamente al hecho de ser la unidad de entrada/salida, la página también es la unidad de organización de los datos almacenados. El espacio del disco siempre se asigna a un número múltiple de páginas, y cada página puede estar direccionada de manera individual.
3.1.1.Estructura de una página
3.1.2.Estructura de una fila
3.1.3.Estructura de un campo
-
Tipo SMALLINT: número binario entero de 16 bits.
-
Tipo INTEGER: número binario entero de 32 bits.
-
Tipo FLOAT: número en coma flotante de 64 bits.
-
Tipo CHARACTER(n) o, de manera abreviada, CHAR(n): cadena de nbytes (11) , donde n es la longitud definida en el tipo de dato.
-
Tipo CHARACTER VARYING: como el caso anterior, con la excepción de que aquí n es la longitud real del valor concreto que el campo tenga en cada momento.
-
Tipo DATE: aunque externamente es una cadena de 8 dígitos (4 para el año, 2 para el mes y 2 para el día), internamente se puede almacenar de manera que ocupe mucho menos espacio, por ejemplo 4 bytes, siguiendo un patrón de codificación propio de cada SGBD.
3.1.4.Gestión de la página
-
La primera fila se coloca detrás de la cabecera, se crea un elemento del VDF que apunta a esta fila y se coloca al final de todo de la página.
-
La segunda fila ocupa el lugar inmediatamente detrás de la primera, y su elemento del VDF ocupa el lugar justo delante del elemento de la fila anterior.
3.1.5.Otros tipos de páginas
3.2.La extensión
3.3.El fichero
3.4.Visión general de las E/S en un SGBD
-
Aprovechar la operación física de E/S para leer y llevar a la memoria más de una página consecutiva a la vez, lo cual ahorra tiempo de transporte por unidad leída (página).
-
Avanzar en el tiempo la lectura de una página cuando se prevé que se necesitará próximamente. Así, en el momento en que un proceso la necesite, no tendrá que esperar el tiempo de lectura, puesto que la página ya estará en la memoria.
-
Retener en la memoria principal páginas modificadas, incluso después de ser escritas en el soporte no volátil, con el fin de ahorrarse una nueva lectura si algún otro proceso las necesita.
4.El nivel virtual
4.1.Justificación de la existencia del nivel virtual
4.2.El espacio virtual y sus asociaciones
CREATE TABLE Person (idPerson integer, name varchar2(30), ...) TABLESPACE EV_Persons; CREATE TABLESPACE EV_Persons DATAFILE '/db/filas/Persons1.dbf' SIZE 100M;
4.3.Estructura del espacio virtual
4.3.1.Direccionamiento en un SGBD
-
el número de la página que contiene la fila dentro del espacio virtual asociado a la tabla a la cual pertenece la fila,
-
el número de elemento del VDF de esta página que apunta a la fila.
5.Transformación del modelo lógico en el modelo físico
-
Características del hardware.
-
Sistema operativo y software básico.
-
Diseño del SGBD.
5.1.Tabla
CREATE TABLE table_name ( column_definition ) <unique_constraint> <referential_constraint> <check_constraint> <extent_specs> TABLESPACE table_space_name
CREATE TABLE Employees ( employeeId NUMBER(6) PRIMARY KEY , firstName VARCHAR2(20) , lastName VARCHAR2(25) , email VARCHAR2(25) NOT NULL , phoneNumber VARCHAR2(20) , salary NUMBER(8,2) NOT NULL , commissionPct NUMBER(2,2) , departmentId NUMBER(4) , CONSTRAINT empSalaryMinDemo CHECK (salary > 0) , CONSTRAINT empEmailUKDemo UNIQUE (email) ) TABLESPACE users_fecha;
-
La clave primaria de la tabla es el atributo employeeId.
-
Dos de los atributos no admiten el valor nulo (email y salary).
-
Las restricciones que encontramos son:
-
CHECK: diferentes validaciones, como por ejemplo que el campo sea superior a cero o que cumpla determinadas condiciones.
-
UNIQUE: unicidad del campo indicado, es decir, que no puede haber dos registros en esta tabla con el mismo valor en este campo.
-
5.1.1.Clave primaria y clave alternativa
5.1.2.Índice
CREATE [UNIQUE] INDEX index_name ON table_name ( column [ ASC | DESC ] [ ,..n ]) [ CLUSTER cluster_name ] [ < extent_specs > ] [ TABLESPACE table_space_name ] [ ...... ] < extent_specs > ::= [ PCTFREE nn ] [ PCTUSED nn ] [ INITRANSnn ] [ MAXTRANSnn ] [ STORAGE < storage_clause > ] < storage_clause > ::= INITIAL nn [ NEXT nn ] [ MAXEXTENTS nn ] [ PCTINCREASE nn ] [ OPTIMAL nn ] [ ..... ]
-
index_name es el nombre lógico del índice definido sobre la tabla especificada en la cláusula ON.
-
UNIQUE y CLUSTER son características del índice.
-
table_space_name es el nombre del espacio para índice y se define con la sentencia CREATE TABLESPACE, que hemos visto anteriormente.
-
Cuando se crea el espacio para índice (CREATE TABLESPACE), se asocia a un fichero físico con características propias de nombre, tamaño, ubicación física en disco, etc.
-
La cláusula <extent_specs> especifica condiciones de porcentaje de ocupación de las páginas del espacio para índice.
-
La cláusula <storage_clause> define características de almacenamiento, tamaño inicial, tamaño incremental, extensiones mínimas y máximas, etc.
CREATE INDEX indexDepName ON Employees (departmentId) TABLESPACE users_ind;
5.1.3.Restricciones
-
Verificar que un número sea superior a cero.
-
Verificar que un atributo contenga una cadena de texto de un tamaño determinado.
-
Verificar que no haya valores duplicados para un cierto atributo.
CREATE TABLE Employees ( name varchar2(30), salary number CHECK (salary > 0) ) TABLESPACE data_employees;
CREATE TABLE Employees ( name varchar2(30) NOT NULL, salary number ) TABLESPACE data_employees;
CREATE TABLE Employees ( id varchar2(9) UNIQUE, name varchar2(30) NOT NULL, salary number ) TABLESPACE data_employees;
CREATE TABLE Department ( id number(6) PRIMARY KEY name varchar2(50) ) TABLESPACE data_departments; CREATE TABLE Employees ( id varchar2(9) UNIQUE, name varchar2(30) NOT NULL, salary number, departId number(6), CONSTRAINT fkDep FOREIGN KEY (departId) REFERENCES Department (id) ) TABLESPACE data_employees;
5.2.Espacio para tablas
CREATE TABLESPACE table_space_name DATAFILE < filespec > [ ,...n ] DEFAULT STORAGE < storage_clause > < filespec > ::= 'file_name' [ SIZE nn ] < storage_clause > ::= INITIAL nn [ NEXT nn ] [ MINEXTENTS nn ] [ MAXEXTENTS nn ] [ PCTINCREASE nn ] [ OPTIMAL nn ] [ ..... ]
-
table_space_name es el nombre del espacio para tablas, que se define con esta sentencia y que está relacionada con la cláusula TABLESPACE de la sentencia CREATE TABLE.
-
Cada espacio para tablas se asocia a uno o más ficheros físicos <filespec>.
-
La definición del fichero físico viene dada por su nombre externo file_name, su ubicación en disco y su tamaño, size.
-
La cláusula <storage_clause> define sus características de almacenamiento, tamaño inicial, tamaño incremental, extensiones mínimas y máximas, etc.
CREATE TABLESPACE users_data DATAFILE '/db/users/users_data1.dbf' SIZE 100M;
5.3.Base de datos
CREATE DATABASE database_name [ CONTROLFILE REUSE ] [ LOGFILE < filespec > [ ,...n ] ] [ MAXLOGFILES nn ] [ MAXLOGMEMBERS nn ] [ MAXLOGHISTORY nn ] [ DATAFILE < filespec > [ ,...n ] ] [ MAXDATAFILES nn ] [ MAXINSTANCES nn ] [ CHARACTER SET charset ] [ ...... ]
-
database_name es el nombre de la base de datos que se asocia a un conjunto de ficheros físicos que contienen los espacios para tablas explicados en el subapartado anterior.
-
Los ficheros físicos que contienen los espacios para tablas se relacionan en la cláusula DATAFILE < filespec >.
-
La cláusula LOGFILE <filespec> especifica el nombre de los diarios que se definen para que el gestor registre todas las actualizaciones de las tablas de esta base de datos y posibilitar, así, su recuperación en caso necesario.
-
El detalle de la definición de los ficheros físicos <filespec> se ha explicado en el subapartado de los espacios para tablas.
-
Otros parámetros limitan el número máximo de ficheros de cada tipo: MAXLOGFILES, MAXLOGMEMBERS, MAXDATAFILES, etc.
CREATE DATABASE university USER SYS IDENTIFIED BY pass1 USER SYSTEM IDENTIFIED BY pass2 LOGFILE GROUP 1 ('/db/oracle/oradata/university/redo01.log') SIZE 10M, GROUP 2 ('/db/oracle/oradata/university/redo02.log') SIZE 10M, GROUP 3 ('/db/oracle/oradata/university/redo03.log') SIZE 10M MAXLOGFILES 5 MAXDATAFILES 100;
6.Implementación de métodos de acceso
6.1.Los métodos de acceso a una BD
6.1.1.Los datos
6.1.2.Los accesos por posición
INSERT INTO Employees VALUES (25, 'Juan Tarrago', 150, 2000);
SELECT * FROM Employees;
6.1.3.Los accesos por valor
-
Sentencia 1:
SELECT * FROM Employees WHERE officeNum = 150;
-
Sentencia 2:
UPDATE Employees SET salary = 2500 WHERE officeNum = 200;
-
Sentencia 3:
DELETE FROM Employees WHERE officeNum = 150;
-
Sentencia 1:
SELECT * FROM Employees ORDER BY officeNum;
-
Sentencia 2:
SELECT * FROM Employees WHERE officeNum >= 100 AND officeNum <= 300;
-
Sentencia 3:
UPDATE Employees SET salary = 2500 WHERE officeNum >= 100 AND officeNum <= 300;
-
Sentencia 4:
DELETE FROM Employees WHERE officeNum >= 100 AND officeNum <= 300;
6.1.4.Los accesos por varios valores
-
Sentencia 1:
SELECT * FROM Employees WHERE officeNum = 150 AND salary = 2000;
-
Sentencia 2:
SELECT * FROM Employees ORDER BY officeNum, salary;
-
Sentencia 3:
DELETE * FROM Employees WHERE officeNum >= 100 AND salary >= 1800;
-
Sentencia 1:
SELECT * FROM Employees WHERE officeNum = 150 AND salary >= 2000;
-
Sentencia 2:
SELECT * FROM Employees WHERE salary = 2000 ORDER BY officeNum;
-
Sentencia 3:
DELETE * FROM Employees WHERE officeNum >= 100 AND officeNum <= 300 AND salary = 2000;
6.2.Implementación de los accesos por posición
6.3.Implementación de los accesos por valor
6.3.1.Necesidad de los índices
SELECT * FROM Employees WHERE officeNum = 150;
SELECT * FROM Employees ORDER BY officeNum;
SELECT * FROM Employees ORDER BY emplId;
6.3.2.Características generales de los índices
6.3.3.Árboles B+
Terminología de las estructuras de datos de árbol
-
El nodo raíz de la figura es A.
-
Los nodos hijos de A son B, C, D y E.
-
Los nodos hoja son F, G, C, H, Y, J y E.
-
El subárbol del nodo B es el marcado en la figura.
Estructura de los nodos
-
vi ≤ v < vi+1, si i > 0 e i < n.
-
v < v1, si i = 0.
-
v ≥ vn, si i = n.
-
Todos los valores de un nodo hoja son menores que los valores del nodo hoja siguiente.
-
Todos los valores de algún nodo interno del árbol están repetidos en alguna hoja del árbol (así, las hojas contienen todos los valores del árbol).
Acceso directo por valor
Acceso secuencial por valor
Propiedades destinadas a mejorar el rendimiento
Almacenamiento del árbol y coste de localización de una entrada
-
Nivel 1: 1 nodo con 69 valores y 70 apuntadores.
-
Nivel 2: 70 nodos con 69 valores cada uno y 70 apuntadores cada uno.
-
Nivel 3: 4.900 nodos con 69 entradas cada uno.
Inserciones y supresiones
Valores repetidos
6.3.4.Dispersión
Introducción a la dispersión
-
Se calcula el número de página p, tal que p = h(v).
-
Se accede a la página p para localizar la entrada del valor v.
Gestión de excedentes
-
Páginas primarias: páginas donde colocaremos todas las entradas que no son excedentes (habrá N).
-
Páginas de excedentes: páginas destinadas a guardar las entradas excedentes.
Almacenamiento y coste de localización de una entrada del índice
-
Si una entrada no es excedente y, por lo tanto, se encuentra en su página primaria, solo habrá que hacer una E/S para obtenerla.
-
Para las entradas excedentes, en cambio, siempre será necesario hacer más de una E/S.
Introducción a la dispersión dinámica
6.3.5.Índices agrupados
-
Si el índice es agrupado, los RID que se obtengan consecutivamente apuntarán a filas contiguas. Entonces, será necesario hacer muchos accesos seguidos a filas de la misma página (y se podrán portar conjuntamente con una sola E/S).
-
En índices no agrupados puede pasar que la mayoría de los RID consecutivos apunten a filas de páginas diferentes. Esta situación puede llegar a suponer tantas E/S como filas a las cuales haya que acceder.
6.4.Implementación de los accesos por varios valores
6.4.1.Implementación de los accesos directos
SELECT * FROM Employees WHERE officeNum = 150 AND salary = 1200;
-
Si v1 > w1, entonces v > w; y si v1 < w1, entonces v < w.
-
Si v1 = w1 y v2> w2, entonces v > w; y si v1= w1 y v2< w2, entonces v < w.
-
Si v1 = w1, ..., vi–1 = wi–1 y vi > wi, entonces v > w; y si v1 = w1, ..., vi–1 = wi–1 y vi < wi, entonces v < w.
-
Si v1 = w1, ..., vi = wi, ..., vn = wn, entonces v = w.
6.4.2.Implementación de los accesos secuenciales y mixtos
-
Sentencia 1:
SELECT * FROM Employees ORDER BY officeNum, salary;
-
Sentencia 2:
SELECT * FROM Employees WHERE officeNum = 100 AND salary > 960;
-
Sentencia 3:
SELECT * FROM Employees ORDER BY salary, officeNum;
-
Sentencia 4:
SELECT * FROM Employees WHERE salary = 1200 AND officeNum > 100;
6.5.Índices del sistema Oracle
6.5.1.Accesos por valor
CREATE INDEX indexOfficeNum ON Employees (officeNum);
CREATE INDEX indexOfficeNum ON Employees (officeNum DESC);
CREATE INDEX CLUSTER indexOfficeNum ON Employees (officeNum);
CREATE UNIQUE INDEX indexOfficeNum ON Employees (officeNum);
6.5.2.Accesos por varios valores
CREATE INDEX indexOfficeSalary ON Employees (officeNum, salary);
CREATE INDEX indexOfficeSalary ON Employees (officeNum, salary DESC);
CREATE INDEX CLUSTER indexOfficeSalary ON Employees (officeNum, salary);
CREATE UNIQUE INDEX indexOfficeSalary ON Employees (officeNum, salary);
Resumen
Glosario
- acceso directo por posición m
- Método de acceso que consiste en obtener una página que tiene un número de página determinado dentro de un espacio.
- acceso directo por valor m
- Método de acceso que consiste en obtener todas las filas que contienen un determinado valor por un atributo.
- acceso por varios valores m
- Método de acceso que consiste en obtener varias filas según los valores de varios atributos. Puede ser directo, secuencial o mixto.
- acceso secuencial por posición m
- Método de acceso que consiste en ir obteniendo las páginas de un espacio siguiendo el orden definido por sus números de página.
- acceso secuencial por valor m
- Método de acceso que consiste en obtener varias filas por orden de los valores de un atributo.
- árbol B+ m
- Estructura de datos que se emplea para organizar índices que permiten implementar el acceso directo y el acceso secuencial por valor.
- arquitectura de componentes de almacenamiento f
- Esquema de tres niveles (lógico, físico y virtual) con el cual clasificamos y describimos cada componente de los SGBD, especialmente aquellos que están relacionados con el almacenamiento de los datos.
- bloque m
- Unidad de transferencia de datos entre la memoria del ordenador y los dispositivos o ficheros externos. El sistema operativo de la máquina, concretamente la parte especializada en la E/S, es quien lleva a cabo esta transferencia.
- catálogo m
- Conjunto de tablas que contienen los metadatos de la base de datos.
- dispersión f
- Manera de organizar valores que se puede utilizar en índices que implementan el acceso directo por valor.
- entrada f
- Elemento de un índice que consiste en una pareja formada por un valor y un RID.
- espacio virtual m
- Secuencia de páginas virtuales. Proporciona una visión ordenada y contigua de las
páginas físicas. Según su funcionalidad específica tiene características ligeramente
diferentes, en función de las cuales puede ser un espacio para tablas, fragmentado,
de agrupación, de objetos grandes, de índices, temporal, etc.
sigla EV - EV m
- Podéis ver espacio virtual
- extensión f
- Unidad de asignación de espacio en un dispositivo periférico. Cada extensión es un número entero de páginas consecutivas y está contenida dentro de un fichero. Normalmente existe una extensión primaria, que se adquiere la primera vez que el fichero se extiende, y una extensión secundaria, que corresponde a las extensiones siguientes.
- fichero m
- Unidad de gestión del espacio en los dispositivos periféricos. Normalmente, el sistema operativo gestiona los ficheros en lugar del SGBD.
- identificador de fila m
- Dirección uniforme que utilizan los SGBD para grabar las referencias internas de sus
estructuras de datos. Otros nombres equivalentes son ROWID y, últimamente, OID (en
la medida en que los SGBD relacionales se convierten en los denominados object-relational).
sigla RID - índice m
- Estructura de datos auxiliar que los SGBD usan para facilitar las búsquedas necesarias para implementar los accesos por uno o varios valores.
- índice agrupado m
- Índice que proporciona el acceso secuencial por valor (y también el acceso directo por valor) y que indexa datos que están ordenados físicamente según el orden del acceso secuencial por valor proporcionado.
- índice de valores compuestos m
- Índice de valores compuestos por los atributos [A1, ..., Ai, ..., An]. Tiene la misma estructura que los otros índices, pero con la diferencia de que los valores del índice son, de hecho, listas de valores [v1, ..., vi, ..., vn] en las que cada vi es un valor del atributo Ai.
- memoria intermedia f
- Espacio de la memoria principal del ordenador, normalmente bastante grande, dedicado a contener todas las unidades de memoria intermedia que gestiona el SGBD.
- método de acceso m
- Tipo de acceso a los datos almacenados por un SGBD.
- nivel físico m
- Nivel que engloba los componentes físicos (fichero, extensión y página) dentro de la arquitectura de componentes de almacenamiento.
- nivel lógico m
- Nivel que engloba los componentes lógicos (base de datos, tablas, vistas, restricciones, etc.) dentro de la arquitectura de componentes de almacenamiento.
- nivel virtual m
- Nivel que engloba el componente virtual (el espacio virtual) dentro de la arquitectura de componentes de almacenamiento.
- página f
- Unidad de transferencia de datos entre la memoria del ordenador y los ficheros de una BD. El SO de la máquina es lo que lleva a cabo esta transferencia y pasa la página al SGBD para que este le gestione la información que contiene, puesto que el SGBD es lo que entiende la estructura interior de la página. La página también es la unidad principal de grabación de los datos de una base de datos en los dispositivos periféricos. En este módulo, a veces la denominamos página física o página real para distinguirla de la página virtual.
- página virtual f
- Imagen de la página real o visión que desde el nivel virtual se tiene de la página real sin materializarla físicamente. Hay una relación biunívoca entre página real y página virtual.
- RID m
- Podéis ver identificador de fila
- SGBD m
- Sigla de sistema de gestión de bases de datos
- SO m
- Sigla de sistema operativo
- vector de direcciones de fila m
- Estructura que ocupa las posiciones más altas dentro de una página. Es un vector con
tantos elementos como filas hay en la página. Cada elemento apunta a una de estas
filas. El último elemento apunta a la primera fila, el penúltimo a la segunda, y así
sucesivamente.
sigla VDF - VDF m
- Podéis ver vector de direcciones de fila