diff --git a/sql/base.sql b/sql/base.sql index 54bbd5b..5281f14 100644 --- a/sql/base.sql +++ b/sql/base.sql @@ -22,7 +22,7 @@ INSERT INTO AT_bundesland VALUES (8, 'V', 'Vbg.', 'Vorarlberg'), (9, 'W', NULL, 'Wien'); -INSERT INTO origin VALUES +INSERT INTO wine_origin VALUES ('AUSL', NULL , 'Ausland', NULL), ('EUXX', NULL , 'Verschnitt von mehreren Weinen der EU', NULL), ('OEST', NULL , 'Österreich', NULL), @@ -55,6 +55,9 @@ INSERT INTO origin VALUES ('WLMB', 'WLBL', 'Mittelburgenland', NULL), ('WLEB', 'WLBL', 'Eisenberg', NULL); +INSERT INTO wbgl +(1, 'WLWV', 'Matzner Hügel'); + INSERT INTO wine_variety VALUES ('BL', 'R', 'Blauburger', NULL), ('BB', 'R', 'Blauer Burgunder', 'Blauer Spätburgunder, Blauburgunder, Pinot Noir'), diff --git a/sql/create.sql b/sql/create.sql index 4aec727..91ed5b7 100644 --- a/sql/create.sql +++ b/sql/create.sql @@ -25,6 +25,30 @@ CREATE TABLE currency ( CONSTRAINT pk_currency PRIMARY KEY (code) ) STRICT; +CREATE TABLE postal_dest ( + country TEXT NOT NULL, + id INTEGER NOT NULL, + + CONSTRAINT pk_postal_dest PRIMARY KEY (country, id), + CONSTRAINT fk_postal_dest_country FOREIGN KEY (country) REFERENCES country (alpha2) + ON UPDATE CASCADE + ON DELETE RESTRICT +) STRICT; + +CREATE TABLE bank ( + country TEXT NOT NULL, + id TEXT NOT NULL, + + name_full TEXT NOT NULL, + name TEXT, + name_short TEXT, + + CONSTRAINT pk_bank PRIMARY KEY (country, id), + CONSTRAINT fk_bank_country FOREIGN KEY (country) REFERENCES country (alpha2) + ON UPDATE CASCADE + ON DELETE RESTRICT +) STRICT; + CREATE TABLE wine_variety ( code TEXT NOT NULL CHECK (code REGEXP '[A-Z]{2}'), type TEXT NOT NULL CHECK (type IN ('R', 'W')), @@ -85,72 +109,112 @@ CREATE TABLE AT_ort ( ) STRICT; CREATE TABLE AT_plz ( - plz INTEGER NOT NULL CHECK (plz >= 1000 AND plz <= 9999), - okz INTEGER NOT NULL, - id INTEGER NOT NULL GENERATED ALWAYS AS (plz * 100000 + okz) STORED, + plz INTEGER NOT NULL CHECK (plz >= 1000 AND plz <= 9999), + okz INTEGER NOT NULL, - dest TEXT NOT NULL, + country TEXT NOT NULL GENERATED ALWAYS AS ('AT') STORED, + id INTEGER NOT NULL GENERATED ALWAYS AS (plz * 100000 + okz) STORED, + + dest TEXT NOT NULL, CONSTRAINT pk_AT_plz PRIMARY KEY (plz, okz), CONSTRAINT sk_AT_plz_id UNIQUE (id), CONSTRAINT fk_AT_plz_AT_ort FOREIGN KEY (okz) REFERENCES AT_ort (okz) ON UPDATE CASCADE - ON DELETE RESTRICT + ON DELETE RESTRICT, + CONSTRAINT fk_AT_plz_postal_dest FOREIGN KEY (country, id) REFERENCES postal_dest (country, id) + ON UPDATE CASCADE + ON DELETE CASCADE ) STRICT; -CREATE TABLE origin ( +CREATE TRIGGER t_AT_plz_i + AFTER INSERT ON AT_plz FOR EACH ROW +BEGIN + INSERT INTO postal_dest (country, id) VALUES (new.country, new.id); +END; + +CREATE TRIGGER t_AT_plz_u + AFTER UPDATE OF id ON AT_plz FOR EACH ROW +BEGIN + UPDATE postal_dest SET country = new.country, id = new.id WHERE (country, id) = (old.country, old.id); +END; + +CREATE TRIGGER t_AT_plz_d + AFTER DELETE ON AT_plz FOR EACH ROW +BEGIN + DELETE FROM postal_dest WHERE (country, id) = (old.country, old.id); +END; + +CREATE TABLE AT_bank ( + blz INTEGER NOT NULL, + fbnr TEXT, + + country TEXT NOT NULL GENERATED ALWAYS AS ('AT') STORED, + + CONSTRAINT pk_AT_bank PRIMARY KEY (blz), + CONSTRAINT fk_AT_bank_bank FOREIGN KEY (country, blz) REFERENCES bank (country, id) + ON UPDATE CASCADE + ON DELETE CASCADE +) STRICT; + +CREATE TABLE wine_origin ( code TEXT NOT NULL CHECK (code REGEXP '[A-Z]{4}'), parent_code TEXT, name TEXT NOT NULL, land_id INTEGER, - CONSTRAINT pk_origin PRIMARY KEY (code), - CONSTRAINT sk_origin_name UNIQUE (name), - CONSTRAINT fk_origin_origin FOREIGN KEY (parent_code) REFERENCES origin (code) + CONSTRAINT pk_wine_origin PRIMARY KEY (code), + CONSTRAINT sk_wine_origin_name UNIQUE (name), + CONSTRAINT fk_wine_origin_wine_origin FOREIGN KEY (parent_code) REFERENCES wine_origin (code) ON UPDATE CASCADE ON DELETE RESTRICT, - CONSTRAINT fk_origin_AT_bundesland FOREIGN KEY (land_id) REFERENCES AT_bundesland (id) + CONSTRAINT fk_wine_origin_AT_bundesland FOREIGN KEY (land_id) REFERENCES AT_bundesland (id) ON UPDATE CASCADE ON DELETE RESTRICT ) STRICT; --- Weinbauland ---CREATE TABLE wbl() STRICT; - --- Weinbauregion ---CREATE TABLE wbr() STRICT; - --- Generisches Weinbaugebiet ---CREATE TABLE wbgg() STRICT; - --- Spezifisches Weinbaugebeit ---CREATE TABLE wbgs() STRICT; - -- Großlage -CREATE TABLE wbgl ( - id INTEGER NOT NULL, +CREATE TABLE wb_gl ( + id INTEGER NOT NULL, + origin TEXT NOT NULL, - CONSTRAINT pk_wbgl PRIMARY KEY (id) + name TEXT NOT NULL, + + CONSTRAINT pk_wb_gl PRIMARY KEY (id), + CONSTRAINT fk_wb_gl_wine_origin FOREIGN KEY (origin) REFERENCES wine_origin (code) + ON UPDATE CASCADE + ON DELETE RESTRICT ) STRICT; -- Weinbaugemeinde -CREATE TABLE wbgem ( - id INTEGER NOT NULL, +CREATE TABLE wb_gem ( + id INTEGER NOT NULL, + origin TEXT NOT NULL, + gl_id INTEGER, - CONSTRAINT pk_wbgem PRIMARY KEY (id) + CONSTRAINT pk_wb_gem PRIMARY KEY (id), + CONSTRAINT fk_wb_gem_AT_gem FOREIGN KEY (id) REFERENCES AT_gem (gkz) + ON UPDATE CASCADE + ON DELETE RESTRICT, + CONSTRAINT fk_wb_gem_wine_origin FOREIGN KEY (origin) REFERENCES wine_origin (code) + ON UPDATE CASCADE + ON DELETE RESTRICT, + CONSTRAINT fk_wb_gem_wb_gl FOREIGN KEY (gl_id) REFERENCES wb_gl (id) + ON UPDATE CASCADE + ON DELETE RESTRICT ) STRICT; -- Weinbaukatastralgemeinde -CREATE TABLE wbkg ( +CREATE TABLE wb_kg ( id INTEGER NOT NULL, - CONSTRAINT pk_wbkg PRIMARY KEY (id) + CONSTRAINT pk_wb_kg PRIMARY KEY (id) ) STRICT; -- Ried -CREATE TABLE wbrd ( +CREATE TABLE wb_rd ( id INTEGER NOT NULL, - CONSTRAINT pk_wbrd PRIMARY KEY (id) + CONSTRAINT pk_wb_rd PRIMARY KEY (id) ) STRICT;