El modelo relacional organiza los datos en tablas: cada tabla tiene columnas (los atributos) y filas (cada registro). El diseño parte del diagrama de clases de Entornos: las entidades y sus relaciones se traducen a tablas.
@startuml
class Book {
- id: long
- title: String
- stockQuantity: int
}
@enduml
CREATE TABLE book (
id BIGINT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
stock_quantity INT NOT NULL DEFAULT 0
);
| Concepto del diagrama | Concepto relacional |
|---|---|
| Clase (entidad) | Tabla |
| Atributo | Columna |
| Identificador | Clave primaria |
| Instancia (objeto) | Fila |
La clave primaria identifica cada fila de forma única. Lo habitual es un identificador numérico autogenerado:
CREATE TABLE book (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL
);
Una editorial publica muchos libros; cada libro pertenece a una editorial. La tabla del lado *muchos* lleva la clave foránea:
CREATE TABLE publisher (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE book (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
publisher_id BIGINT,
FOREIGN KEY (publisher_id) REFERENCES publisher (id)
);
@startuml class Publisher class Book Publisher "1" -- "0..*" Book @enduml
Si un libro debe tener editorial, la columna es NOT NULL; si es opcional, admite NULL.
Un libro puede tener varios autores y un autor varios libros. Se resuelve con una tabla de unión que contiene las dos claves foráneas:
CREATE TABLE author (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE book_author (
book_id BIGINT NOT NULL,
author_id BIGINT NOT NULL,
PRIMARY KEY (book_id, author_id),
FOREIGN KEY (book_id) REFERENCES book (id),
FOREIGN KEY (author_id) REFERENCES author (id)
);
Cada fila de una tabla corresponde a exactamente una fila de otra. La clave foránea se declara con UNIQUE:
CREATE TABLE book_detail (
book_id BIGINT PRIMARY KEY,
synopsis TEXT NOT NULL,
FOREIGN KEY (book_id) REFERENCES book (id)
);
En el diagrama, una composición (por ejemplo Order *– OrderLine) se traduce como 1:N: la parte vive en su propia tabla con clave foránea. Un atributo que es una colección simple (etiquetas, teléfonos) suele convertirse también en tabla.
| Relación en el diagrama | En el modelo relacional |
|---|---|
| Asociación 1:N | Clave foránea en el lado N |
| Asociación N:M | Tabla de unión |
| Composición | Tabla propia con clave foránea obligatoria |
| Agregación | Tabla propia con clave foránea |