Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción
El diseño físico tiene como objetivo definir las especificaciones de implementación que conlleven a la
materialización de la base de datos.
Escenario
Deseamos realizar el diseño físico para la base de datos FILMES, cuyos insumos los podemos encontrar
en el Anexo 1 (diseño lógico, transacciones de datos, SGBD elegido y proyección de ítems a almacenar) y
en el Anexo 2 (análisis transaccional)
Se parte del modelo lógico (diagramas y diccionario de datos), y a partir de ello se realiza lo siguiente:
Evaluar posibles limitaciones de implementación en el SGBD elegido.
Traducir relaciones base
Traducir integridad referencial
Traducir otras restricciones de integridad
Resolver campos derivados
No todas las restricciones de integridad se pueden implementar mediante DDL, por ejemplo:
1
En MySQL la implementación de integridad referencial solo es permitida en tablas tipo InnoDB
En Oracle y en la mayoría de SGBD la actualización de campos calculados debe realizarse a
través de triggers o directamente desde la aplicación
Casi todos los SGBD tienen limitaciones para implementar la multiplicidad máxima del extremo
muchos en las asociaciones uno a muchos.
Normalmente las restricciones de integridad que los SGBD relacionales permiten implementar mediante
DDL son:
Llaves primarias (constraint PRIMARY KEY)
Llaves foráneas (constraint FOREIGN KEY)
Llaves alternas o campos únicos (constraint UNIQUE)
Campos obligatorios (constraint NOT NULL)
Restricciones específicas de dominio (constraint CHECK)
Para las restricciones que no permita implementar el SGBD con DDL, existen dos alternativas:
1. Mediante triggers
2. En la aplicación de usuario final
A efectos de aclarar algunos aspectos presentamos aquí una parte de script que corresponde a la
implementación de la tabla PELICULAS.
2
En la primera sentencia creamos la tabla con todos sus campos, las restricciones que hemos definido allí
son:
Restricción de tipo: los tipos de dato.
Restricción de obligatoriedad: NOT NULL. En este caso tal como consta en el diseño lógico, el id,
el nombre, el tipo de guion, el año y la sinopsis son campos obligatorios.
Lo siguiente es definir llave primaria, y llaves foráneas. En este caso lo hacemos luego de creada la tabla,
mediante un ALTER TABLE ... ADD CONSTRAINT. Obviamente también se las puede implementar dentro
del CREATE TABLE, en ese caso solo tomar en cuenta que, para el caso de la llave foránea, previamente
debe haberse creado la tabla referenciada, PAISES en este caso.
Con lo anterior habremos definido la estructura y restricciones que constan en el diagrama relacional. Lo
siguiente es definir el resto de restricciones del modelo. Primero las restricciones de dominio específico,
que en lo que respecta a PELICULAS son las siguientes:
peliculas.tipo_guion: Solo los valores: "Original", "Adaptado"
peliculas.anio: Debe ser mayor o igual a 1900
peliculas.fecha_estreno: Debe ser mayor o igual a 01-ene-1900
peliculas.duracion_minutos: Debe ser mayor a 30
3
Ese tipo de restricciones se implementan usando un constraint tipo CHECK, el cual permite establecer una
condición de validación para el campo.
Finalmente hay dos restricciones más que tienen que ver con películas:
1. En el mismo año, no puede haber dos películas con el mismo nombre
2. Cada película debe tener al menos un género
La primera, implica que los valores de los campos peliculas.nombre_original más peliculas.anio, juntos,
no pueden duplicarse. Para ello creamos una restricción de tipo UNIQUE, la cual permite definir claves
alternativas, en ese caso para la combinación de esos dos atributos.
En lo que respecta a la segunda restricción"Cada película debe tener al menos un género", se debe analizar
que los géneros se almacenan en la tabla PELICULAS_GENEROS. Para asociar un género a una película
habrá que agregar una fila en esa tabla luego de haber agregado la película en PELICULAS; por lo tanto,
no es posible controlar esa restricción al momento de crear la película. Esta restricción deberá controlarla
la aplicación.
Los campos derivados tampoco pueden implementarse mediante DDL de Oracle, ya que implica un
proceso de cálculo en base a atributos de otras tablas, y no simplemente una condición de validación.
Índices
Los índices son muy importantes a efectos de optimizar el rendimiento de la base de datos en operaciones
de consulta. Por lo tanto, es muy importante en este punto identificar aquellas columnas para las que
sería conveniente crear un índice.
Los índices primarios se refieren a aquellos que se definen para llaves primarias y llaves foráneas. Y hay
que partir asumiendo que tanto llaves primarias, como llaves foráneas siempre deberían tener un índice,
de hecho, la mayoría de SGBD al definirlas como tales les crean un índice de forma automática.
Lo que debemos buscar son índices secundarios, es decir, para columnas que no sean ni PK ni FK.
Las columnas candidatas son aquellas que frecuentemente son usadas para combinar (JOIN), filtrar
(WHERE), ordenar (ORDER BY) y agrupar (GROUP BY). Sobre todo, filtrar, ordenar y agrupar; la
combinación normalmente viene dada por las columnas PK y FK que como se dijo, debemos asumir que
siempre tendrán índice.
Si se tienen ya las consultas SQL que se van a realizar es más fácil: aquellas columnas que aparecen en la
condición de selección de la cláusula WHERE, o por la cual se ordenan los resultados, o que se usan para
agrupar los datos, son las columnas candidatas.
Por ejemplo, consideremos la transacción "Listar las películas según el género" en nuestro caso de
estudio FILMES:
4
Como se ve son 5 columnas usadas a efectos combinar (peliculas.id_pelicula y
peliculas_generos.idpelicula), filtrar (peliculas_generos.genero), y ordenar (peliculas.anio y
peliculas.nombre_original). En este caso no existen agrupamientos (GROUP BY), si lo existiese también se
debería tomar en cuenta.
De dichas columnas se excluyen como ya se dijo PKs y FKs que corresponde a índices primarios que
siempre deberían estar indexadas.
En base al análisis de las transacciones de datos del caso FILMES, las columnas candidatas para crear
índices secundarios, serían:
1. personas.apellidos
2. peliculas.nombre_original
3. peliculas.anio
4. personajes.personaje
5. peliculas_directores.tipo_direccion
6. estudios.nombre_estudio
7. peliculas_generos.genero
8. adaptaciones.idioma
9. paises.nombre_pais
Recomendaciones
5
Posteriormente durante la afinación y monitoreo de la base de datos se evaluará si hay algún
índice que está de más, o si falta alguno.
Cuando las tablas son muy pequeñas en cuanto a volumen de datos, se recomienda no crear
índices (Por ejemplo, Países en nuestro caso).
Cuando son columnas tipo cadena de gran longitud tampoco es recomendable indexar
En bases de datos transaccionales (OLTP) se debe reducir el uso de índices al mínimo necesario.
Sobre todo, en columnas de tablas que se actualizan con mucha frecuencia.
No olvidar que los índices aceleran las consultas, pero ralentizan las actualizaciones
Organización física
Cálculo de espacio de almacenamiento en disco requerido
La principal estructura lógica de almacenamiento son las tablas, y por lo tanto es el principal elemento a
tomar en cuenta en la proyección del espacio en disco.
Para determinar el espacio en disco que a ocupar por las tablas se toma en cuenta:
Tamaño de registro de cada tabla
Proyección de filas a almacenar en cada tabla en un mínimo de 5 años
El tamaño de registro de una tabla se estima en base a los tipos de datos. En el caso de Oracle por ejemplo
el tamaño según cada tipo de dato, son los siguientes:
Todo registro tiene una dirección interna llamada ROWID que también ocupa espacio y por lo tanto debe
ser tomado en cuenta.
En base a lo anterior, para nuestro caso de estudio los tamaños de registro de cada tabla serían los
siguientes:
Relaciones
6
Tamaño aproximado de
cada registro (en Bytes)
Personas 573
Actores 54
Directores 54
Guionistas 32
Asumimos que la sinopsis ocupa hast 4000
Peliculas 6380
caracteres
Personajes 214
Peliculas_Directores 91
Películas_Guionistas 76
Estudios 72
Peliculas_Estudios 76
Peliculas_Generos 62
Adaptaciones 316
Paises 132
Lo siguiente es determinar el número de registros (filas) que se van a almacenar con una proyección de 5
años. Luego, para calcular el tamaño de cada tabla se multiplica el número de ítems que se prevé
almacenar en la tabla por el tamaño de cada registro.
7
Consideraciones adicionales:
Si una tabla tiene asociado archivos digitales a las tuplas (jpg, pdf, doc ...), se debe incluir en el
tamaño del registro.
Dependiendo del SGBD se deberá prever espacio para otros archivos que son de datos (Ej:
REDOLOGS en Oracle)
Seguridad
Considerando los siguientes requerimientos de disponibilidad para el caso de estudio "Filmes":
Se requiere disponibilidad 24x7x365
Tiempo de recuperación ante fallo: máximo 1 hora
Se establecen las siguientes medidas orientadas a garantizar la seguridad de la base de datos "Filmes:
Implementar servidor de respaldo.
Implementar replicación síncrona (en tiempo real) entre BD maestro y esclavo
Contar con redundancia eléctrica
Implementar arreglos de discos en servidores (RAID)
Las aplicaciones accesibles desde la extranet solo pueden consultar datos
El acceso físico al servidor de BD solo puede estar permitido al DBA
8
La conexión hacia la base de datos solo estará habilitada para equipos que estén en la red
interna de la empresa (intranet)
Las aplicaciones dirigidas a público en general solo pueden implicar consulta de datos
El acceso a los datos desde sistemas externos se permitirá solo a través del uso de web services
La información correspondiente a: email de la persona, salario, y los montos de financiamiento,
no serán de acceso público
Los salarios deben almacenarse en formato encriptado
No se deben permitir modificaciones directas en la base de datos (activar log de auditoría)
Cada aplicación tendrá su propio usuario de BD
Las consultas de datos se realizarán a través de vistas
9
Anexo 1
Caso de estudio "Filmes"
Descripción
Lo que se busca es disponer de un completo catálogo de películas, que sea accesible de forma pública
para que cualquier persona a través la web pueda buscar películas y ver su ficha informativa.
Luego del estudio preliminar, en el cual se definieron entre otros los alcances, las vistas de usuario, los
requerimientos de datos y las transacciones de datos, se procedió primero a realizar el diseño conceptual
(modelo E-R), y luego el diseño lógico. Para el diseño lógico se decidió trabajar con el modelo de base de
datos relacional
10
Diseño lógico
Diagrama relacional
11
Otras restricciones de integridad
Transacciones de datos
SGBD elegido
12
Anexo 2
Análisis transaccional para el caso de estudio "Filmes"
Análisis de resultados
13