Files
elwig-misc/sql/base.sql

73 lines
2.3 KiB
SQL

CREATE TABLE country (
alpha2 TEXT NOT NULL CHECK(LENGTH(alpha2) = 2),
alpha3 TEXT NOT NULL CHECK(LENGTH(alpha3) = 3),
num INTEGER NOT NULL CHECK(num >= 0),
name TEXT NOT NULL,
is_visible INTEGER NOT NULL CHECK(is_visible = TRUE OR is_visible = FALSE) DEFAULT TRUE,
CONSTRAINT pk_country PRIMARY KEY (alpha2),
CONSTRAINT sk_country_alpha3 UNIQUE (alpha3),
CONSTRAINT sk_country_numeric UNIQUE (num),
CONSTRAINT sk_country_name UNIQUE (name)
) STRICT;
CREATE TABLE AT_bundesland (
id INTEGER NOT NULL CHECK(id >= 0),
short1 TEXT NOT NULL,
short2 TEXT,
name TEXT NOT NULL,
CONSTRAINT pk_AT_bundesland PRIMARY KEY (id),
CONSTRAINT sk_AT_bundesland_short1 UNIQUE (short1),
CONSTRAINT sk_AT_bundesland_short2 UNIQUE (short2),
CONSTRAINT sk_AT_bundesland_name UNIQUE (name)
) STRICT;
CREATE TABLE AT_gemeinde (
gkz INTEGER NOT NULL CHECK(gkz >= 10000 AND gkz <= 99999),
land_id INTEGER NOT NULL CHECK(land_id = gkz / 10000),
name TEXT NOT NULL,
CONSTRAINT pk_AT_gemeinde PRIMARY KEY (gkz),
CONSTRAINT fk_AT_gemeinde_AT_bundesland FOREIGN KEY (land_id) REFERENCES AT_bundesland (id)
) STRICT;
CREATE TABLE AT_ort (
okz INTEGER NOT NULL CHECK(okz > 0),
gkz INTEGER NOT NULL,
name TEXT NOT NULL,
CONSTRAINT pk_AT_ort PRIMARY KEY (okz),
CONSTRAINT fk_AT_ort_AT_gemeinde FOREIGN KEY (gkz) REFERENCES AT_gemeinde (gkz)
) STRICT;
CREATE TABLE AT_plz (
plz INTEGER NOT NULL CHECK(plz >= 1000 AND plz <= 9999),
okz INTEGER NOT NULL,
name TEXT NOT NULL,
CONSTRAINT pk_AT_plz PRIMARY KEY (plz, okz),
CONSTRAINT fk_AT_plz_AT_ort FOREIGN KEY (okz) REFERENCES AT_ort (okz)
) STRICT;
INSERT INTO country VALUES
('AT', 'AUT', 40, 'Österreich', TRUE),
('DE', 'DEU', 276, 'Deutschland', FALSE),
('CZ', 'CZE', 203, 'Tschechien', FALSE),
('HU', 'HUN', 348, 'Ungarn', FALSE),
('SK', 'SVK', 703, 'Slowakei', FALSE);
INSERT INTO AT_bundesland VALUES
(1, 'B', 'Bgld.', 'Burgenland'),
(2, 'K', 'Ktn.', 'Kärnten'),
(3, 'N', '', 'Niederösterreich'),
(4, 'O', '', 'Oberösterreich'),
(5, 'S', 'Sbg.', 'Salzburg'),
(6, 'St', 'Stmk.', 'Steiermark'),
(7, 'T', NULL, 'Tirol'),
(8, 'V', 'Vbg.', 'Vorarlberg'),
(9, 'W', NULL, 'Wien');