En los ejemplos de este capítulo se crea un sistema para gestionar artículos (como por ejemplo los artículos de un blog). A continuación se muestra el esquema de la base de datos, que está formado por cinco tablas: articulo
, autor
, categoria
, etiqueta
y articulo_etiqueta
.
Listado 4-1 - Esquema de la base de datos
# config/schema.yml
propel:
articulo:
id: ~
titulo: { type: varchar(255), required: true }
slug: { type: varchar(255), required: true }
contenido: longvarchar
estado: varchar(255)
autor_id: { type: integer, required: true, foreignTable: autor, foreignReference: id, onDelete: cascade }
categoria_id: { type: integer, required: false, foreignTable: categoria, foreignReference: id, onDelete: setnull }
fecha_publicacion: timestamp
created_at: ~
updated_at: ~
_uniques:
unique_slug: [slug]
autor:
id: ~
nombre: varchar(20)
apellidos: varchar(20)
email: { type: varchar(255), required: true }
activo: boolean
categoria:
id: ~
nombre: { type: varchar(255), required: true }
etiqueta:
id: ~
nombre: { type: varchar(255), required: true }
articulo_etiqueta:
articulo_id: { type: integer, foreignTable: articulo, foreignReference: id, primaryKey: true, onDelete: cascade }
etiqueta_id: { type: integer, foreignTable: etiqueta, foreignReference: id, primaryKey: true, onDelete: cascade }
Las relaciones entre las tablas son las siguientes:
- Relación 1-n entre las tablas
articulo
yautor
: cada artículo está escrito por uno y sólo un autor. - Relación 1-n entre las tablas
articulo
ycategoria
: cada artículo está asociado a cero o una categoría. - Relación n-n entre las tablas
articulo
yetiqueta
.