Skip to content

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:

erDiagram
    Usuario {
        int ID
        string Nombre
        string Email
    }

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:

  1. Identificar las entidades: Cada entidad en el diagrama ERD se convierte en una tabla en el modelo relacional.
  2. Definir los atributos: Los atributos de cada entidad se convierten en columnas de la tabla correspondiente.
  3. 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.
  4. 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.
  5. 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.
  6. 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:

  1. Identificar las entidades: Tenemos dos entidades: Empleado y Departamento. Estas serán nuestras tablas.
  2. Definir los atributos:
  3. Tabla Empleado: columnas ID, Nombre, Email, DepartamentoID.
  4. Tabla Departamento: columnas ID, Nombre.
  5. Establecer las claves primarias:
    • Empleado.ID y Departamento.ID serán las claves primarias de sus respectivas tablas.
    • DepartamentoID en la tabla Empleado será una clave foránea que referencia a Departamento.ID.
    • La tabla Empleado tendrá una clave foránea DepartamentoID que referencia a la clave primaria ID de la tabla Departamento.
    • La relación es identificadora, ya que un empleado pertenece a un departamento.
    • La tabla Empleado tendrá una clave foránea DepartamentoID que referencia a la clave primaria ID de la tabla Departamento.
    • La relación es identificadora, ya que un empleado pertenece a un departamento.
  6. Definir las relaciones: La relación entre Empleado y Departamento se establece mediante la clave foránea DepartamentoID en la tabla Empleado.
  7. Normalización: Asegurarse de que no hay redundancias
  8. 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) );