Ver índice de contenidos del libro

4.1. Antes de comenzar

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 y autor: cada artículo está escrito por uno y sólo un autor.
  • Relación 1-n entre las tablas articulo y categoria: cada artículo está asociado a cero o una categoría.
  • Relación n-n entre las tablas articulo y etiqueta.