Mercurial > gemma
diff schema/gemma.sql @ 4389:5e38667f740c stretches-for-responsibility
Use stretches as areas of responsibility.
This is heavily based on a patch by Tom Gottfried
(read: >90% of the work was done by Tom).
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Thu, 12 Sep 2019 18:13:47 +0200 |
parents | a7196b55c064 |
children | ce884af9f42f |
line wrap: on
line diff
--- a/schema/gemma.sql Wed Sep 11 10:32:19 2019 +0200 +++ b/schema/gemma.sql Thu Sep 12 18:13:47 2019 +0200 @@ -4,7 +4,7 @@ -- SPDX-License-Identifier: AGPL-3.0-or-later -- License-Filename: LICENSES/AGPL-3.0.txt --- Copyright (C) 2018,2019 by via donau +-- Copyright (C) 2018, 2019 by via donau -- – Österreichische Wasserstraßen-Gesellschaft mbH -- Software engineering by Intevation GmbH @@ -236,49 +236,6 @@ -- GEMMA data -- --- Namespace not to be accessed directly by any user -CREATE SCHEMA internal - -- Profile data are only accessible via the view users.list_users. - CREATE TABLE user_profiles ( - username varchar PRIMARY KEY CHECK(octet_length(username) <= 63), - -- keep username length compatible with role identifier - map_extent box2d NOT NULL, - email_address varchar NOT NULL - ) - -- Columns referencing user-visible schemas added below. -; - - --- Namespace to be accessed by sys_admin only -CREATE SCHEMA sys_admin - CREATE TABLE system_config ( - config_key varchar PRIMARY KEY, - config_val varchar - ) - - CREATE TABLE password_reset_requests ( - hash varchar(32) PRIMARY KEY, - issued timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - username varchar NOT NULL UNIQUE - REFERENCES internal.user_profiles(username) - ON DELETE CASCADE ON UPDATE CASCADE - ) - - -- Tables with geo data to be published with GeoServer. - CREATE TABLE external_services ( - local_name varchar PRIMARY KEY, - remote_url varchar NOT NULL, - is_wfs boolean NOT NULL DEFAULT TRUE - ) - - CREATE TABLE published_services ( - name regclass PRIMARY KEY, - style xml CHECK(style IS DOCUMENT), - as_wms boolean NOT NULL DEFAULT TRUE, - as_wfs boolean NOT NULL DEFAULT TRUE - ) -; - -- -- Look-up tables with data that are static in a running system -- @@ -366,12 +323,76 @@ 'report' ); + +-- Namespace not to be accessed directly by any user +CREATE SCHEMA internal + -- Profile data are only accessible via the view users.list_users. + CREATE TABLE user_profiles ( + username varchar PRIMARY KEY CHECK(octet_length(username) <= 63), + -- keep username length compatible with role identifier + country char(2) NOT NULL REFERENCES countries, + map_extent box2d NOT NULL, + email_address varchar NOT NULL + ) + -- Columns referencing user-visible schemas added below. +; + + +-- Namespace to be accessed by sys_admin only +CREATE SCHEMA sys_admin + CREATE TABLE system_config ( + config_key varchar PRIMARY KEY, + config_val varchar + ) + + CREATE TABLE password_reset_requests ( + hash varchar(32) PRIMARY KEY, + issued timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + username varchar NOT NULL UNIQUE + REFERENCES internal.user_profiles(username) + ON DELETE CASCADE ON UPDATE CASCADE + ) + + -- Tables with geo data to be published with GeoServer. + CREATE TABLE external_services ( + local_name varchar PRIMARY KEY, + remote_url varchar NOT NULL, + is_wfs boolean NOT NULL DEFAULT TRUE + ) + + CREATE TABLE published_services ( + name regclass PRIMARY KEY, + style xml CHECK(style IS DOCUMENT), + as_wms boolean NOT NULL DEFAULT TRUE, + as_wfs boolean NOT NULL DEFAULT TRUE + ) +; + + -- Namespace for user management related data CREATE SCHEMA users - CREATE TABLE responsibility_areas ( - country char(2) PRIMARY KEY REFERENCES countries, - area geography(MULTIPOLYGON, 4326) - CHECK(ST_IsValid(CAST(area AS geometry))) + CREATE TABLE stretches ( + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + name varchar NOT NULL, + stretch isrsrange NOT NULL, + area geography(MULTIPOLYGON, 4326) NOT NULL + CHECK(ST_IsValid(CAST(area AS geometry))), + objnam varchar NOT NULL, + nobjnam varchar, + date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + source_organization varchar NOT NULL, + staging_done boolean NOT NULL DEFAULT false, + UNIQUE(name, staging_done) + ) + CREATE TRIGGER stretches_date_info + BEFORE UPDATE ON stretches + FOR EACH ROW EXECUTE PROCEDURE update_date_info() + + CREATE TABLE stretch_countries ( + stretch_id int NOT NULL REFERENCES stretches(id) + ON DELETE CASCADE, + country char(2) NOT NULL REFERENCES countries, + PRIMARY KEY(stretch_id, country) ) CREATE TABLE templates ( @@ -385,8 +406,7 @@ CREATE TRIGGER templates_date_info BEFORE UPDATE ON templates FOR EACH ROW EXECUTE PROCEDURE update_date_info() ; -ALTER TABLE internal.user_profiles ADD - country char(2) NOT NULL REFERENCES users.responsibility_areas; + -- Namespace for waterway data that can change in a running system CREATE SCHEMA waterway @@ -545,30 +565,6 @@ check (pk_policy in ('sequence', 'assigned', 'autogenerated')) ) - CREATE TABLE stretches ( - id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, - name varchar NOT NULL, - stretch isrsrange NOT NULL, - area geography(MULTIPOLYGON, 4326) NOT NULL - CHECK(ST_IsValid(CAST(area AS geometry))), - objnam varchar NOT NULL, - nobjnam varchar, - date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, - source_organization varchar NOT NULL, - staging_done boolean NOT NULL DEFAULT false, - UNIQUE(name, staging_done) - ) - CREATE TRIGGER stretches_date_info - BEFORE UPDATE ON stretches - FOR EACH ROW EXECUTE PROCEDURE update_date_info() - - CREATE TABLE stretch_countries ( - stretches_id int NOT NULL REFERENCES stretches(id) - ON DELETE CASCADE, - country_code char(2) NOT NULL REFERENCES countries(country_code), - UNIQUE(stretches_id, country_code) - ) - -- Like stretches without the countries CREATE TABLE sections ( id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, @@ -584,7 +580,7 @@ UNIQUE(name, staging_done) ) CREATE TRIGGER sections_date_info - BEFORE UPDATE ON stretches + BEFORE UPDATE ON sections FOR EACH ROW EXECUTE PROCEDURE update_date_info() CREATE TABLE waterway_profiles (