comparison wamos.sql @ 81:acaa485c0c1e

Use different schemas for different diagrams. Add TODOs.
author Tom Gottfried <tom@intevation.de>
date Thu, 31 May 2018 17:54:32 +0200
parents 004198a3cbc0
children c71e43f88ae0
comparison
equal deleted inserted replaced
80:004198a3cbc0 81:acaa485c0c1e
1 BEGIN; 1 BEGIN;
2 2
3 --
4 -- Infrastructure
5 --
3 CREATE EXTENSION postgis; 6 CREATE EXTENSION postgis;
4
5 CREATE SCHEMA wamos;
6 SET search_path TO public, wamos;
7 7
8 CREATE FUNCTION update_date_info() RETURNS trigger 8 CREATE FUNCTION update_date_info() RETURNS trigger
9 LANGUAGE plpgsql 9 LANGUAGE plpgsql
10 AS $$ 10 AS $$
11 BEGIN 11 BEGIN
27 ); 27 );
28 28
29 CREATE TYPE isrsrange AS RANGE ( 29 CREATE TYPE isrsrange AS RANGE (
30 subtype = isrs 30 subtype = isrs
31 ); 31 );
32
33 --
34 -- WAMOS data
35 --
36 CREATE SCHEMA wamos;
37 CREATE SCHEMA wamos_waterway;
38 CREATE SCHEMA wamos_fairway;
39 SET search_path TO public, wamos, wamos_waterway, wamos_fairway;
40
41 --
42 -- Auxilliary tables
43 --
44
45 -- TODO: Add table to manage users e-mail adresses (APUC9)
46 -- TODO: Add table for responsibility areas and link to users
47 -- TODO: Store reports/statistics templates per user (APUC6, SPUC13)
48
49 -- TODO: Do we need to store system config (APUC10) in database?
50 -- TODO: Will we store any pre-calculated cross sections in database (SPUC3)?
32 51
33 -- Eventually obsolete. 52 -- Eventually obsolete.
34 -- See https://roundup-intern.intevation.de/wamos/issue5 53 -- See https://roundup-intern.intevation.de/wamos/issue5
35 -- CREATE TABLE rwdrs ( 54 -- CREATE TABLE rwdrs (
36 -- stretch isrsrange PRIMARY KEY, 55 -- stretch isrsrange PRIMARY KEY,
53 ); 72 );
54 73
55 -- 74 --
56 -- General river information 75 -- General river information
57 -- 76 --
58 CREATE TABLE wamos.waterway_area ( 77 CREATE TABLE wamos_waterway.waterway_area (
59 dummy_attrib varchar, 78 dummy_attrib varchar,
60 "..." varchar 79 "..." varchar
61 -- TODO: add real waterway area attributes (DRC 2.1.3) 80 -- TODO: add real waterway area attributes (DRC 2.1.3)
62 ); 81 );
63 82
64 CREATE TABLE wamos.reference_water_levels ( 83 CREATE TABLE wamos_fairway.reference_water_levels (
65 reference_water_level varchar(20) PRIMARY KEY 84 reference_water_level varchar(20) PRIMARY KEY
66 ); 85 );
67 86
68 CREATE TABLE wamos.gauges ( 87 CREATE TABLE wamos_fairway.gauges (
69 location isrs PRIMARY KEY, 88 location isrs PRIMARY KEY,
70 dummy_attrib varchar, 89 dummy_attrib varchar,
71 "..." varchar 90 "..." varchar
72 -- TODO: add real gauge attributes (DRC 2.1.4) 91 -- TODO: add real gauge attributes (DRC 2.1.4)
73 ); 92 );
74 93
75 CREATE TABLE wamos.gauges_reference_water_levels ( 94 CREATE TABLE wamos_fairway.gauges_reference_water_levels (
76 gauge_id isrs NOT NULL REFERENCES gauges, 95 gauge_id isrs NOT NULL REFERENCES gauges,
77 reference_water_level varchar(20) 96 reference_water_level varchar(20)
78 NOT NULL REFERENCES reference_water_levels, 97 NOT NULL REFERENCES reference_water_levels,
79 PRIMARY KEY (gauge_id, reference_water_level), 98 PRIMARY KEY (gauge_id, reference_water_level),
80 value int NOT NULL 99 value int NOT NULL
81 ); 100 );
82 101
83 CREATE TABLE wamos.gauge_measurements ( 102 CREATE TABLE wamos_fairway.gauge_measurements (
84 fk_gauge_id isrs NOT NULL REFERENCES gauges, 103 fk_gauge_id isrs NOT NULL REFERENCES gauges,
85 -- XXX: Is country_code really relevant for WAMOS or just NtS? 104 -- XXX: Is country_code really relevant for WAMOS or just NtS?
86 -- country_code char(2) NOT NULL REFERENCES countries, 105 -- country_code char(2) NOT NULL REFERENCES countries,
87 -- TODO: add relations to stuff provided as enumerations 106 -- TODO: add relations to stuff provided as enumerations
88 dummy_attrib varchar, 107 dummy_attrib varchar,
89 "..." varchar 108 "..." varchar
90 -- TODO: add real gauge measurement attributes (DRC 2.1.5) 109 -- TODO: add real gauge measurement attributes (DRC 2.1.5)
91 ); 110 );
92 111
93 CREATE TABLE wamos.waterway_axis ( 112 CREATE TABLE wamos_waterway.waterway_axis (
94 dummy_attrib varchar, 113 dummy_attrib varchar,
95 "..." varchar 114 "..." varchar
96 -- TODO: add real waterway area attributes (DRC 2.1.3) 115 -- TODO: add real waterway area attributes (DRC 2.1.3)
97 ); 116 );
98 117
99 CREATE TABLE wamos.distance_mark_functions ( 118 CREATE TABLE wamos_waterway.distance_mark_functions (
100 -- XXX: Redundant information to object code in isrs code of dist. mark 119 -- XXX: Redundant information to object code in isrs code of dist. mark
101 distance_mark_function varchar(8) PRIMARY KEY 120 distance_mark_function varchar(8) PRIMARY KEY
102 ); 121 );
103 122
104 -- This table allows linkage between the 1D ISRS location codes and 2D space 123 -- This table allows linkage between the 1D ISRS location codes and 2D space
105 -- e.g. for cutting bottleneck area out of waterway area based on virtual 124 -- e.g. for cutting bottleneck area out of waterway area based on virtual
106 -- distance marks along waterway axis (see SUC7). 125 -- distance marks along waterway axis (see SUC7).
107 CREATE TABLE wamos.distance_marks ( 126 CREATE TABLE wamos_waterway.distance_marks (
108 location_code isrs PRIMARY KEY, 127 location_code isrs PRIMARY KEY,
109 geom geometry(POINT, 4326), 128 geom geometry(POINT, 4326),
110 distance_mark_function varchar(8) REFERENCES distance_mark_functions, 129 distance_mark_function varchar(8) REFERENCES distance_mark_functions,
111 -- TODO: add relations to stuff provided as enumerations 130 -- TODO: add relations to stuff provided as enumerations
112 dummy_attrib varchar, 131 dummy_attrib varchar,
113 "..." varchar 132 "..." varchar
114 -- TODO: add real distance mark attributes (DRC 2.1.7) 133 -- TODO: add real distance mark attributes (DRC 2.1.7)
115 ); 134 );
116 135
117 CREATE TABLE wamos.sections_stretches ( 136 CREATE TABLE wamos_waterway.sections_stretches (
118 id varchar PRIMARY KEY, 137 id varchar PRIMARY KEY,
119 is_section boolean NOT NULL, -- maps 'function' from interface 138 is_section boolean NOT NULL, -- maps 'function' from interface
120 stretch isrsrange, 139 stretch isrsrange,
121 dummy_attrib varchar, 140 dummy_attrib varchar,
122 "..." varchar 141 "..." varchar
123 -- TODO: add real section/stretch attributes (DRC 2.2.1) 142 -- TODO: add real section/stretch attributes (DRC 2.2.1)
124 ); 143 );
125 144
126 CREATE TABLE wamos.waterway_profiles ( 145 CREATE TABLE wamos_waterway.waterway_profiles (
127 dummy_attrib varchar, 146 dummy_attrib varchar,
128 "..." varchar 147 "..." varchar
129 -- TODO: add real profile attributes (DRC 2.2.3) 148 -- TODO: add real profile attributes (DRC 2.2.3)
130 ); 149 );
131 150
132 -- 151 --
133 -- Bottlenecks 152 -- Bottlenecks
134 -- 153 --
135 CREATE TABLE wamos.riverbed_materials ( 154 CREATE TABLE wamos_fairway.riverbed_materials (
136 material varchar PRIMARY KEY 155 material varchar PRIMARY KEY
137 -- XXX: Should this table contain choices from DRC 2.2.3 or 156 -- XXX: Should this table contain choices from DRC 2.2.3 or
138 -- from IENC Encoding Guide M.4.3, attribute NATSUR? 157 -- from IENC Encoding Guide M.4.3, attribute NATSUR?
139 ); 158 );
140 159
141 CREATE TABLE wamos.survey_types ( 160 CREATE TABLE wamos_fairway.survey_types (
142 survey_type varchar PRIMARY KEY 161 survey_type varchar PRIMARY KEY
143 ); 162 );
144 163
145 CREATE TABLE wamos.coverage_types ( 164 CREATE TABLE wamos_fairway.coverage_types (
146 coverage_type varchar PRIMARY KEY 165 coverage_type varchar PRIMARY KEY
147 ); 166 );
148 167
149 CREATE TABLE wamos.limiting_factors ( 168 CREATE TABLE wamos_fairway.limiting_factors (
150 limiting_factor varchar PRIMARY KEY 169 limiting_factor varchar PRIMARY KEY
151 ); 170 );
152 171
153 CREATE TABLE wamos.depth_references ( 172 CREATE TABLE wamos_fairway.depth_references (
154 depth_reference varchar(4) PRIMARY KEY 173 depth_reference varchar(4) PRIMARY KEY
155 -- See col. AB and AI RIS-Index Encoding Guide 174 -- See col. AB and AI RIS-Index Encoding Guide
156 -- XXX: We need a way to distinguish between geodetic (eg. col. AP 175 -- XXX: We need a way to distinguish between geodetic (eg. col. AP
157 -- RIS-Index) and other references (e.g. col. AB and AI): 176 -- RIS-Index) and other references (e.g. col. AB and AI):
158 -- _ multi-column FK with a boolean column (geodetic/non-geodetic; 177 -- _ multi-column FK with a boolean column (geodetic/non-geodetic;
162 ); 181 );
163 182
164 -- XXX: Nullability differs between DRC (attributes marked "O") and WSDL 183 -- XXX: Nullability differs between DRC (attributes marked "O") and WSDL
165 -- (minOccurs=0; nillable seems to be set arbitrarily as even bottleneck_id and 184 -- (minOccurs=0; nillable seems to be set arbitrarily as even bottleneck_id and
166 -- fk_g_fid (both mandatory, i.e. marked "M" in DRC) have nillable="true" in WSDL) 185 -- fk_g_fid (both mandatory, i.e. marked "M" in DRC) have nillable="true" in WSDL)
167 CREATE TABLE wamos.bottlenecks ( 186 CREATE TABLE wamos_fairway.bottlenecks (
168 bottleneck_id varchar PRIMARY KEY, 187 bottleneck_id varchar PRIMARY KEY,
169 fk_g_fid isrs NOT NULL REFERENCES gauges, 188 fk_g_fid isrs NOT NULL REFERENCES gauges,
170 -- XXX: DRC references "ch. 3.1.1", which does not exist in document. 189 -- XXX: DRC references "ch. 3.1.1", which does not exist in document.
171 objnam varchar, 190 objnam varchar,
172 nobjnm varchar, 191 nobjnm varchar,
191 staging_done boolean NOT NULL DEFAULT false 210 staging_done boolean NOT NULL DEFAULT false
192 ); 211 );
193 CREATE TRIGGER bottleneck_date_info BEFORE UPDATE ON bottlenecks 212 CREATE TRIGGER bottleneck_date_info BEFORE UPDATE ON bottlenecks
194 FOR EACH ROW EXECUTE PROCEDURE update_date_info(); 213 FOR EACH ROW EXECUTE PROCEDURE update_date_info();
195 214
196 CREATE TABLE wamos.bottlenecks_riverbed_materials ( 215 CREATE TABLE wamos_fairway.bottlenecks_riverbed_materials (
197 bottleneck_id varchar REFERENCES bottlenecks, 216 bottleneck_id varchar REFERENCES bottlenecks,
198 riverbed varchar REFERENCES riverbed_materials, 217 riverbed varchar REFERENCES riverbed_materials,
199 -- XXX: should be 'natsur' according to IENC Encoding Guide M.4.3 218 -- XXX: should be 'natsur' according to IENC Encoding Guide M.4.3
200 PRIMARY KEY (bottleneck_id, riverbed) 219 PRIMARY KEY (bottleneck_id, riverbed)
201 ); 220 );
202 221
203 CREATE TABLE wamos.sounding_results ( 222 CREATE TABLE wamos_fairway.sounding_results (
204 bottleneck_id varchar NOT NULL REFERENCES bottlenecks, 223 bottleneck_id varchar NOT NULL REFERENCES bottlenecks,
205 date_info date NOT NULL, 224 date_info date NOT NULL,
206 PRIMARY KEY (bottleneck_id, date_info), 225 PRIMARY KEY (bottleneck_id, date_info),
207 area geometry(POLYGON, 4326) NOT NULL, 226 area geometry(POLYGON, 4326) NOT NULL,
208 surtyp varchar NOT NULL REFERENCES survey_types, 227 surtyp varchar NOT NULL REFERENCES survey_types,
213 ); 232 );
214 233
215 -- 234 --
216 -- Fairway availability 235 -- Fairway availability
217 -- 236 --
218 CREATE TABLE wamos.spot_marks ( 237 CREATE TABLE wamos_fairway.spot_marks (
219 mark_name varchar PRIMARY KEY 238 mark_name varchar PRIMARY KEY
220 -- Use smallint because of fairway availability provided on daily basis? 239 -- Use smallint because of fairway availability provided on daily basis?
221 ); 240 );
222 241
223 CREATE TABLE wamos.levels_of_service ( 242 CREATE TABLE wamos_fairway.levels_of_service (
224 level_of_service smallint PRIMARY KEY 243 level_of_service smallint PRIMARY KEY
225 ); 244 );
226 245
227 CREATE TABLE wamos.measure_types ( 246 CREATE TABLE wamos_fairway.measure_types (
228 measure_type varchar PRIMARY KEY 247 measure_type varchar PRIMARY KEY
229 ); 248 );
230 249
231 CREATE TABLE wamos.fairway_dimensions ( 250 CREATE TABLE wamos_fairway.fairway_dimensions (
232 level_of_service smallint REFERENCES levels_of_service, 251 level_of_service smallint REFERENCES levels_of_service,
233 dummy_attrib varchar, 252 dummy_attrib varchar,
234 "..." varchar 253 "..." varchar
235 -- TODO: add real fairway dimension attributes (DRC 2.2.2) 254 -- TODO: add real fairway dimension attributes (DRC 2.2.2)
236 ); 255 );
237 256
238 CREATE TABLE wamos.fairway_availability ( 257 CREATE TABLE wamos_fairway.fairway_availability (
239 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, 258 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
240 position varchar REFERENCES spot_marks, 259 position varchar REFERENCES spot_marks,
241 bottleneck_id varchar NOT NULL REFERENCES bottlenecks, 260 bottleneck_id varchar NOT NULL REFERENCES bottlenecks,
242 surdat date NOT NULL, 261 surdat date NOT NULL,
243 UNIQUE (bottleneck_id, surdat), 262 UNIQUE (bottleneck_id, surdat),
248 ); 267 );
249 CREATE TRIGGER fairway_availability_date_info 268 CREATE TRIGGER fairway_availability_date_info
250 BEFORE UPDATE ON fairway_availability 269 BEFORE UPDATE ON fairway_availability
251 FOR EACH ROW EXECUTE PROCEDURE update_date_info(); 270 FOR EACH ROW EXECUTE PROCEDURE update_date_info();
252 271
253 CREATE TABLE wamos.fa_reference_values ( 272 CREATE TABLE wamos_fairway.fa_reference_values (
254 fairway_availability_id int NOT NULL REFERENCES fairway_availability, 273 fairway_availability_id int NOT NULL REFERENCES fairway_availability,
255 level_of_service smallint NOT NULL REFERENCES levels_of_service, 274 level_of_service smallint NOT NULL REFERENCES levels_of_service,
256 PRIMARY KEY (fairway_availability_id, level_of_service), 275 PRIMARY KEY (fairway_availability_id, level_of_service),
257 fairway_depth smallint, 276 fairway_depth smallint,
258 fairway_width smallint, 277 fairway_width smallint,
259 fairway_radius int, 278 fairway_radius int,
260 CHECK(COALESCE(fairway_depth, fairway_width, fairway_radius) IS NOT NULL), 279 CHECK(COALESCE(fairway_depth, fairway_width, fairway_radius) IS NOT NULL),
261 shallowest_spot geometry(POINT, 4326) 280 shallowest_spot geometry(POINT, 4326)
262 ); 281 );
263 282
264 CREATE TABLE wamos.bottleneck_pdfs ( 283 CREATE TABLE wamos_fairway.bottleneck_pdfs (
265 fairway_availability_id int NOT NULL REFERENCES fairway_availability, 284 fairway_availability_id int NOT NULL REFERENCES fairway_availability,
266 profile_pdf_filename varchar NOT NULL, -- redundant to last part of URL 285 profile_pdf_filename varchar NOT NULL, -- redundant to last part of URL
267 profile_pdf_url varchar NOT NULL, -- prohibit insecure URLs somehow? 286 profile_pdf_url varchar NOT NULL, -- prohibit insecure URLs somehow?
268 PRIMARY KEY (fairway_availability_id, profile_pdf_url), 287 PRIMARY KEY (fairway_availability_id, profile_pdf_url),
269 pdf_generation_date timestamp with time zone NOT NULL, 288 pdf_generation_date timestamp with time zone NOT NULL,
270 source_organization varchar NOT NULL 289 source_organization varchar NOT NULL
271 ); 290 );
272 291
273 CREATE TABLE wamos.effective_fairway_availability ( 292 CREATE TABLE wamos_fairway.effective_fairway_availability (
274 fairway_availability_id int NOT NULL REFERENCES fairway_availability, 293 fairway_availability_id int NOT NULL REFERENCES fairway_availability,
275 measure_date timestamp with time zone NOT NULL, 294 measure_date timestamp with time zone NOT NULL,
276 level_of_service smallint NOT NULL REFERENCES levels_of_service, 295 level_of_service smallint NOT NULL REFERENCES levels_of_service,
277 PRIMARY KEY (fairway_availability_id, measure_date, level_of_service), 296 PRIMARY KEY (fairway_availability_id, measure_date, level_of_service),
278 available_depth_value smallint, 297 available_depth_value smallint,