FBD Ca U2
FBD Ca U2
FBD Ca U2
bases de datos
UNIDAD 2
Diseño de bases de datos
Unidad 2: Diseño de bases de datos
Introducción
La estructura de las
bases de datos varía de
acuerdo a su propósito
y alcance, y su diseño se
acoge a diferentes
modelos de datos.
Sabemos que un SGBD es una herramienta que nos ayuda a trabajar con la base de datos, administrando los
recursos del servidor y brindándonos funcionalidades que permitirán optimizar nuestro trabajo. Pero,
entendemos que el motor no va a hacer el trabajo por sí solo; este nos da las herramientas y está en
nosotros saber utilizarlas y aprovecharlas al máximo.
Considerando esto, en la presente unidad veremos cómo diseñar una base de datos, o sea, el “qué” de lo
que abordamos en los niveles de abstracción o capas de un SGBD, aplicando las mejores técnicas para
hacerlo. Para ello vamos a tomar como ejemplo un diseño para un instituto educativo, aunque solo lo
resolveremos parcialmente.
1. Modelos de datos
Para poder analizar los distintos modelos de datos, primeramente, tenemos que saber qué es un modelo.
Modelo de datos
CONCEPTO
Si tomamos los dos extremos, tendremos en uno el modelo por el cual partimos, el ambiental. Este es la
especificación funcional o Blue Print del sistema. Esto puede ser, por ejemplo, un documento en Word con
el análisis de los relevamientos realizados, en donde nos dice qué hará el sistema y qué información
requiere.
En el otro extremo llegamos al modelo físico, que es cómo están almacenados los datos en el/los medios
magnéticos (discos). Por suerte, el que conoce bien esto y lo administra excelentemente, es el motor de
base de datos, por lo que no necesitamos un gran conocimiento de este modelo. Pero tal vez sí requerimos
conocer algunos datos para realizar tareas de mantenimiento, como veremos a continuación. Este modelo
físico es distinto en cada motor, o sea, depende no solo de la marca del motor, sino que también puede
depender, incluso, de la versión de este.
El modelo lógico orientado a objetos es un modelo de datos de alto nivel, netamente lógico. Dentro de
este podemos encontrar el modelo entidad-relación, el cual está basado en una percepción de un mundo
real, que consiste en una colección de objetos básicos, denominados “entidades”, y de relaciones entre
estos objetos. (Silberschatz, Korth & Sudarshan, 2006, p. 159)
El modelo lógico basado en registros también es un modelo lógico, pero de menor nivel. La base de datos
se estructura en registros de formato fijo de varios tipos. Cada tabla contiene registros de un tipo particular.
Cada tipo de registro define un número fijo de campos o atributos. Las columnas de la tabla corresponden a
los atributos del tipo de registro. (Silberschatz, Korth & Sudarshan, 2006, p. 6)
Vamos a encontrar tres tipos de modelos basados en registros: red, jerárquico y relacional. Para diseñar una
base de datos empezaremos con el modelo ambiental, mediante una especificación funcional. Sobre esta
base obtendremos el modelo orientado a objetos, por ejemplo, el modelo entidad-relación y, a partir de
este, pasaremos a un modelo orientado a registros, como, por ejemplo, el modelo relacional. Por último,
pasamos a un motor de base de datos previamente elegido, y el mismo motor se encargará de plasmar el
modelo en el almacenamiento físico.
PREGUNTA
¿El diseño de una base de datos depende de la marca y modelo del SGBD?
Vamos con un ejemplo: si en un programa se necesita cargar los datos de los alumnos, existen, por ejemplo,
distintas variables (referenciadas nemotécnicamente):
• NroAlumno
• NomAlumno
• RUTAlumno
• DomAlumno
• TelAlumno
En este caso, tengo seis variables distintas, pero como todas hacen referencias al alumno, yo las podría
agrupar dentro de una estructura única, que sería el registro, por lo que pasaría a tener una sola variable,
pero compuesta de seis campos o sub-variables.
Reg_Alumno
o Número
o Nombre
o RUT
o Domicilio
o Teléfono
Esta única variable compuesta, es decir, este registro, es lo que finalmente se grabaría en la base de datos
en los modelos basados en registros.
En este modelo, de una manera intuitiva, resulta fácil saber qué nota se sacó el alumno José en Matemática
1.
PREGUNTA
3. Modelo entidad-relación
Como ya dijimos, el modelo entidad-relación (MER) está basado en una percepción de un mundo real que
consiste en una colección de objetos básicos, denominados entidades, y de relaciones entre estos objetos.
(Silberschatz, Korth & Sudarshan, 2006, p. 159)
3.1 Entidades
Una entidad es una cosa, objeto, persona o documento en el mundo real, que es distinguible del objeto
modelo restante. Las entidades del mismo tipo, que comparten las mismas propiedades o atributos, se
agrupan en un conjunto de entidades.
• Dominio: es el tipo de dato o el conjunto de valores permitidos. Cada atributo puede ser entero, string
o char, de tipo fecha, decimal, booleano.
• Nulos: el valor nulo es un tipo de valor que pueden tener cualquiera de los atributos: puede ser una
fecha, un nombre, etc. Nulo no es igual a 0, ni igual a espacio, ni igual a vacío.
3.2 Relaciones
Una relación es una asociación entre diferentes entidades. La agrupación de relaciones del mismo tipo se
llama conjunto de relaciones.
Nota aclaratoria: Supongamos que tenemos en nuestro modelo a los alumnos y materias: decimos que los
alumnos “cursan” materias. En este caso, tendríamos el conjunto de entidades alumnos, compuesto por
Juan, Carlos, María, etc.; el conjunto de entidades materias, compuesto por Matemática, Física, Química,
etc.; y el conjunto de relaciones “cursan”, que relaciona los dos conjuntos de entidades. Pero es muy
común hablar de “entidades” y “relaciones”, en vez de “conjunto de”.
3.2.1 Cardinalidad
Expresa el número de entidades a las que otra entidad puede estar asociada vía un conjunto de relaciones.
Estas pueden ser:
3.3 Claves
Como el conjunto contiene distintas entidades, distinguibles unas de otras, se necesita tener un atributo o
conjunto de atributos que permitan identificar de forma única a esa entidad dentro de dicho conjunto. Para
esto tendremos los conceptos de:
• Superclave: es un conjunto de uno o más atributos que me permitan identificar unívocamente a una
entidad, pero esta superclave podría tener atributos innecesarios: por ejemplo: NroAlumno, Nombre,
RUTAlumno, Comuna.
• Clave candidata: es la mínima cantidad de atributos que permiten identificar a una entidad. En este caso,
encontraríamos dos: NroAlumno y RUTAlumno.
• Clave primaria: es la clave que va a elegir el analista entre las claves candidatas.
A continuación, vemos un ejemplo del diagrama entidad-relación (DER), con los distintos objetos que lo
componen. Este diagrama fue realizado con una herramienta disponible en internet, llamada draw.io.
dígito, indique el piso. En el piso 2 tendremos, por ejemplo, las aulas 201,
202, 203, etc. Pero si, dentro de esta universidad que posee varios edificios,
se quiere referenciar al aula 210, con este dato solo no sería suficiente, ya
que en esta universidad habría varias aulas 210. Entonces, tendría que
decir, por ejemplo: Edificio Valdivia, aula 210.
En los últimos dos gráficos mostrados vemos que las entidades no poseen atributos en común, es decir, el
código de edificio no está en la entidad aulas, ni el número de aula está en la entidad edificios.
Por esto, decimos que el diagrama entidad-relación es un diagrama explícito, sin atributos en común.
PREGUNTA
4. Modelo lógico-relacional
En el tópico 2.3 abordamos las características del modelo relacional. Ahora vamos a ver cómo llegar a
obtener el diagrama lógico relacional (DLR), tomando como base el DER.
Los gráficos siguientes fueron realizados con el Database Diagram, una herramienta que viene incorporada
con el SQL Server.
Regla 2: Implicancia de claves. Cuando tenemos una relación entre una tabla fuerte y otra débil, tenemos
que “propagar” la clave de la tabla débil; esto es, copiar los campos clave de una tabla a otra. Esta clave
propagada será, además, parte de la clave primaria de la tabla débil.
Gráfico 9: DLR ejemplo de tabla fuerte (Edificios) y tabla débil (aulas). Nótese la implicancia
de clave.
Regla 3: Propagación de clave. Cuando la relación es entre dos tablas fuertes y con cardinalidad 1am o
ma1, habrá también propagación de claves, pero la clave propagada, en este caso, no será parte de la clave
primaria en la otra tabla. La dirección de la propagación de la clave dependerá de la cardinalidad de la
relación, en el sentido del 1 al m.
Regla 4: Agregación de datos. Cuando la relación es uno a uno se puede finalizar con una sola tabla,
agregando los campos de las dos en una sola. Pero hay muchos casos en los que no es conveniente aplicar
esta regla. Por ejemplo, pensemos en una agencia de taxis, en donde la relación entre choferes y autos es
de 1a1. Si se termina con una sola tabla, se estarían mezclando distintos atributos con sus distintas
funcionalidades. En los autos interesa el kilometraje, mientras que, en los choferes, la fecha de vencimiento
del registro, por lo que sería conveniente mantener dos tablas separadas.
Gráfico 12: DLR de asociación entre Alumnos y Materias a través de tabla intermedia
Regla 6: Los atributos multivalorados se transforman en tablas débiles, con la implicancia de la clave de la
entidad original, más el atributo multivalorado.
Como se puede observar, en los DLR de ejemplo, las tablas sí tienen campos en común, por lo que el
modelo lógico relacional es un modelo implícito, con campos en común.
Además, en las tablas débiles hay claves primarias compuestas por más de un campo. En este caso, también
será una única clave primaria con dos, tres o más campos.
Nota: Tanto los entidades, tablas, atributos y campos, deben tener nombres nemotécnicos (que al leerlo se
entienda el contenido del mismo) de no mas de 10 a 12 caracteres, se pueden escribir indistintamente
mayúsculas y/o minúsculas, pero siempre en forma homogénea (o todos con mayúsculas o todos con
minúsculas, o todos con primera letra mayúscula y el resto minúsculas). No poner caracteres especiales ni
acentos ni espacios, solamente utilizar el _ (subguión) de creerlo conveniente.
Como vimos en las reglas de pasaje de DER a DLR, esto dependerá de varios
factores: la cardinalidad entre las entidades y si tiene atributos
multivalorados, por lo que no hay una relación de 1 a 1 entre entidades y
tablas.
5. Restricciones de integridad
Cuando realizamos el relevamiento y/o la especificación funcional del sistema a realizar, aparecerán algunas
condiciones o reglas que deben cumplir los datos.
Por ejemplo, no puede haber dos alumnos con el mismo RUT, un alumno
debe vivir en alguna comuna que exista, un alumno no puede cursar alguna
EJEMPLO
materia del semestre siguiente hasta no haber aprobado todas las materias
del anterior, no se puede cursar una materia hasta no haber aprobado las
materias correlativas. Por ejemplo, no puede cursar Matemática 2 hasta no
haber aprobado Matemática 1, las notas deben ser entero positivo entre 0 y
7, etc.
Estas validaciones se podrían realizar en las aplicaciones. Por ejemplo, antes de grabar algo en la base de
datos, la aplicación llama a una rutina que valide los datos. Pero, recordemos, que no solo puede haber
varias aplicaciones accediendo a la BD, sino también, estas aplicaciones pueden estar escritas en distintos
lenguajes, o incluso, en distintos entornos (web, mobile, aplicación Windows). Además, a la BD se puede
acceder no solo a través de una aplicación, sino que a través de algún utilitario.
Entonces, si hay varias aplicaciones y utilitarios accediendo, no se puede asegurar que en todos los casos
los datos que se vayan a grabar cumplan con las reglas de las especificaciones. Para estos casos, el SGBD
tiene una serie de herramientas que ayudan a validar que los datos que lleguen a la base cumplan con
dichas reglas. Y, como ya se ha dicho anteriormente, el motor entrega las herramientas, pero está en el
analista, el diseñador y el programador, saber aprovecharlas al máximo.
Con base en lo anterior, podemos decir que será el analista el encargado de definir dónde y cuándo realizar
estas validaciones: podría ser en las aplicaciones, en la base o un mix de ambas.
• Dominio.
①
Su objetivo es que no se graben registros duplicados en las tablas. Es muy
PK importante, en todas las tablas, definir la PK correcta..
② Se da cuando un campo de una tabla es clave primaria en otra. Sirve para poder
FK validar que no se ingresan valores en una tabla, si es que estos no existen en la
tabla de referencia.
Así como en programación hay que asignarle a cada variable el tipo de dato (numérico, carácter, booleano,
fecha, etc.), en los campos de la base de datos pasa lo mismo: tenemos que analizar cada campo y ver a
qué tipo de dato corresponde y, dentro de este, ver en el manual del motor de base de datos (hoy día están
en internet), cuáles son los tipos disponibles. Por ejemplo, si tenemos el campo fecha de nacimiento,
sabemos que es del tipo fecha. Al buscar en el manual, podríamos encontrar que el motor ofrece los tipos:
DATE, DATETIME y TIMESTAMP. Elegiremos entre estos el que mejor se adapte; en este caso, podría ser el
DATE.
• Campos nulos: si el campo puede no tener algún valor, se pone la característica NULL; y si el campo
debe tener un valor, se pone la cláusula NOT NULL.
• Valor por defecto: se le podrá poner a los campos un valor por defecto, por ejemplo, un campo “saldo”
podría tener valor por defecto “cero”. Este valor tendrá efecto al momento de insertar un nuevo registro.
• Cláusula check: si tengo algún campo que tiene una cantidad acotada de valores posibles, en vez de usar
la integridad referencial, se puede utilizar la cláusula Check. Por ejemplo, en el campo “Sexo”, los valores
posibles son M o F; o, en el campo Nota, los valores posibles son del 0 al 7.
que, si estuviera todo junto, sería imposible.
• Campos compuestos: hay algunos tipos de datos que conviene desagregarlos, o sea, dividirlos en
subcampos, para así poder manipular la información de la mejor manera. Por ejemplo, en los campos
Nombre o Dirección es conveniente tener: Nombre1, Nombre2, Apellido Paterno, Apellido Materno. O
en el caso de Dirección, es conveniente tener: Calle, Número, Piso, Departamento, Comuna.
Por ejemplo, si la persona se llama Juan José Pérez Alve, nada impediría
que el usuario cargue los datos al revés: Pérez Alve, Juan José. En este caso,
EJEMPLO
ya estamos ante una mala capacitación del usuario. Además, el uso de
campos compuestos posibilita un mejor acceso a la información. Por
ejemplo, se pueden listar los datos ordenados por Apellido Paterno, algo
que, si estuviera todo junto, sería imposible.
④ Estas son dos herramientas que brindan los SGBD. Pueden tener varias funcionalidades, entre
Triggers ellas, la de poder aplicar restricciones de integridad.
y SP
Triggers
CONCEPTO
Stored Procedures:
CONCEPTO
PREGUNTA
¿Conviene más validar los datos en las aplicaciones o en la BD?
6. Normalización
Cuando seguimos el proceso de diseño, Modelo Ambiental, MER y aplicando las reglas llegamos al MLR.
Finalizamos con distintas tablas, cada una con una serie de campos. Entonces, surge la siguiente pregunta:
¿es correcto que una tabla tenga esos campos? ¿deberían estar en otra tabla?
2. Minimizar la redundancia.
• NomAlu- → NroAlu
• Cod_mat → CodCarrera
Acá podemos ver que hay algunas dependencias que pueden ser obvias, pero otras no tanto.
Recordemos que una BD posee una colección de tablas, cada una con sus campos. En una BD, cada tabla
debe tener un nombre único y, dentro de estas, cada campo también debe tener un nombre único.
1FN 2FN
Ejemplo:
Ejemplo:
ALUMNOS (NroAlu, NomAlu, DomAlu, RUT, Tel1,
Notas (NroAlu, CodMat, Nota, NomMateria)
Tel2, Tel3, Tel4, Tel5)
3FN
Para que una tabla esté en 3FN tiene que estar en 2FN y todos los campos no claves
tienen que ser independientes entre sí, o sea, no puede haber dependencias
funcionales transitivas.
Ejemplo:
SEDES (NroSede, NombreSede, DomicilioSede, CodComuna, NombreComuna)
1FN No transitividad
2FN Completa
3FN No transitividad
Desnormalización
Una vez que se repasen estas 3FN en todas las tablas puede darse el caso que el analista decida poner o
dejar algún campo en una o varias tablas que no cumplan con las FN vistas. Esto no estaría mal.
Recordemos que una BD puede tener redundancia controlada. O sea, si el analista justifica por qué pone un
campo en forma redundante o que no necesitaría estar en esa tabla, lo podría hacer.
¿Una tabla puede estar en 3FN si no está en 2FN? No. Por definición, para que esté en 3FN debe estar en
2FN y, por lo tanto, en 1FN.
Conclusiones
Con base en lo visto en esta unidad, podemos decir que el diseño de una BD no es algo intuitivo, sino que
existen distintas herramientas y reglas que permiten, a partir de una especificación, llegar a la obtención de
las distintas tablas con sus campos, y aplicar las reglas de integridad especificadas.
Tenemos que considerar también que, a pesar de estas herramientas y reglas, el proceso de diseño es algo
muy subjetivo, por lo que es muy probable que, si hay dos personas trabajando sobre el mismo diseño los
resultados sean diferentes, lo que no implica que sean correctos o incorrectos.
Dependerá también de la experiencia del diseñador. Seguramente, nuestros primeros diseños no tendrán la
misma calidad que los que haremos a medida que ganemos experiencia, no solo diseñando, sino viendo, a
su vez, otros modelos diseñados por otros.
Referencias bibliográficas
Silberschatz, A., Korth, H. y Sudarshan, H. (2006). Fundamentos de diseño de bases de datos. McGraw-Hill.
https://biblioteca.msys.cl/umayor/Biblioteca/Book?idBook=1302