Update db schema, Weinbaugemeinden

This commit is contained in:
2023-02-04 17:07:37 +01:00
parent 6762200c25
commit e73ac85682
6 changed files with 180 additions and 47 deletions

View File

@ -5,3 +5,5 @@ INSERT INTO AT_plz VALUES
(2134, 5115, 'Staaz-Kautendorf'); (2134, 5115, 'Staaz-Kautendorf');
UPDATE AT_ort SET name = 'Etzmannsdorf am Kamp' WHERE okz = 3938; UPDATE AT_ort SET name = 'Etzmannsdorf am Kamp' WHERE okz = 3938;
DELETE FROM AT_plz WHERE (plz, okz) = (2231, 5011);

131
sql/sample.sql Normal file
View File

@ -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');

View File

@ -1,6 +1,10 @@
PRAGMA foreign_keys = ON; PRAGMA foreign_keys = ON;
CREATE TABLE meta (
version INTEGER NOT NULL DEFAULT 1
);
CREATE TABLE country ( CREATE TABLE country (
alpha2 TEXT NOT NULL CHECK (alpha2 REGEXP '[A-Z]{2}'), alpha2 TEXT NOT NULL CHECK (alpha2 REGEXP '[A-Z]{2}'),
alpha3 TEXT NOT NULL CHECK (alpha3 REGEXP '[A-Z]{3}'), alpha3 TEXT NOT NULL CHECK (alpha3 REGEXP '[A-Z]{3}'),
@ -26,8 +30,8 @@ CREATE TABLE currency (
) STRICT; ) STRICT;
CREATE TABLE postal_dest ( CREATE TABLE postal_dest (
country TEXT NOT NULL, country TEXT NOT NULL,
id INTEGER NOT NULL, id TEXT NOT NULL,
CONSTRAINT pk_postal_dest PRIMARY KEY (country, id), CONSTRAINT pk_postal_dest PRIMARY KEY (country, id),
CONSTRAINT fk_postal_dest_country FOREIGN KEY (country) REFERENCES country (alpha2) CONSTRAINT fk_postal_dest_country FOREIGN KEY (country) REFERENCES country (alpha2)
@ -35,20 +39,6 @@ CREATE TABLE postal_dest (
ON DELETE RESTRICT ON DELETE RESTRICT
) STRICT; ) 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 ( CREATE TABLE wine_variety (
code TEXT NOT NULL CHECK (code REGEXP '[A-Z]{2}'), code TEXT NOT NULL CHECK (code REGEXP '[A-Z]{2}'),
type TEXT NOT NULL CHECK (type IN ('R', 'W')), 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), plz INTEGER NOT NULL CHECK (plz >= 1000 AND plz <= 9999),
okz INTEGER NOT NULL, okz INTEGER NOT NULL,
country TEXT NOT NULL GENERATED ALWAYS AS ('AT') STORED, country TEXT NOT NULL GENERATED ALWAYS AS ('AT') VIRTUAL,
id INTEGER NOT NULL GENERATED ALWAYS AS (plz * 100000 + okz) STORED, id TEXT NOT NULL GENERATED ALWAYS AS (plz * 100000 + okz) STORED,
dest TEXT NOT NULL, dest TEXT NOT NULL,
@ -145,18 +135,6 @@ BEGIN
DELETE FROM postal_dest WHERE (country, id) = (old.country, old.id); DELETE FROM postal_dest WHERE (country, id) = (old.country, old.id);
END; 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 ( CREATE TABLE wine_origin (
code TEXT NOT NULL CHECK (code REGEXP '[A-Z]{4}'), code TEXT NOT NULL CHECK (code REGEXP '[A-Z]{4}'),
parent_code TEXT, parent_code TEXT,
@ -189,15 +167,25 @@ CREATE TABLE wb_gl (
-- Weinbaugemeinde -- Weinbaugemeinde
CREATE TABLE wb_gem ( CREATE TABLE wb_gem (
id INTEGER NOT NULL, gkz INTEGER NOT NULL,
origin TEXT NOT NULL, origin TEXT NOT NULL,
gl_id INTEGER,
CONSTRAINT pk_wb_gem PRIMARY KEY (id), CONSTRAINT pk_wb_gem PRIMARY KEY (gkz),
CONSTRAINT fk_wb_gem_AT_gem FOREIGN KEY (id) REFERENCES AT_gem (gkz) CONSTRAINT fk_wb_gem_AT_gem FOREIGN KEY (gkz) REFERENCES AT_gem (gkz)
ON UPDATE CASCADE ON UPDATE CASCADE
ON DELETE RESTRICT, ON DELETE RESTRICT,
CONSTRAINT fk_wb_gem_wine_origin FOREIGN KEY (origin) REFERENCES wine_origin (code) 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 UPDATE CASCADE
ON DELETE RESTRICT, ON DELETE RESTRICT,
CONSTRAINT fk_wb_gem_wb_gl FOREIGN KEY (gl_id) REFERENCES wb_gl (id) 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 ON DELETE RESTRICT
) STRICT; ) STRICT;
-- Weinbaukatastralgemeinde
CREATE TABLE wb_kg (
id INTEGER NOT NULL,
CONSTRAINT pk_wb_kg PRIMARY KEY (id)
) STRICT;
-- Ried -- Ried
CREATE TABLE wb_rd ( 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; ) STRICT;

View File

@ -4,7 +4,14 @@ INSERT INTO country VALUES
('DE', 'DEU', 276, 'Deutschland', FALSE), ('DE', 'DEU', 276, 'Deutschland', FALSE),
('CZ', 'CZE', 203, 'Tschechien', FALSE), ('CZ', 'CZE', 203, 'Tschechien', FALSE),
('HU', 'HUN', 348, 'Ungarn', 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 INSERT INTO currency VALUES
('EUR', 'Euro', '', 10000), ('EUR', 'Euro', '', 10000),
@ -55,9 +62,6 @@ INSERT INTO wine_origin VALUES
('WLMB', 'WLBL', 'Mittelburgenland', NULL), ('WLMB', 'WLBL', 'Mittelburgenland', NULL),
('WLEB', 'WLBL', 'Eisenberg', NULL); ('WLEB', 'WLBL', 'Eisenberg', NULL);
INSERT INTO wb_gl VALUES
(1, 'WLWV', 'Matzner Hügel');
INSERT INTO wine_variety VALUES INSERT INTO wine_variety VALUES
('BL', 'R', 'Blauburger', NULL), ('BL', 'R', 'Blauburger', NULL),
('BB', 'R', 'Blauer Burgunder', 'Blauer Spätburgunder, Blauburgunder, Pinot Noir'), ('BB', 'R', 'Blauer Burgunder', 'Blauer Spätburgunder, Blauburgunder, Pinot Noir'),

9
sqlite.sh Executable file
View File

@ -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" \
$@