2.7 ERD
Los diagramas ERD (Entity-Relationship Diagrams) son una herramienta visual para representar la estructura de una base de datos. Muestran las entidades (tablas) y las relaciones entre ellas, lo que ayuda a entender cómo se organizan los datos.
Entidades y Atributos
Las entidades son los objetos o conceptos que queremos modelar en nuestra base de datos. Cada entidad tiene atributos, que son las propiedades o características de esa entidad. Por ejemplo, una entidad "Usuario" podría tener atributos como "ID", "Nombre", "Email", etc. La entidad además debe mostrar que tipo de dato es cada atributo, como int
, string
, etc:
Cada entidad se representa como un rectángulo en el diagrama ERD, y los atributos se listan dentro del rectángulo en pares clave-valor.
Relaciones
Las relaciones entre entidades se componen de:
- La cardinalidad de la primera entidad con respecto a la segunda.
- Si una relación confiere identidad en una entidad hija.
- La cardinalidad de la segunda entidad con respecto a la primera.
La cardinalidad es una propiedad que describe cuantos elementos de una entidad pueden estar relacionados con la entidad en cuestion.
Las cardinalidades más comunes son:
- Cero o uno: Una entidad puede o no estar relacionada con otra entidad.
- Exactamente uno: Una entidad está relacionada con exactamente una instancia de otra entidad.
- Cero o mas: Una entidad puede estar relacionada con cero o más instancias de otra entidad.
- Uno o mas: Una entidad está relacionada con una o más instancias de otra entidad.
Podemos representar estas relaciones en Mermaid con la siguiente sintaxis:
Valor (izquierda) | Valor (derecha) | Descripción |
---|---|---|
|o |
o| |
Cero o uno |
|| |
|| |
Exactamente uno |
}o |
o{ |
Cero o más |
}| |
|{ |
Uno o más |
Identificadores
Las relaciones pueden ser identificadoras o no identificadoras. Una relación identificadora significa que la entidad hija depende de la entidad padre para su identidad. En Mermaid, esto se representa con una línea continua entre las entidades.
Si la relación no es identificadora significa que la entidad hija puede existir independientemente de la entidad padre. En Mermaid, esto se representa con una línea discontinua.
erDiagram
Usuario {
int ID
string Nombre
string Email
}
Pedido {
int ID
date Fecha
}
Usuario ||--o{ Pedido : realiza
En este ejemplo, la entidad "Usuario" tiene una relación de uno a muchos con la entidad "Pedido", lo que significa que un usuario puede realizar muchos pedidos, pero cada pedido es realizado por un solo usuario.
Como un pedido no puede existir sin un usuario, la relación es identificadora, lo que significa que el pedido depende del usuario para su identidad.
Convertir de ERD al modelo relacional
Para convertir un diagrama ERD a un modelo relacional, seguimos estos pasos:
- Identificar las entidades: Cada entidad en el diagrama ERD se convierte en una tabla en el modelo relacional.
- Definir los atributos: Los atributos de cada entidad se convierten en columnas de la tabla correspondiente.
- Establecer las claves primarias: Cada tabla debe tener una clave primaria que identifique de manera única cada fila. Generalmente, esto es un atributo que no se repite, como un ID.
- Definir las relaciones: Las relaciones entre las entidades se convierten en claves foráneas en las tablas. Una clave foránea es un campo en una tabla que se refiere a la clave primaria de otra tabla, estableciendo así una relación entre ellas.
- Normalización: Asegurarse de que el modelo relacional cumple con las reglas de normalización para evitar redundancias y asegurar la integridad de los datos.
- Crear las tablas: Finalmente, se crean las tablas en la base de datos utilizando el modelo relacional definido.
Ejemplo de conversión
Supongamos que tenemos el siguiente diagrama ERD:
erDiagram
Empleado {
int ID
string Nombre
string Email
int DepartamentoID
}
Departamento {
int ID
string Nombre
}
Empleado ||--o{ Departamento : pertenece_a
Vamos paso a paso:
- Identificar las entidades: Tenemos dos entidades:
Empleado
yDepartamento
. Estas serán nuestras tablas. - Definir los atributos:
- Tabla
Empleado
: columnasID
,Nombre
,Email
,DepartamentoID
. - Tabla
Departamento
: columnasID
,Nombre
. - Establecer las claves primarias:
Empleado.ID
yDepartamento.ID
serán las claves primarias de sus respectivas tablas.DepartamentoID
en la tablaEmpleado
será una clave foránea que referencia aDepartamento.ID
.- La tabla
Empleado
tendrá una clave foráneaDepartamentoID
que referencia a la clave primariaID
de la tablaDepartamento
. - La relación es identificadora, ya que un empleado pertenece a un departamento.
- La tabla
Empleado
tendrá una clave foráneaDepartamentoID
que referencia a la clave primariaID
de la tablaDepartamento
. - La relación es identificadora, ya que un empleado pertenece a un departamento.
- Definir las relaciones: La relación entre
Empleado
yDepartamento
se establece mediante la clave foráneaDepartamentoID
en la tablaEmpleado
. - Normalización: Asegurarse de que no hay redundancias
- Crear las tablas: Finalmente, las tablas se crearían en SQL de la siguiente manera:
```sql CREATE TABLE Departamento ( ID INTEGER PRIMARY KEY, Nombre TEXT NOT NULL );
CREATE TABLE Empleado ( ID INTEGER PRIMARY KEY, Nombre TEXT NOT NULL, Email TEXT NOT NULL, DepartamentoID INTEGER, FOREIGN KEY (DepartamentoID) REFERENCES Departamento(ID) );