feat(db): RESTRICT vocabulary deletes; non-empty label/lang constraints

This commit is contained in:
2026-06-02 08:46:34 +02:00
parent 93d54d7783
commit cc1fbf5b7d
@@ -6,15 +6,15 @@ CREATE TABLE vocabulary (
CREATE TABLE term ( CREATE TABLE term (
id UUID PRIMARY KEY, id UUID PRIMARY KEY,
vocabulary_id UUID NOT NULL REFERENCES vocabulary (id) ON DELETE CASCADE, vocabulary_id UUID NOT NULL REFERENCES vocabulary (id) ON DELETE RESTRICT,
external_uri TEXT -- e.g. Getty AAT / KulturNav / Wikidata URI external_uri TEXT -- e.g. Getty AAT / KulturNav / Wikidata URI
); );
CREATE INDEX term_vocabulary_idx ON term (vocabulary_id); CREATE INDEX term_vocabulary_idx ON term (vocabulary_id);
CREATE TABLE term_label ( CREATE TABLE term_label (
term_id UUID NOT NULL REFERENCES term (id) ON DELETE CASCADE, term_id UUID NOT NULL REFERENCES term (id) ON DELETE CASCADE,
lang TEXT NOT NULL, -- BCP-47, e.g. 'sv', 'en' lang TEXT NOT NULL CHECK (lang <> ''),
label TEXT NOT NULL, label TEXT NOT NULL CHECK (label <> ''),
PRIMARY KEY (term_id, lang) PRIMARY KEY (term_id, lang)
); );
@@ -28,7 +28,7 @@ CREATE INDEX authority_kind_idx ON authority (kind);
CREATE TABLE authority_label ( CREATE TABLE authority_label (
authority_id UUID NOT NULL REFERENCES authority (id) ON DELETE CASCADE, authority_id UUID NOT NULL REFERENCES authority (id) ON DELETE CASCADE,
lang TEXT NOT NULL, lang TEXT NOT NULL CHECK (lang <> ''),
label TEXT NOT NULL, label TEXT NOT NULL CHECK (label <> ''),
PRIMARY KEY (authority_id, lang) PRIMARY KEY (authority_id, lang)
); );