sascha@164: BEGIN; sascha@164: sascha@164: -- Gewaesser sascha@164: CREATE TABLE rivers ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: name VARCHAR(256) NOT NULL UNIQUE sascha@164: ); sascha@164: sascha@164: -- Bruecke, Haefen, etc. sascha@164: CREATE TABLE attributes ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: value VARCHAR(256) NOT NULL UNIQUE sascha@164: ); sascha@164: sascha@164: -- segments from/to at a river sascha@164: CREATE TABLE ranges ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: river_id int NOT NULL REFERENCES rivers(id), sascha@164: a NUMERIC NOT NULL, sascha@164: b NUMERIC, sascha@164: UNIQUE (river_id, a, b) sascha@164: ); sascha@164: sascha@164: -- Lage 'links', 'rechts', etc. sascha@164: CREATE TABLE positions ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: value VARCHAR(256) NOT NULL UNIQUE sascha@164: ); sascha@164: sascha@164: -- Some object (eg. Hafen) at a segment of river sascha@164: -- plus its position. sascha@164: CREATE TABLE annotations ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: range_id int NOT NULL REFERENCES ranges(id), sascha@164: attribute_id int NOT NULL REFERENCES attributes(id), sascha@164: position_id int REFERENCES positions(id) sascha@164: ); sascha@164: sascha@164: -- Pegel sascha@164: CREATE TABLE gauges ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: name VARCHAR(256) NOT NULL, sascha@164: river_id int NOT NULL REFERENCES rivers(id), sascha@164: station NUMERIC NOT NULL UNIQUE, sascha@164: aeo NUMERIC NOT NULL, sascha@164: sascha@164: -- Pegelnullpunkt sascha@164: datum NUMERIC NOT NULL, sascha@164: -- Streckengueltigkeit sascha@164: range_id int NOT NULL REFERENCES ranges (id), sascha@164: sascha@164: UNIQUE (name, river_id) sascha@164: ); sascha@164: sascha@164: -- Type of a Hauptwert 'W', 'Q', 'D', etc. sascha@164: CREATE TABLE main_value_types ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: name VARCHAR(256) NOT NULL UNIQUE sascha@164: ); sascha@164: sascha@164: -- Named type of a Hauptwert (eg. HQ100) sascha@164: CREATE TABLE named_main_values ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: name VARCHAR(256) NOT NULL UNIQUE, sascha@164: type_id int NOT NULL REFERENCES main_value_types(id), sascha@164: UNIQUE (name, type_id) sascha@164: ); sascha@164: sascha@164: -- Table for time intervals sascha@164: CREATE TABLE time_intervals ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: start_time TIMESTAMP NOT NULL, sascha@164: stop_time TIMESTAMP, sascha@164: CHECK (start_time <= stop_time) sascha@164: ); sascha@164: sascha@164: -- Stammdaten sascha@164: CREATE TABLE main_values ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: gauge_id int NOT NULL REFERENCES gauges(id), sascha@164: named_value_id int NOT NULL REFERENCES named_main_values(id), sascha@164: value NUMERIC NOT NULL, sascha@164: sascha@164: time_interval_id int REFERENCES time_intervals(id), sascha@164: sascha@164: -- TODO: better checks sascha@164: UNIQUE (gauge_id, named_value_id, time_interval_id) sascha@164: ); sascha@164: sascha@164: -- Abflusstafeln sascha@164: CREATE TABLE discharge_table ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: gauge_id int NOT NULL REFERENCES gauges(id), sascha@164: sascha@164: time_interval_id int REFERENCES time_intervals(id), sascha@164: sascha@164: -- TODO: better checks sascha@164: UNIQUE (gauge_id, time_interval_id) sascha@164: ); sascha@164: sascha@164: -- Values of the Abflusstafeln sascha@164: CREATE TABLE discharge_table_values ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: table_id int NOT NULL REFERENCES discharge_table(id), sascha@164: q NUMERIC NOT NULL, sascha@164: w NUMERIC NOT NULL, sascha@164: sascha@164: UNIQUE (table_id, q, w) sascha@164: ); sascha@164: sascha@164: -- WST files sascha@164: CREATE TABLE wst ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: river_id int NOT NULL REFERENCES rivers(id), sascha@164: description VARCHAR(256) NOT NULL, sascha@164: -- TODO: more meta infos sascha@164: UNIQUE (river_id, description) sascha@164: ); sascha@164: sascha@164: -- columns of WST files sascha@164: CREATE TABLE wst_column ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: wst_id int NOT NULL REFERENCES wst(id), sascha@164: name VARCHAR(256) NOT NULL, sascha@164: description VARCHAR, sascha@164: sascha@164: time_interval_id int REFERENCES time_intervals(id), sascha@164: sascha@164: UNIQUE (wst_id, name) sascha@164: ); sascha@164: sascha@164: -- w values in WST file column sascha@164: CREATE TABLE wst_column_values ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: wst_column_id int NOT NULL REFERENCES wst_column(id), sascha@164: position NUMERIC NOT NULL, sascha@164: w NUMERIC NOT NULL, sascha@164: sascha@164: UNIQUE (position, wst_column_id), sascha@164: UNIQUE (position, wst_column_id, w) sascha@164: ); sascha@164: sascha@164: -- bind q values to range sascha@164: CREATE TABLE wst_q_ranges ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: range_id int NOT NULL REFERENCES ranges(id), sascha@164: q NUMERIC NOT NULL sascha@164: ); sascha@164: sascha@164: -- bind q ranges to wst columns sascha@164: CREATE TABLE wst_column_q_ranges ( sascha@164: id int PRIMARY KEY NOT NULL, sascha@164: wst_column_id int NOT NULL REFERENCES wst_column(id), sascha@164: wst_q_range_id int NOT NULL REFERENCES wst_q_ranges(id), sascha@164: sascha@164: UNIQUE (wst_column_id, wst_q_range_id) sascha@164: ); sascha@164: sascha@164: COMMIT;