-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrid_development.sql
executable file
·160 lines (127 loc) · 6.09 KB
/
grid_development.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
-----------------------------------------------------------------------------------
--
-- Copyright "2015" "Wuppertal Institut"
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-----------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
-- ZUBAU-DATENBANK
--------------------------------------------------------------------------------------------
DROP VIEW IF EXISTS vw_change_log;
-- Erstellung der LOG-Tabelle
--DROP TABLE change_log
CREATE TABLE IF NOT EXISTS change_log (
id SERIAL NOT NULL PRIMARY KEY,
-- Verwendung wie OSM-id
osm_id BIGINT,
-- Change-Parameter
tstamp TIMESTAMP WITHOUT TIME ZONE,
table_ident CHARACTER VARYING (3),
action CHARACTER VARYING (4),
-- Leitungsinformationen
members BIGINT [],
way GEOMETRY (MultiLineString, 4326), --(MultiLineString),
power TEXT,
voltage TEXT,
cables TEXT,
wires TEXT,
circuits TEXT,
frequency TEXT,
hinweis TEXT);
-- Change-Log-Trigger
-- Metadaten
-- Trigger für direkten Metadata-Update (BEFORE)
-- Timestamp wird bei jedem Update eines Change-Log Objektes vergebe
DROP TRIGGER IF EXISTS otg_set_timestamp_tg ON change_log;
CREATE TRIGGER otg_set_timestamp_tg
BEFORE INSERT OR UPDATE ON change_log
FOR EACH ROW EXECUTE PROCEDURE otg_set_timestamp_tg ();
-- Trigger der untersucht, ob eine Objekt (osm) id vorhanden ist. Wenn nicht wird eine negative ID erstellt
DROP TRIGGER IF EXISTS otg_set_id_tg ON change_log;
CREATE TRIGGER otg_set_id_tg
BEFORE INSERT ON change_log
FOR EACH ROW EXECUTE PROCEDURE otg_set_id_tg ();
-- Bei jedem neuen Eintrag in change log wird durch diesen Trigger der aktuell ausgwählte Plan und das Jahr in
-- anwendung änderung gespeichert.
DROP TRIGGER IF EXISTS otg_set_anwendung_tg ON change_log;
CREATE TRIGGER otg_set_anwendung_tg
AFTER INSERT ON change_log
FOR EACH ROW EXECUTE PROCEDURE otg_set_anwendung_tg ();
-- Lock-Trigger
-- Direkte Inserts in Change_log sollen verhindert werden.
-- Auf diese Weise muss man sich keine Gedanken über table_ident etc. machen.
DROP TRIGGER IF EXISTS otg_prevent_direct_inserts_tg ON change_log;
CREATE TRIGGER otg_prevent_direct_inserts_tg
BEFORE INSERT ON change_log
FOR EACH ROW
EXECUTE PROCEDURE otg_prevent_direct_inserts_tg ();
-- Tabelle für die Speicherung der Entwicklungspläne und Gesetze
CREATE TABLE IF NOT EXISTS entwicklungsplan (
id SERIAL NOT NULL PRIMARY KEY,
plan TEXT,
comment TEXT);
-- Tabelle zur Zuordnung der Änderungen zu den Entwicklungsplänen und Gesetzen
-- Wird die zugeordnete Änderung gelöscht, wird auch die Anwendung gelöscht.
--DROP TABLE anwendung_aenderung
CREATE TABLE IF NOT EXISTS anwendung_aenderung(
id SERIAL NOT NULL PRIMARY KEY,
aenderungs_id INT,
plan_id INT,
jahr INT,
plan_intern_id TEXT,
description TEXT,
user_comment TEXT,
tstamp TIMESTAMP WITHOUT TIME ZONE,
copied BOOLEAN,
copied_from INT);
DROP TRIGGER IF EXISTS otg_set_timestamp_tg ON anwendung_aenderung;
CREATE TRIGGER otg_set_timestamp_tg
BEFORE INSERT OR UPDATE ON anwendung_aenderung
FOR EACH ROW EXECUTE PROCEDURE otg_set_timestamp_tg ();
ALTER TABLE anwendung_aenderung DROP CONSTRAINT IF EXISTS change_fk;
ALTER TABLE anwendung_aenderung
ADD CONSTRAINT change_fk foreign key (aenderungs_id) references change_log (id) ON DELETE CASCADE;
ALTER TABLE anwendung_aenderung DROP CONSTRAINT IF EXISTS plan_fk;
ALTER TABLE anwendung_aenderung
ADD CONSTRAINT plan_fk foreign key (plan_id) references entwicklungsplan (id);
-- Tabelle in der currently anwendungs-Wert gespeichert wird
DROP TABLE IF EXISTS zuordnung;
CREATE TABLE zuordnung(
plan_id TEXT,
jahr INT,
plan_intern_id TEXT,
description TEXT,
user_comment TEXT);
INSERT INTO zuordnung VALUES (NULL, NULL, NULL, NULL, NULL); -- Immer genau eine Zeile steht in der Tabelle
-- View auf change_log (hängt von den eingegebenen Metadaten ab!)
CREATE VIEW vw_change_log AS
SELECT * FROM change_log
WHERE change_log.id IN (SELECT aenderungs_id
FROM anwendung_aenderung
WHERE plan_id = ANY (otg_zuordung_as_array ((SELECT plan_id
FROM zuordnung))));
-- CREATE VIEW vw_change_log AS
-- SELECT DISTINCT ON (cl.id) cl.id, cl.osm_id, cl.tstamp, cl.table_ident, cl.action, cl.members, cl.way, cl.power,
-- cl.voltage, cl.cables, cl.wires, cl.circuits, cl.frequency, cl.hinweis,
-- aa.description, aa.user_comment, (SELECT plan_id FROM zuordnung) as devel_plans
-- FROM change_log as cl, anwendung_aenderung as aa
--
-- WHERE cl.id = aa.aenderungs_id AND
-- aa.aenderungs_id = ANY (otg_zuordung_as_array ((SELECT plan_id FROM zuordnung))));
CREATE TRIGGER otg_vw_change_log_edit_delete_tg
INSTEAD OF DELETE ON vw_change_log
FOR EACH ROW EXECUTE PROCEDURE otg_vw_change_log_edit_delete_tg ();
CREATE TRIGGER otg_vw_change_log_edit_update_tg
INSTEAD OF UPDATE ON vw_change_log
FOR EACH ROW EXECUTE PROCEDURE otg_vw_change_log_edit_update_tg ();