Claves foráneas en relaciones de muchos a muchos.

Contexto

Estamos construyendo un blog para una introducción. a las bases de datos del proyecto del curso.

En nuestro blog, queremos poder configurarLabels enPosts. losLabels no pueden existir por sí mismos, solo lo hacen si están relacionados con unPosts. De esta manera,Labels que no son utilizados por ningunaPosts No debe permanecer en la base de datos.

Más de unoLabel puede pertenecer a una solaPost, y mas de una solaPost puede usar unLabel.

Estamos utilizando tanto SQLite3 (localmente / pruebas) como PostgreSQL (implementación).

Implementación

Aquí está el SQL (sabor de SQLite3) que usamos para crear esas dos tablas, junto con la tabla de relaciones:

Mensajes
CREATE TABLE IF NOT EXISTS Posts(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   authorId INTEGER,
   title VARCHAR(255),
   content TEXT,
   imageURL VARCHAR(255),
   date DATETIME,
   FOREIGN KEY (authorId) REFERENCES Authors(id) ON DELETE SET NULL
)
Etiquetas
CREATE TABLE IF NOT EXISTS Labels(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name VARCHAR(255) UNIQUE,
   -- This is not working:
   FOREIGN KEY (id) REFERENCES LabelPosts(labelId) ON DELETE CASCADE 
)

LabelPosts (relación entrePost [1 .. *] - *Label)

CREATE TABLE IF NOT EXISTS LabelPosts(
    postId INTEGER,
    labelId INTEGER,
    PRIMARY KEY (postId, labelId),
    FOREIGN KEY (postId) REFERENCES Posts(id) ON DELETE CASCADE
)
Problema

Utilizando SQLite3,Labels no se eliminan de la base de datos cuando elimino todas las referencias a ella de laLabelPosts mesa. Creo que por la razón dada por Postgres, a pesar de que SQLite acepta la tabla sin previo aviso.

PostgreSQL se queja de quelabelId no es único dentroLabelPosts, lo cual es cierto y también es necesario, ya que es de muchos a muchos:

pq: S: "ERROR" R: "transformFkeyCheckAttrs" L: "6511" C: "42830" F: "tablecmds.c"
M: "no hay una restricción única que coincida con las claves dadas para la tabla a la que se hace referencia \" labelposts \ ""

Así que entiendo que estoy haciendo mi restricción mal. Sin embargo no sé cómo hacerlo correctamente.

Respuestas a la pregunta(2)

Su respuesta a la pregunta