3. Diseñando una BD¶
3.1. ¿De qué va este tema?¶
En este curso aprenderás a:
Analizar los requisitos que debe cumplir tu almacén de datos
Realizar el diseño lógico de un almacén de datos usando el modelo lógico plano y el modelo relacional (Modelo ERE)
Realizar el diseño físico en SQL a partir de un modelo de datos lógico
Se trata de realizar un esquema básico de una base de datos.
3.2. Clases¶
Está organizado en 8 talleres de unas 3 sesiones de clase. En total unas 24 sesiones de clase más tu trabajo en casa.
La dedicación depende del conocimiento previo, motivación y capacidad de aprendizaje del estudiante para esa sesión en concreto.
3.2.1. Diseñando una Base de Datos¶
Buscamos diseñar una base de datos para …
… obtener el esquema (diseño físico) de esa BD implementado en un SGBD concreto
Repasa estas dos clases ya vistas:
3.2.2. Usando el Modelo ER¶
El Modelo E/R :
Herramienta para diseñar el modelo de datos en entidades y sus relaciones
Historia: Peter Chen (1976)
Los elementos:
Entidades (objetos) que …
tienen una serie de características (atributos) con una serie de restricciones
Cada entidad se relaciona con otra (u otras) un mínimo o máximo número de veces (cardinalidad)
Las relaciones:
Las entidades se relacionan entre sí (grado)
Y participan (participación) un mínimo (modality) y máximo número de veces (cardinality).
Algunos conceptos importantes:
Dominio: conjunto de valores de un atributo
Clave Primaria (PK): atributo (uno o varios) que identifican a una entidad de forma única
Clave Ajena (FK): atributo (uno o varios) que dependen de otra entidad (relaciona entidades)
Restricciones: de relación, de atributo, etc
El modelo E/R extendido
Entidades Fuertes y Débiles (por identificación y por existencia)
Atributos en las relaciones
Herencia, Generalización y Especialización
Es la herramienta más usada en la fase de diseño conceptual (no es el objetivo final)
Ejercicios ER
Usando como ejemplo la base de datos hubway.db (desde Ejercicios para usar SQL). Usa papel.
La tabla trips ¿cómo se representaría en el Modelo ER?
id, ¿qué elemento del modelo ER sería?
¿Cual seria el dominio del atributo start_date?
¿Cual sería el dominio del atributo zip_code?
¿Cual sería la clave primaria (PK) de trips?
¿Y de stations? ¿Porqué sería la PK?
¿Qué relación hay entre trips y stations?
¿Cual es la cardinalidad de esa relación?
¿Donde se colocaría la clave ajena y cual es la FK?
¿Cómo pintarías, a tu manera, esa base de datos?
3.2.3. Usar un Diagrama E/R¶
Hay diferentes diagramas (notaciones visuales) para representar el Modelo ER (misma idea, pero diferentes formas de representar los elementos)
IE o Crow’s Foot (pie de gallo)
Bachman
Arrow
El objetivo final, en esta fase del diseño, es que el diagrama sirva de mapa visual para confirmar los requisitos del cliente
Vamos a usar la notación Crow’s Foot (aunque es habitual ver una mezcla de diagramas Chen y Bachman)
Entidades en rectángulos y nombre en la parte superior
Con atributos (y sus nombres) debajo y definiendo las claves (con asterisco)
Con relaciones entre entidades con líneas (con nombre tipo verbo sobre la línea) y
la cardinalidad en cada punto de la línea
Creando un Diagrama ER
Identificamos las Entidades
Definimos los atributos
Identificamos las relaciones básicas entre entidades
Detallamos los atributos especiales (sobre todo PK y FK)
Detallamos la cardinalidad de las relaciones entre entidades
Confirmamos con el cliente si hay algún requisito pendiente
… y seguimos mejorando (difícil realizar un diseño complejo a la primera)
El diagrama es parte del proceso completo (piensa en el objetivo final que es el diseño físico):
Análisis de requisitos: qué quiere el cliente
Lo reflejo en un modelo visual que pueda revisar (mapa visual)
A veces ya uso un modelo lógico (concreto) en el mapa visual (diseño conceptual casi igual al diseño lógico)
Lo implemento en un SGBD concreto (diseño físico)
Crear diagramas ER usando la notación Crow’s Foot
Comienza utilizando el papel, puedes usar alguno de estos ejemplos:
Una BD para Los bocatas de Maryline (ya esbozado en temas anteriores)
Pedidos básicos Amazon: Clientes que hacen pedidos con diferentes productos
Base de datos hubway.db (ya trabajado en las clases anteriores)
3.2.4. Herramientas Gráficas de Diseño¶
Existe mucho software para diseño visual de modelos ER
Diseño: software gráfico para modelado visual
Herramientas CASE: además del diagrama, pueden generar código (casi) listo para usar
Ayudan a llevar el modelo conceptual (Diagrama ER) al diseño físico (generalmente SQL) saltándose el modelo lógico (generalmente relacional)
Hay mucho software (pero mucho, incluido IA) que sirve como ayuda digital para realizar diseños visuales:
Los dos recomendados: Draw.io /draw.io (gratis) o LucidChart (freemium)
Los usados en entorno profesional: Microsoft Visio , Visual Paradigm , etc
Los de andar por casa (pero muy útiles): herramientas grafícas de ofimática (LibreOffice Draw, por ejemplo)
Y bueno, hay más : 6 Visio Alternatives , 8 herramientas …
Formatos para los diagramas:
Imágen: PNG / JPG
Documento: PDF
Propio del software: ideal para colaborar y/o editar.
Una opción (muy) interesante es el uso de Mermaid
Es un editor gráfico del tipo WYSIWYM : Generas el diagrama a partir de código (texto).
Puede generar diferentes tipos de diagramas (por ejemplo diagramas E/R )
Cómo es código fuente, puede evolucionar muy rápido (y ser supervisado con sistemas de CV)
Muy útil para ir desarrollando el modelo poco a poco (sin mucho esfuerzo de diagramación)
Por ejemplo:
erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : "liable for" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : "ordered in"
Uso de herramienta de diagramación ER visual
Si no tienes una de referencia, puedes usar draw.io con la aplicación de escritorio (pero escoge la que te sientas más cómodo).
Instala la herramienta en tu entorno
Configura el almacenamiento (local o en línea)
Es muy sencillo de usar pero puedes echarle un vistazo al tutorial ( Getting Started with Draw.io )
Crea un diagrama básico :
3 o 4 elementos (objetos) en el lienzo (canvas)
Conectados entre sí (con lineas, modificando su estilo y conector inicial y final)
Añadiendo texto
Revisa además la galería de plantillas y elementos
Guarda tu trabajo y editalo (individual o en equipo)
Usa el modelo IE (notación pie de gallo) para digitalizar el diseño de uno de tus modelos ERD de ejemplo (que tienes en papel)
Uso de herramienta online de diagramación ER visual (lucidchart)
Si usas Lucidchart, estos dos tutoriales te enseñan cómo:
Conceptos Básicos del Diagrama ER:
Conceptos más avanzados:
Uso de herramienta de diagramación ER visual (mermaid)
Si quierer probar Mermaid puedes probar con su editor online o hasta usarlo en tu cuenta github
3.2.5. El Modelo Relacional (Diseño Lógico)¶
Entre el diseño conceptual y el físico estaría el diseño lógico
Pero a veces el modelo conceptual ya tiene componentes del diseño lógico
Y el diseño lógico, tiene componentes del diseño físico (por ejemplo en la notación CF)
El diseño físico, en nuestro caso siempre en un archivo SQL (podría estar en un modelo de datos gráfico)
El modelo relacional : (relación = tabla)
Edgar Codd (IBM / 1970). Fuerte base matemática (álgebra y cálculo)
Conceptos:
base de datos relacional: esquema (estructura) e instancias (tuplas organizadas en relaciones)
Una cosa es el modelo relacional y otra el sistema que lo gestiona (SGBD Relacional)
Los SGBD Relacionales: las 12 reglas de Codd
Fundamental
Información
Acceso garantizado
Tratamiento sistemático de valores nulos
Catálogo dinámico
Permite Sublenguajes de datos (DML, DDL, DCL, DTC)
Actualización de vistas
Inserción, Actualización y borrado
Independencia Física de los datos
Independencia Lógica
Independencia de la Integridad
Independencia de la distribución
No subversión
Hay muchos SGBDR: Postgresql, Sqlite, Mysql/Mariadb, Oracle, Microsoft SQL Server, etc
Entendiendo el Modelo relacional
Puedes leer este material para distinguir los conceptos de la siguiente tabla:
¿Cual es la tupla? ¿Cuántas tuplas tiene la relación?
¿Cual sería un atributo?
¿Cual sería un valor?
¿Cual es el grado de la relación? (no confundir con grado de relación entre entidades en la notación ERD)
¿Cual es la cardinalidad?
¿Cual es la tabla?
¿Cual es el encabezado?
¿Cual es el cuerpo (las tuplas)?
¿Cual sería el esquema?
¿Porqué la clave primaria es pasaporte?
3.2.6. En la práctica¶
Diseño Conceptual: obtienes un Diagrama ER
Diseño Lógico: obtienes un esquema lógico (grafo relacional)
Entidad -> Tabla
Atributos -> Campos (ojo a clave primaria)
Relaciones 1:N -> Clave Foránea (en Relación con N)
Relaciones N:N -> Dos Tablas nuevas (e incluyes FK a cada tabla)
Diseño Físico: obtienes una implementación concreta en un SGBD
En la práctica, para centrarnos:
Diseño Conceptual: primera versión con notación Crow’s Foot
Diseño Lógico: segunda versión (más detallada) del modelo con la notación CF
Diseño Físico: pasas a SQL el diagrama CF (que en realidad, ya tiene detalles de diseño físico)
Ejercicios de Diseño Conceptual
Usamos en las últimas clases diferentes Ejercicios de Diseño de Modelo de Datos
3.2.7. Diseño Físico (con SQL)¶
Es muy dependiente del SGBDR (con pequeñas diferencias salvo funcionalidad avanzada)
Una vez que tienes el diseño lógico (grafo relacional o diagrama ERD lógico), el proceso es similar:
Creas la BD sql_create_db (o la eliminas sql_drop_db)
Creas las tablas sql_create_table (o las eliminas sql_drop_table)
nombre de la tabla
nombre de los atributos (campos)
tipos de datos de los atributos (sql_datatypes)
Puedes modificar, una vez creadas:
Tablas: sql_alter o los atributos o las restricciones
Puedes borrar toda la tabla (drop) o sólo el contenido (truncate)
Puedes modificar la estructura
Importante revisar los tipos de datos del SGBDR. En la práctica no hay que complicarse demasiado (salvo para requisitos complejos):
Números
Texto
Fechas
Ejercicios de Diseño Físico
Usamos en las últimas clases diferentes Ejercicios de Diseño de Modelo de Datos
3.2.8. Las restricciones¶
Restricciones: son una herramienta fundamental para garantizar la integridad de los datos
Se pueden diseñar a nivel de atributo (directamente en la definición del atributo) o a nivel de tabla (te permite diseñar restricciones más complejas)
En principio, salvo casos complejos:
definimos las restricciones a nivel de atributo salvo
las claves ajenas (FK)
Definiendo restricciones:
NOT NULL sql_notnull . El valor no puede ser nulo
UNIQUE sql_unique. Todos los valores de ese atributo (en esa columna) tienen que ser diferentes
PRIMARY KEY sql_primarykey. Es la clave primaria (Primary Key) que implica que es único (UNIQUE) y no acepta nulos (NOT NULL)
CHECK sql_check. Permite definir el conjunto de valores (dominio) que puede tener ese atributo
DEFAULT sql_default - Define cual es el valor predeterminado en caso de que no se asigne uno (ideal para evitar valores nulos)
Restricción en relaciones entre tablas. Claves Ajenas (Foreign Key sql_foreignkey)
El valor de ese campo/atributo tiene que ser el de el campo de otra tabla con la que está relacionada
El campo, por lo tanto, es una clave ajena a otra tabla
Mejor definirla de forma explícita a nivel de tabla y darle un nombre
Se define el comportamiento cuando se borra (Acciones sobre la clave ajena)
¿Qué pasa si se borra la clave ajena? ON DELETE
¿Qué pasa si se actualiza el valor? ON UPDATE
Ejercicios de Diseño Físico
Usamos en las últimas clases diferentes Ejercicios de Diseño de Modelo de Datos