sql/schemas/musicbrainz.sql
BEGIN;
CREATE TABLE musicbrainz.gender (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
parent INTEGER, -- references gender.id
child_order INTEGER NOT NULL DEFAULT 0,
description TEXT
);
CREATE TABLE musicbrainz.language (
id SERIAL PRIMARY KEY,
iso_code_2t CHAR(3), -- ISO 639-2 (T)
iso_code_2b CHAR(3), -- ISO 639-2 (B)
iso_code_1 CHAR(2), -- ISO 639
name VARCHAR(100) NOT NULL,
frequency INTEGER NOT NULL DEFAULT 0,
iso_code_3 CHAR(3) -- ISO 639-3
);
CREATE TABLE musicbrainz.area_type ( -- replicate
id SERIAL PRIMARY KEY, -- PK
name VARCHAR(255) NOT NULL,
parent INTEGER, -- references area_type.id
child_order INTEGER NOT NULL DEFAULT 0,
description TEXT
);
CREATE TABLE musicbrainz.area ( -- replicate (verbose)
id SERIAL PRIMARY KEY, -- PK
gid uuid NOT NULL,
name VARCHAR NOT NULL,
type INTEGER, -- references area_type.id
edits_pending INTEGER NOT NULL DEFAULT 0 CHECK (edits_pending >=0),
last_updated TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
begin_date_year SMALLINT,
begin_date_month SMALLINT,
begin_date_day SMALLINT,
end_date_year SMALLINT,
end_date_month SMALLINT,
end_date_day SMALLINT,
ended BOOLEAN NOT NULL DEFAULT FALSE
CHECK (
(
-- If any end date fields are not null, then ended must be true
(end_date_year IS NOT NULL OR
end_date_month IS NOT NULL OR
end_date_day IS NOT NULL) AND
ended = TRUE
) OR (
-- Otherwise, all end date fields must be null
(end_date_year IS NULL AND
end_date_month IS NULL AND
end_date_day IS NULL)
)
),
comment VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE TABLE musicbrainz.l_area_area ( -- replicate
id SERIAL,
link INTEGER NOT NULL, -- references link.id
entity0 INTEGER NOT NULL, -- references area.id
entity1 INTEGER NOT NULL, -- references area.id
edits_pending INTEGER NOT NULL DEFAULT 0 CHECK (edits_pending >= 0),
last_updated TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
link_order INTEGER NOT NULL DEFAULT 0 CHECK (link_order >= 0),
entity0_credit TEXT NOT NULL DEFAULT '',
entity1_credit TEXT NOT NULL DEFAULT ''
);
CREATE TABLE musicbrainz.country_area ( -- replicate (verbose)
area INTEGER PRIMARY KEY -- PK, references area.id
);
COMMIT;