[
  {
    "tabla": "Usuario",
    "atributos": [],
    "composicion": [
      {
        "sentencia": "columna",
        "columna": "id",
        "tipo": "INTEGER",
        "detalles": "PRIMARY KEY AUTO_INCREMENT",
        "atributos": [
          "tiene_nombre: Identificador"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "nombre",
        "tipo": "VARCHAR",
        "detalles": "(255) UNIQUE",
        "atributos": [
          "tiene_nombre: Nombre"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "contrasenya",
        "tipo": "VARCHAR",
        "detalles": "(255)",
        "atributos": [
          "tiene_nombre: Contraseña"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "correo",
        "tipo": "VARCHAR",
        "detalles": "(255)",
        "atributos": [
          "tiene_nombre: Correo"
        ]
      }
    ],
    "script": "CREATE TABLE Usuario (\n  id INTEGER PRIMARY KEY AUTO_INCREMENT /*\n    @tiene_nombre: Identificador\n  */,\n  nombre VARCHAR(255) UNIQUE /*\n    @tiene_nombre: Nombre\n  */,\n  contrasenya VARCHAR(255) /*\n    @tiene_nombre: Contraseña\n  */,\n  correo VARCHAR(255) /*\n    @tiene_nombre: Correo\n  */\n);"
  },
  {
    "tabla": "Permiso",
    "atributos": [],
    "composicion": [
      {
        "sentencia": "columna",
        "columna": "id",
        "tipo": "INTEGER",
        "detalles": "PRIMARY KEY AUTO_INCREMENT",
        "atributos": [
          "tiene_nombre: Identificador"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "nombre",
        "tipo": "VARCHAR",
        "detalles": "(255)",
        "atributos": [
          "tiene_nombre: Nombre"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "descripcion",
        "tipo": "VARCHAR",
        "detalles": "(511)",
        "atributos": [
          "tiene_nombre: Descripción"
        ]
      }
    ],
    "script": "\n\nCREATE TABLE Permiso (\n  id INTEGER PRIMARY KEY AUTO_INCREMENT /*\n    @tiene_nombre: Identificador\n  */,\n  nombre VARCHAR(255) /*\n    @tiene_nombre: Nombre\n  */,\n  descripcion VARCHAR(511) /*\n    @tiene_nombre: Descripción\n  */\n);"
  },
  {
    "tabla": "Permiso_de_usuario",
    "atributos": [],
    "composicion": [
      {
        "sentencia": "columna",
        "columna": "id",
        "tipo": "INTEGER",
        "detalles": "PRIMARY KEY AUTO_INCREMENT",
        "atributos": [
          "tiene_nombre: Identificador"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "id_usuario",
        "tipo": "INTEGER",
        "detalles": "",
        "atributos": [
          "tiene_nombre: Identificador de usuario"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "id_permiso",
        "tipo": "INTEGER",
        "detalles": "",
        "atributos": [
          "tiene_nombre: Identificador de permiso"
        ]
      },
      {
        "sentencia": "clave foránea",
        "columna": "id_usuario",
        "tabla_foranea": "Usuario",
        "columna_foranea": "id"
      },
      {
        "sentencia": "clave foránea",
        "columna": "id_permiso",
        "tabla_foranea": "Permiso",
        "columna_foranea": "id"
      }
    ],
    "script": "\n\nCREATE TABLE Permiso_de_usuario (\n  id INTEGER PRIMARY KEY AUTO_INCREMENT /*\n    @tiene_nombre: Identificador\n  */,\n  id_usuario INTEGER /*\n    @tiene_nombre: Identificador de usuario\n  */,\n  id_permiso INTEGER /*\n    @tiene_nombre: Identificador de permiso\n  */,\n  FOREIGN KEY (id_usuario) REFERENCES Usuario (id),\n  FOREIGN KEY (id_permiso) REFERENCES Permiso (id)\n);"
  },
  {
    "tabla": "Sesion",
    "atributos": [],
    "composicion": [
      {
        "sentencia": "columna",
        "columna": "id",
        "tipo": "INTEGER",
        "detalles": "PRIMARY KEY AUTO_INCREMENT",
        "atributos": [
          "tiene_nombre: Identificador"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "token",
        "tipo": "VARCHAR",
        "detalles": "(100)",
        "atributos": [
          "tiene_nombre: Token de sesión"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "id_usuario",
        "tipo": "INTEGER",
        "detalles": "",
        "atributos": [
          "tiene_nombre: Identificador de usuario"
        ]
      },
      {
        "sentencia": "clave foránea",
        "columna": "id_usuario",
        "tabla_foranea": "Usuario",
        "columna_foranea": "id"
      }
    ],
    "script": "\n\nCREATE TABLE Sesion (\n  id INTEGER PRIMARY KEY AUTO_INCREMENT /*\n    @tiene_nombre: Identificador\n  */,\n  token VARCHAR(100) /*\n    @tiene_nombre: Token de sesión\n  */,\n  id_usuario INTEGER /*\n    @tiene_nombre: Identificador de usuario\n  */,\n  FOREIGN KEY (id_usuario) REFERENCES Usuario (id)\n);"
  },
  {
    "tabla": "Fichero",
    "atributos": [],
    "composicion": [
      {
        "sentencia": "columna",
        "columna": "id",
        "tipo": "INTEGER",
        "detalles": "PRIMARY KEY AUTO_INCREMENT",
        "atributos": []
      },
      {
        "sentencia": "columna",
        "columna": "fichero",
        "tipo": "VARCHAR",
        "detalles": "(512) UNIQUE",
        "atributos": [
          "es_tipo: fichero"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "id_fichero_padre",
        "tipo": "INTEGER",
        "detalles": "",
        "atributos": []
      },
      {
        "sentencia": "clave foránea",
        "columna": "id_fichero_padre",
        "tabla_foranea": "Fichero",
        "columna_foranea": "id"
      }
    ],
    "script": "\n\n\nCREATE TABLE Fichero (\n  id INTEGER PRIMARY KEY AUTO_INCREMENT,\n  fichero VARCHAR(512) UNIQUE /*\n    @es_tipo: fichero\n  */,\n  id_fichero_padre INTEGER,\n  FOREIGN KEY (id_fichero_padre) REFERENCES Fichero (id)\n);"
  },
  {
    "tabla": "Blog_post",
    "atributos": [],
    "composicion": [
      {
        "sentencia": "columna",
        "columna": "id",
        "tipo": "INTEGER",
        "detalles": "PRIMARY KEY AUTO_INCREMENT",
        "atributos": []
      },
      {
        "sentencia": "columna",
        "columna": "titulo",
        "tipo": "VARCHAR",
        "detalles": "(255)",
        "atributos": [
          "tipo: texto",
          "descripcion: El título del post.",
          "maximo_de_texto: 255",
          "minimo_de_texto: 1"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "subtitulo",
        "tipo": "VARCHAR",
        "detalles": "(512)",
        "atributos": [
          "tipo: texto",
          "descripcion: El subtítulo del post.",
          "maximo_de_texto: 255",
          "minimo_de_texto: 1"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "contenido",
        "tipo": "TEXT",
        "detalles": "",
        "atributos": [
          "tipo: texto",
          "descripcion: El contenido del post.",
          "maximo_de_texto: 255",
          "minimo_de_texto: 1"
        ]
      },
      {
        "sentencia": "columna",
        "columna": "fecha_de_creacion",
        "tipo": "DATETIME",
        "detalles": "",
        "atributos": [
          "tipo: fecha",
          "descripcion: La fecha de la creación del post.",
          {
            "tipo": "interceptar",
            "eval": " await $interceptors.Columns.fijar_fecha_actual_al_insertar(data, 'fecha_de_creacion', this)"
          }
        ]
      },
      {
        "sentencia": "columna",
        "columna": "fecha_de_actualizacion",
        "tipo": "DATETIME",
        "detalles": "",
        "atributos": [
          "tipo: fecha",
          "descripcion: La fecha de la última actualización del post.",
          {
            "tipo": "interceptar",
            "eval": " await $interceptors.Columns.fijar_fecha_actual_al_actualizar(data, 'fecha_de_actualizacion', this)"
          }
        ]
      }
    ],
    "script": "\n\nCREATE TABLE Blog_post (\n  id INTEGER PRIMARY KEY AUTO_INCREMENT,\n  titulo VARCHAR(255) /*\n    @tipo: texto\n    @descripcion: El título del post.\n    @maximo_de_texto: 255\n    @minimo_de_texto: 1\n  */,\n  subtitulo VARCHAR(512) /*\n    @tipo: texto\n    @descripcion: El subtítulo del post.\n    @maximo_de_texto: 255\n    @minimo_de_texto: 1\n  */,\n  contenido TEXT /*\n    @tipo: texto\n    @descripcion: El contenido del post.\n    @maximo_de_texto: 255\n    @minimo_de_texto: 1\n  */,\n  fecha_de_creacion DATETIME /*\n    @tipo: fecha\n    @descripcion: La fecha de la creación del post.\n    @interceptar: await $interceptors.Columns.fijar_fecha_actual_al_insertar(data, 'fecha_de_creacion', this)\n  */,\n  fecha_de_actualizacion DATETIME /*\n    @tipo: fecha\n    @descripcion: La fecha de la última actualización del post.\n    @interceptar: await $interceptors.Columns.fijar_fecha_actual_al_actualizar(data, 'fecha_de_actualizacion', this)\n  */\n);"
  },
  {
    "tabla": "Blog_comentario_de_post",
    "atributos": [],
    "composicion": [
      {
        "sentencia": "columna",
        "columna": "id",
        "tipo": "INTEGER",
        "detalles": "PRIMARY KEY AUTO_INCREMENT",
        "atributos": []
      },
      {
        "sentencia": "columna",
        "columna": "contenido",
        "tipo": "TEXT",
        "detalles": "",
        "atributos": [
          "tipo: texto largo",
          "descripcion: El contenido en HTML del post.",
          {
            "tipo": "interceptar",
            "eval": " await $interceptors.Columns.solo_html_seguro(data, 'contenido', this)"
          }
        ]
      },
      {
        "sentencia": "columna",
        "columna": "detalles",
        "tipo": "TEXT",
        "detalles": "",
        "atributos": [
          "tipo: texto largo",
          "descripcion: Detalles sobre el post."
        ]
      },
      {
        "sentencia": "columna",
        "columna": "fecha_de_creacion",
        "tipo": "DATETIME",
        "detalles": "",
        "atributos": [
          "tipo: fecha",
          "descripcion: La fecha de la creación del post.",
          {
            "tipo": "interceptar",
            "eval": " await $interceptors.Columns.fijar_fecha_actual_al_insertar(data, 'fecha_de_creacion', this)"
          }
        ]
      }
    ],
    "script": "\n\nCREATE TABLE Blog_comentario_de_post (\n  id INTEGER PRIMARY KEY AUTO_INCREMENT,\n  contenido TEXT /*\n    @tipo: texto largo\n    @descripcion: El contenido en HTML del post.\n    @interceptar: await $interceptors.Columns.solo_html_seguro(data, 'contenido', this)\n  */,\n  detalles TEXT /*\n    @tipo: texto largo\n    @descripcion: Detalles sobre el post.\n  */,\n  fecha_de_creacion DATETIME /*\n    @tipo: fecha\n    @descripcion: La fecha de la creación del post.\n    @interceptar: await $interceptors.Columns.fijar_fecha_actual_al_insertar(data, 'fecha_de_creacion', this)\n  */\n);"
  }
]