Files
2026-06-02 10:16:30 +02:00

24 lines
1.2 KiB
SQL

-- Registry of flexible field definitions (the "schema of schemas").
CREATE TABLE field_definition (
id UUID PRIMARY KEY,
key TEXT NOT NULL UNIQUE CHECK (key <> ''),
data_type TEXT NOT NULL CHECK (data_type IN
('text', 'localized_text', 'integer', 'date', 'boolean', 'term', 'authority')),
vocabulary_id UUID REFERENCES vocabulary (id) ON DELETE RESTRICT,
authority_kind TEXT CHECK (authority_kind IN ('person', 'organisation', 'place')),
required BOOLEAN NOT NULL DEFAULT false,
group_key TEXT CHECK (group_key <> ''),
-- A term field must name a vocabulary; any other type must not.
CONSTRAINT term_has_vocabulary CHECK ((data_type = 'term') = (vocabulary_id IS NOT NULL)),
-- authority_kind is only meaningful for authority fields.
CONSTRAINT authority_kind_only_for_authority
CHECK (authority_kind IS NULL OR data_type = 'authority')
);
CREATE TABLE field_definition_label (
field_definition_id UUID NOT NULL REFERENCES field_definition (id) ON DELETE CASCADE,
lang TEXT NOT NULL CHECK (lang <> ''),
label TEXT NOT NULL CHECK (label <> ''),
PRIMARY KEY (field_definition_id, lang)
);