From e73ac856822270b7bbabd082eb9ec5d2f86ba17c Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Sat, 4 Feb 2023 17:07:37 +0100 Subject: [PATCH] Update db schema, Weinbaugemeinden --- sql/plz-fix.sql | 2 + sql/sample.sql | 131 ++++++++++++++++++++++++++ sql/{create.sql => v01/01.create.sql} | 73 ++++++-------- sql/{view.sql => v01/02.view.sql} | 0 sql/{base.sql => v01/03.base.sql} | 12 ++- sqlite.sh | 9 ++ 6 files changed, 180 insertions(+), 47 deletions(-) create mode 100644 sql/sample.sql rename sql/{create.sql => v01/01.create.sql} (83%) rename sql/{view.sql => v01/02.view.sql} (100%) rename sql/{base.sql => v01/03.base.sql} (92%) create mode 100755 sqlite.sh diff --git a/sql/plz-fix.sql b/sql/plz-fix.sql index c991c9e..dcc5a8a 100644 --- a/sql/plz-fix.sql +++ b/sql/plz-fix.sql @@ -5,3 +5,5 @@ INSERT INTO AT_plz VALUES (2134, 5115, 'Staaz-Kautendorf'); UPDATE AT_ort SET name = 'Etzmannsdorf am Kamp' WHERE okz = 3938; + +DELETE FROM AT_plz WHERE (plz, okz) = (2231, 5011); diff --git a/sql/sample.sql b/sql/sample.sql new file mode 100644 index 0000000..98ea982 --- /dev/null +++ b/sql/sample.sql @@ -0,0 +1,131 @@ + +INSERT INTO wb_gl VALUES +(1, 'WLWV', 'Matzner Hügel'), +(2, 'WLWV', 'Wolkersdorfer Hochleiten'), +(3, 'WLWV', 'Falkensteiner Hügelland'); + +-- Wien +-- Gemeinde Wien +INSERT INTO wb_gem VALUES +(90001, 'WIEN'); + +-- Weinviertel +-- Bezirke Mistelbach (316), Gänserndorf (308), Korneuburg (312), Hollabrunn (310), Horn (311) +INSERT INTO wb_gem +SELECT gkz, 'WLWV' +FROM AT_gem +WHERE gkz / 100 IN (308, 310, 311, 312, 316); + +-- Carnuntum +-- Bezirk Bruck/Leitha (307) +INSERT INTO wb_gem +SELECT gkz, 'WLCA' +FROM AT_gem +WHERE gkz / 100 IN (307); + +-- Thermenregion +-- Bezirke Mödling (317), Baden (306), Wr. Neustadt (323), Wr. Neustadt (304), Neunkirchen (318) +INSERT INTO wb_gem +SELECT gkz, 'WLTH' +FROM AT_gem +WHERE gkz / 100 IN (304, 306, 317, 318, 323); + +-- Traisental +-- Bezirke St. Pölten Land (319), St. Pölten (302) +INSERT INTO wb_gem +SELECT gkz, 'WLTT' +FROM AT_gem +WHERE gkz / 100 IN (302, 319); + +-- Wagram +-- Bezirk Tulln (321) +INSERT INTO wb_gem +SELECT gkz, 'WLWG' +FROM AT_gem +WHERE gkz / 100 IN (321); + +-- Kamptal +-- Gemeinden Grafenegg (31308), Straß im Straßertale (31346), Schönberg am Kamp (31355), Langenlois (31322), +-- Hadersdorf-Kammern (31315), Lengenfeld (31323) +INSERT INTO wb_gem +SELECT gkz, 'WLKA' +FROM AT_gem +WHERE gkz IN (31308, 31346, 31355, 31322, 31315, 31323); + +-- Kremstal +-- Gemeinden Krems an der Donau (30101), Stratzing (31347), Droß (31356), Senftenberg (31343), Paudorf (31333), +-- Furth bei Göttweig (31309) +INSERT INTO wb_gem +SELECT gkz, 'WLKT' +FROM AT_gem +WHERE gkz IN (30101, 31347, 31356, 31343, 31333, 31309); + +-- Wachau +-- Gemeinden Mautern an der Donau (31327), Bergern im Dunkelsteinerwald (31303), Dürnstein (31304), +-- Rossatz-Arnsdorf (31338), Aggsbach (31301), Spitz (31344), Mühldorf (31330), +-- Weißenkirchen in der Wachau (31351) +INSERT INTO wb_gem +SELECT gkz, 'WLWA' +FROM AT_gem +WHERE gkz IN (31327, 31303, 31304, 31338, 31301, 31344, 31330, 31351); + +-- Neusiedlersee +-- Bezirk Neusiedl am See (107) +INSERT INTO wb_gem +SELECT gkz, 'WLNS' +FROM AT_gem +WHERE gkz / 100 IN (107); + +-- Leithaberg +-- Bezirke Eisenstadt Umgebung (103), Eisenstadt (101), Rust (102) +INSERT INTO wb_gem +SELECT gkz, 'WLLB' +FROM AT_gem +WHERE gkz / 100 IN (101, 102, 103); + +-- Rosalia +-- Bezirk Mattersburg (106) +INSERT INTO wb_gem +SELECT gkz, 'WLRO' +FROM AT_gem +WHERE gkz / 100 IN (106); + +-- Mittelburgenland +-- Bezirk Oberpullendorf (106) +INSERT INTO wb_gem +SELECT gkz, 'WLMB' +FROM AT_gem +WHERE gkz / 100 IN (108); + +-- Eisenberg +-- Bezirke Oberwart (109), Güssing (104), Jennersdorf (105) +INSERT INTO wb_gem +SELECT gkz, 'WLEB' +FROM AT_gem +WHERE gkz / 100 IN (104, 105, 109); + +INSERT INTO wb_kg +SELECT k.kgnr, 1 +FROM wb_gem wg + LEFT JOIN AT_gem g ON g.gkz = wg.gkz + LEFT JOIN AT_kg k ON k.gkz = g.gkz +WHERE origin = 'WLWV' AND g.gkz / 100 IN (308, 316) AND k.name IN + ('Angern', 'Großschweinbarth', 'Mannersdorf', 'Prottes', 'Stillfried', 'Grub an der March', 'Auersthal', 'Dörfles', + 'Ebenthal', 'Hohenruppersdorf', 'Kleinharras', 'Kollnbrunn', 'Matzen', 'Ollersdorf', 'Pirawarth', 'Raggendorf', + 'Reyersdorf', 'Schönkirchen', 'Spannberg', 'Stripfing', 'Tallesbrunn', 'Götzendorf', 'Velm', 'Waidendorf', + 'Dürnkrut', 'Baumgarten an der March', 'Gänserndorf', 'Weikendorf'); + +INSERT INTO wb_kg +SELECT k.kgnr, 2 +FROM wb_gem wg + LEFT JOIN AT_gem g ON g.gkz = wg.gkz + LEFT JOIN AT_kg k ON k.gkz = g.gkz +WHERE origin = 'WLWV' AND g.gkz / 100 IN (308, 316) AND k.name IN ('Bockfließ', 'Großengersdorf'); + +INSERT INTO wb_kg +SELECT k.kgnr, 3 +FROM wb_gem wg + LEFT JOIN AT_gem g ON g.gkz = wg.gkz + LEFT JOIN AT_kg k ON k.gkz = g.gkz +WHERE origin = 'WLWV' AND g.gkz / 100 IN (308, 316) AND + k.name IN ('Erdpreß', 'Martinsdorf', 'Niedersulz', 'Großinzersdorf', 'Palterndorf'); diff --git a/sql/create.sql b/sql/v01/01.create.sql similarity index 83% rename from sql/create.sql rename to sql/v01/01.create.sql index 91ed5b7..9f13ebe 100644 --- a/sql/create.sql +++ b/sql/v01/01.create.sql @@ -1,6 +1,10 @@ PRAGMA foreign_keys = ON; +CREATE TABLE meta ( + version INTEGER NOT NULL DEFAULT 1 +); + CREATE TABLE country ( alpha2 TEXT NOT NULL CHECK (alpha2 REGEXP '[A-Z]{2}'), alpha3 TEXT NOT NULL CHECK (alpha3 REGEXP '[A-Z]{3}'), @@ -26,8 +30,8 @@ CREATE TABLE currency ( ) STRICT; CREATE TABLE postal_dest ( - country TEXT NOT NULL, - id INTEGER NOT NULL, + country TEXT NOT NULL, + id TEXT NOT NULL, CONSTRAINT pk_postal_dest PRIMARY KEY (country, id), CONSTRAINT fk_postal_dest_country FOREIGN KEY (country) REFERENCES country (alpha2) @@ -35,20 +39,6 @@ CREATE TABLE postal_dest ( 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')), @@ -112,8 +102,8 @@ CREATE TABLE AT_plz ( plz INTEGER NOT NULL CHECK (plz >= 1000 AND plz <= 9999), okz INTEGER NOT NULL, - country TEXT NOT NULL GENERATED ALWAYS AS ('AT') STORED, - id INTEGER NOT NULL GENERATED ALWAYS AS (plz * 100000 + okz) STORED, + country TEXT NOT NULL GENERATED ALWAYS AS ('AT') VIRTUAL, + id TEXT NOT NULL GENERATED ALWAYS AS (plz * 100000 + okz) STORED, dest TEXT NOT NULL, @@ -145,18 +135,6 @@ 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, @@ -189,15 +167,25 @@ CREATE TABLE wb_gl ( -- Weinbaugemeinde CREATE TABLE wb_gem ( - id INTEGER NOT NULL, + gkz INTEGER NOT NULL, origin TEXT NOT NULL, - gl_id INTEGER, - CONSTRAINT pk_wb_gem PRIMARY KEY (id), - CONSTRAINT fk_wb_gem_AT_gem FOREIGN KEY (id) REFERENCES AT_gem (gkz) + CONSTRAINT pk_wb_gem PRIMARY KEY (gkz), + CONSTRAINT fk_wb_gem_AT_gem FOREIGN KEY (gkz) 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 +) STRICT; + +-- Weinbaukatastralgemeinde +CREATE TABLE wb_kg ( + kgnr INTEGER NOT NULL, + gl_id INTEGER, + + CONSTRAINT pk_wb_kg PRIMARY KEY (kgnr), + CONSTRAINT fk_wb_kg_AT_kg FOREIGN KEY (kgnr) REFERENCES AT_kg (kgnr) ON UPDATE CASCADE ON DELETE RESTRICT, CONSTRAINT fk_wb_gem_wb_gl FOREIGN KEY (gl_id) REFERENCES wb_gl (id) @@ -205,16 +193,15 @@ CREATE TABLE wb_gem ( ON DELETE RESTRICT ) STRICT; --- Weinbaukatastralgemeinde -CREATE TABLE wb_kg ( - id INTEGER NOT NULL, - - CONSTRAINT pk_wb_kg PRIMARY KEY (id) -) STRICT; - -- Ried CREATE TABLE wb_rd ( - id INTEGER NOT NULL, + kgnr INTEGER NOT NULL, + rdid INTEGER NOT NULL, - CONSTRAINT pk_wb_rd PRIMARY KEY (id) + name TEXT NOT NULL, + + CONSTRAINT pk_wb_rd PRIMARY KEY (kgnr, rdid), + CONSTRAINT fk_wb_rd_wb_kg FOREIGN KEY (kgnr) REFERENCES wb_kg (kgnr) + ON UPDATE CASCADE + ON DELETE RESTRICT ) STRICT; diff --git a/sql/view.sql b/sql/v01/02.view.sql similarity index 100% rename from sql/view.sql rename to sql/v01/02.view.sql diff --git a/sql/base.sql b/sql/v01/03.base.sql similarity index 92% rename from sql/base.sql rename to sql/v01/03.base.sql index caaf8f3..ca58654 100644 --- a/sql/base.sql +++ b/sql/v01/03.base.sql @@ -4,7 +4,14 @@ INSERT INTO country VALUES ('DE', 'DEU', 276, 'Deutschland', FALSE), ('CZ', 'CZE', 203, 'Tschechien', FALSE), ('HU', 'HUN', 348, 'Ungarn', FALSE), -('SK', 'SVK', 703, 'Slowakei', FALSE); +('SK', 'SVK', 703, 'Slowakei', FALSE), +('IT', 'ITA', 380, 'Italien', FALSE), +('NL', 'NLD', 528, 'Niederlande', FALSE), +('LU', 'LUX', 442, 'Luxemburg', FALSE), +('BE', 'BEL', 56, 'Belgien', FALSE), +('FR', 'FRA', 250, 'France', FALSE), +('ES', 'ESP', 724, 'Spanien', FALSE), +('PT', 'PRT', 620, 'Portugal', FALSE); INSERT INTO currency VALUES ('EUR', 'Euro', '€', 10000), @@ -55,9 +62,6 @@ INSERT INTO wine_origin VALUES ('WLMB', 'WLBL', 'Mittelburgenland', NULL), ('WLEB', 'WLBL', 'Eisenberg', NULL); -INSERT INTO wb_gl VALUES -(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/sqlite.sh b/sqlite.sh new file mode 100755 index 0000000..853df55 --- /dev/null +++ b/sqlite.sh @@ -0,0 +1,9 @@ +#!/bin/bash +sqlite3 -box \ + -cmd ".read sql/v01/01.create.sql" \ + -cmd ".read sql/v01/02.view.sql" \ + -cmd ".read sql/v01/03.base.sql" \ + -cmd ".read data/plz.sql" \ + -cmd ".read sql/plz-fix.sql" \ + -cmd ".read sql/sample.sql" \ + $@