diff backend/doc/schema/postgresql-minfo.sql @ 8943:71b17f731762

Same data types, precision and scale as in Oracle (as far as possible)
author mschaefer
date Tue, 13 Mar 2018 09:42:41 +0100
parents bfca77cbf353
children f89fb9e9abad
line wrap: on
line diff
--- a/backend/doc/schema/postgresql-minfo.sql	Wed Mar 07 17:36:04 2018 +0100
+++ b/backend/doc/schema/postgresql-minfo.sql	Tue Mar 13 09:42:41 2018 +0100
@@ -3,7 +3,7 @@
 CREATE SEQUENCE LOCATION_SYSTEM_SEQ;
 
 CREATE TABLE location_system (
-    id          int NOT NULL,
+    id          NUMERIC(9,0) NOT NULL,
     name        VARCHAR(32)  NOT NULL,
     description VARCHAR(255),
     PRIMARY KEY(id)
@@ -13,9 +13,9 @@
 CREATE SEQUENCE ELEVATION_MODEL_SEQ;
 
 CREATE TABLE elevation_model (
-    id          int NOT NULL,
+    id          NUMERIC(9,0) NOT NULL,
     name        VARCHAR(32)  NOT NULL,
-    unit_id     int NOT NULL,
+    unit_id     NUMERIC(9,0) NOT NULL,
     PRIMARY KEY(id),
     CONSTRAINT fk_unit FOREIGN KEY (unit_id) REFERENCES units(id)
 );
@@ -23,7 +23,7 @@
 
 -- lookup table for bedheight types
 CREATE TABLE bed_height_type (
-    id          int NOT NULL,
+    id          NUMERIC(9,0) NOT NULL,
     name        VARCHAR(64) NOT NULL,
     PRIMARY KEY(id)
 );
@@ -38,14 +38,14 @@
 CREATE SEQUENCE BED_HEIGHT_ID_SEQ;
 
 CREATE TABLE bed_height (
-    id                      int NOT NULL,
-    river_id                int NOT NULL,
-    year                    int,
-    type_id                 int NOT NULL,
-    location_system_id      int NOT NULL,
-    cur_elevation_model_id  int NOT NULL,
-    old_elevation_model_id  int,
-    range_id                int,
+    id                      NUMERIC(9,0) NOT NULL,
+    river_id                NUMERIC(9,0) NOT NULL,
+    year                    NUMERIC(9,0),
+    type_id                 NUMERIC(9,0) NOT NULL,
+    location_system_id      NUMERIC(9,0) NOT NULL,
+    cur_elevation_model_id  NUMERIC(9,0) NOT NULL,
+    old_elevation_model_id  NUMERIC(9,0),
+    range_id                NUMERIC(9,0),
     evaluation_by           VARCHAR(255),
     description             VARCHAR(255),
     PRIMARY KEY(id),
@@ -65,14 +65,16 @@
 
 CREATE SEQUENCE BED_HEIGHT_VALUES_ID_SEQ;
 
+--FIXME: make precision and scale of station column equal with the km columns of the other tables
+--FIXME: replace double precision with exact types
 CREATE TABLE bed_height_values (
-    id                      int NOT NULL,
-    bed_height_id    int NOT NULL,
-    station                 NUMERIC NOT NULL,
-    height                  NUMERIC,
-    uncertainty             NUMERIC,
-    data_gap                NUMERIC,
-    sounding_width          NUMERIC,
+    id                      NUMERIC(9,0) NOT NULL,
+    bed_height_id    NUMERIC(9,0) NOT NULL,
+    station                 DOUBLE PRECISION NOT NULL,
+    height                  DOUBLE PRECISION,
+    uncertainty             DOUBLE PRECISION,
+    data_gap                DOUBLE PRECISION,
+    sounding_width          DOUBLE PRECISION,
     PRIMARY KEY(id),
     UNIQUE (station, bed_height_id),
     CONSTRAINT fk_bed_values_parent FOREIGN KEY (bed_height_id)
@@ -83,9 +85,9 @@
 CREATE SEQUENCE DEPTHS_ID_SEQ;
 
 CREATE TABLE depths (
-    id      int NOT NULL,
-    lower   NUMERIC NOT NULL,
-    upper   NUMERIC NOT NULL,
+    id      NUMERIC(9,0) NOT NULL,
+    lower   NUMERIC(6,2) NOT NULL,
+    upper   NUMERIC(6,2) NOT NULL,
     PRIMARY KEY(id)
 );
 
@@ -93,9 +95,9 @@
 CREATE SEQUENCE SEDIMENT_DENSITY_ID_SEQ;
 
 CREATE TABLE sediment_density (
-    id          int NOT NULL,
-    river_id    int NOT NULL,
-    depth_id    int NOT NULL,
+    id          NUMERIC(9,0) NOT NULL,
+    river_id    NUMERIC(9,0) NOT NULL,
+    depth_id    NUMERIC(9,0) NOT NULL,
     description VARCHAR(256),
     PRIMARY KEY(id),
     CONSTRAINT fk_sd_river_id FOREIGN KEY (river_id) REFERENCES rivers(id) ON DELETE CASCADE,
@@ -105,14 +107,15 @@
 
 CREATE SEQUENCE SEDIMENT_DENSITY_VALUES_ID_SEQ;
 
+--FIXME: make precision and scale of station column equal with the km columns of the other tables
 CREATE TABLE sediment_density_values (
-    id                  int NOT NULL,
-    sediment_density_id int NOT NULL,
-    station             NUMERIC NOT NULL,
-    shore_offset	NUMERIC,
-    density             NUMERIC NOT NULL,
+    id                  NUMERIC(9,0) NOT NULL,
+    sediment_density_id NUMERIC(9,0) NOT NULL,
+    station             NUMERIC(6,2) NOT NULL,
+    shore_offset        NUMERIC(6,2),
+    density             NUMERIC(8,2) NOT NULL,
     description         VARCHAR(256),
-    year                int,
+    year                NUMERIC(4,0),
     PRIMARY KEY(id),
     CONSTRAINT fk_sdv_sediment_density_id FOREIGN KEY(sediment_density_id) REFERENCES sediment_density(id) ON DELETE CASCADE
 );
@@ -121,11 +124,11 @@
 CREATE SEQUENCE POROSITY_ID_SEQ;
 
 CREATE TABLE porosity (
-    id               int NOT NULL,
-    river_id         int NOT NULL,
-    depth_id         int NOT NULL,
+    id               NUMERIC(9,0) NOT NULL,
+    river_id         NUMERIC(9,0) NOT NULL,
+    depth_id         NUMERIC(9,0) NOT NULL,
     description      VARCHAR(256),
-    time_interval_id int NOT NULL,
+    time_interval_id NUMERIC(9,0) NOT NULL,
     PRIMARY KEY(id),
     CONSTRAINT fk_p_river_id FOREIGN KEY (river_id) REFERENCES rivers(id) ON DELETE CASCADE,
     CONSTRAINT fk_p_depth_id FOREIGN KEY (depth_id) REFERENCES depths(id),
@@ -135,12 +138,13 @@
 
 CREATE SEQUENCE POROSITY_VALUES_ID_SEQ;
 
+--FIXME: make precision and scale of station column equal with the km columns of the other tables
 CREATE TABLE porosity_values (
-    id                  int NOT NULL,
-    porosity_id         int NOT NULL,
-    station             NUMERIC NOT NULL,
-    shore_offset        NUMERIC,
-    porosity            NUMERIC NOT NULL,
+    id                  NUMERIC(9,0) NOT NULL,
+    porosity_id         NUMERIC(9,0) NOT NULL,
+    station             DOUBLE PRECISION NOT NULL,
+    shore_offset        DOUBLE PRECISION,
+    porosity            DOUBLE PRECISION NOT NULL,
     description         VARCHAR(256),
     PRIMARY KEY(id),
     CONSTRAINT fk_pv_porosity_id FOREIGN KEY(porosity_id) REFERENCES porosity(id) ON DELETE CASCADE
@@ -150,9 +154,9 @@
 CREATE SEQUENCE MORPHOLOGIC_WIDTH_ID_SEQ;
 
 CREATE TABLE morphologic_width (
-    id          int NOT NULL,
-    river_id    int NOT NULL,
-    unit_id     int NOT NULL,
+    id          NUMERIC(9,0) NOT NULL,
+    river_id    NUMERIC(9,0) NOT NULL,
+    unit_id     NUMERIC(9,0) NOT NULL,
     PRIMARY KEY(id),
     CONSTRAINT fk_mw_river_id FOREIGN KEY(river_id) REFERENCES rivers(id) ON DELETE CASCADE,
     CONSTRAINT fk_mw_unit_id FOREIGN KEY(unit_id) REFERENCES units(id)
@@ -162,10 +166,10 @@
 CREATE SEQUENCE MORPH_WIDTH_VALUES_ID_SEQ;
 
 CREATE TABLE morphologic_width_values (
-    id                      int NOT NULL,
-    morphologic_width_id    int NOT NULL,
-    station                 NUMERIC NOT NULL,
-    width                   NUMERIC NOT NULL,
+    id                      NUMERIC(9,0) NOT NULL,
+    morphologic_width_id    NUMERIC(9,0) NOT NULL,
+    station                 NUMERIC(7,3) NOT NULL,
+    width                   NUMERIC(7,3) NOT NULL,
     description             VARCHAR(256),
     PRIMARY KEY(id),
     CONSTRAINT fk_mwv_morphologic_width_id FOREIGN KEY (morphologic_width_id) REFERENCES morphologic_width(id) ON DELETE CASCADE
@@ -175,10 +179,10 @@
 CREATE SEQUENCE DISCHARGE_ZONE_ID_SEQ;
 
 CREATE TABLE discharge_zone (
-    id                      int NOT NULL,
-    river_id                int NOT NULL,
+    id                      NUMERIC(9,0) NOT NULL,
+    river_id                NUMERIC(9,0) NOT NULL,
     gauge_name              VARCHAR(64)  NOT NULL, -- this is not very proper, but there are gauges with no db instance
-    value                   NUMERIC NOT NULL,
+    value                   NUMERIC(8,3) NOT NULL,
     lower_discharge         VARCHAR(64)  NOT NULL,
     upper_discharge         VARCHAR(64),
     PRIMARY KEY(id),
@@ -189,8 +193,8 @@
 CREATE SEQUENCE FLOW_VELOCITY_MODEL_ID_SEQ;
 
 CREATE TABLE flow_velocity_model (
-    id                  int NOT NULL,
-    discharge_zone_id   int NOT NULL,
+    id                  NUMERIC(9,0) NOT NULL,
+    discharge_zone_id   NUMERIC(9,0) NOT NULL,
     description         VARCHAR(256),
     PRIMARY KEY (id),
     CONSTRAINT fk_fvm_discharge_zone_id FOREIGN KEY (discharge_zone_id) REFERENCES discharge_zone (id) ON DELETE CASCADE
@@ -200,13 +204,13 @@
 CREATE SEQUENCE FLOW_VELOCITY_M_VALUES_ID_SEQ;
 
 CREATE TABLE flow_velocity_model_values (
-    id                      int NOT NULL,
-    flow_velocity_model_id  int NOT NULL,
-    station                 NUMERIC NOT NULL,
-    q                       NUMERIC NOT NULL,
-    total_channel           NUMERIC NOT NULL,
-    main_channel            NUMERIC NOT NULL,
-    shear_stress            NUMERIC NOT NULL,
+    id                      NUMERIC(9,0) NOT NULL,
+    flow_velocity_model_id  NUMERIC(9,0) NOT NULL,
+    station                 NUMERIC(7,3) NOT NULL,
+    q                       NUMERIC(8,3) NOT NULL,
+    total_channel           NUMERIC(5,3) NOT NULL,
+    main_channel            NUMERIC(5,3) NOT NULL,
+    shear_stress            NUMERIC(6,3) NOT NULL,
     PRIMARY KEY(id),
     UNIQUE (station, flow_velocity_model_id),
     CONSTRAINT fk_fvv_flow_velocity_model_id FOREIGN KEY (flow_velocity_model_id) REFERENCES flow_velocity_model(id) ON DELETE CASCADE
@@ -217,8 +221,8 @@
 CREATE SEQUENCE FV_MEASURE_ID_SEQ;
 
 CREATE TABLE flow_velocity_measurements (
-    id          int NOT NULL,
-    river_id    int NOT NULL,
+    id          NUMERIC(9,0) NOT NULL,
+    river_id    NUMERIC(9,0) NOT NULL,
     description VARCHAR(256),
     PRIMARY KEY (id),
     CONSTRAINT fk_fvm_rivers_id FOREIGN KEY (river_id) REFERENCES rivers(id) ON DELETE CASCADE
@@ -227,13 +231,13 @@
 CREATE SEQUENCE FV_MEASURE_VALUES_ID_SEQ;
 
 CREATE TABLE flow_velocity_measure_values (
-    id              int NOT NULL,
-    measurements_id int NOT NULL,
-    station         NUMERIC NOT NULL,
-    datetime        TIMESTAMP,
-    w               NUMERIC NOT NULL,
-    q               NUMERIC NOT NULL,
-    v               NUMERIC NOT NULL,
+    id              NUMERIC(9,0) NOT NULL,
+    measurements_id NUMERIC(9,0) NOT NULL,
+    station         NUMERIC(7,3) NOT NULL,
+    datetime        TIMESTAMP(0),
+    w               NUMERIC(7,3) NOT NULL,
+    q               NUMERIC(8,3) NOT NULL,
+    v               NUMERIC(5,3) NOT NULL,
     description     VARCHAR(256),
     PRIMARY KEY (id),
     CONSTRAINT fk_fvmv_measurements_id FOREIGN KEY (measurements_id) REFERENCES flow_velocity_measurements (id) ON DELETE CASCADE
@@ -243,10 +247,10 @@
 CREATE SEQUENCE GRAIN_FRACTION_ID_SEQ;
 
 CREATE TABLE grain_fraction (
-    id      int   NOT NULL,
+    id      NUMERIC(9,0)   NOT NULL,
     name    VARCHAR(64)    NOT NULL,
-    lower   NUMERIC,
-    upper   NUMERIC,
+    lower   NUMERIC(6,3),
+    upper   NUMERIC(6,3),
     PRIMARY KEY (id),
     UNIQUE(name, lower, upper)
 );
@@ -265,7 +269,7 @@
 
 --lookup table for sediment load kinds
 CREATE TABLE sediment_load_kinds (
-    id 	     int PRIMARY KEY NOT NULL,
+    id 	     NUMERIC(9,0) PRIMARY KEY NOT NULL,
     kind     VARCHAR(64) NOT NULL
 );
 INSERT INTO sediment_load_kinds (id, kind) VALUES (0, 'non-official');
@@ -274,14 +278,14 @@
 CREATE SEQUENCE SEDIMENT_LOAD_LS_ID_SEQ;
 
 CREATE TABLE sediment_load_ls (
-    id                  int NOT NULL,
-    river_id            int NOT NULL,
-    grain_fraction_id   int,
-    unit_id             int NOT NULL,
-    time_interval_id    int NOT NULL,
-    sq_time_interval_id int,
+    id                  NUMERIC(9,0) NOT NULL,
+    river_id            NUMERIC(9,0) NOT NULL,
+    grain_fraction_id   NUMERIC(9,0),
+    unit_id             NUMERIC(9,0) NOT NULL,
+    time_interval_id    NUMERIC(9,0) NOT NULL,
+    sq_time_interval_id NUMERIC(9,0),
     description         VARCHAR(256),
-    kind                int,
+    kind                NUMERIC(9,0),
     PRIMARY KEY (id),
     CONSTRAINT fk_slls_river_id FOREIGN KEY (river_id)
         REFERENCES rivers(id) ON DELETE CASCADE,
@@ -301,10 +305,10 @@
 CREATE SEQUENCE SEDIMENT_LOAD_LS_VALUES_ID_SEQ;
 
 CREATE TABLE sediment_load_ls_values (
-    id                  int NOT NULL,
-    sediment_load_ls_id   int NOT NULL,
-    station             NUMERIC NOT NULL,
-    value               NUMERIC NOT NULL,
+    id                  NUMERIC(9,0) NOT NULL,
+    sediment_load_ls_id   NUMERIC(9,0) NOT NULL,
+    station             NUMERIC(7,3) NOT NULL,
+    value               NUMERIC(10,3) NOT NULL,
     PRIMARY KEY (id),
     CONSTRAINT fk_sllsv_sediment_load_ls_id FOREIGN KEY (sediment_load_ls_id)
         REFERENCES sediment_load_ls(id) ON DELETE CASCADE
@@ -313,10 +317,10 @@
 
 CREATE SEQUENCE MEASUREMENT_STATION_ID_SEQ;
 CREATE TABLE measurement_station (
-    id                       int          NOT NULL,
-    range_id                 int          NOT NULL,
-    reference_gauge_id       int,
-    time_interval_id         int,
+    id                       NUMERIC(9,0)          NOT NULL,
+    range_id                 NUMERIC(9,0)          NOT NULL,
+    reference_gauge_id       NUMERIC(9,0),
+    time_interval_id         NUMERIC(9,0),
     name                     VARCHAR(256) NOT NULL,
     measurement_type         VARCHAR(64)  NOT NULL,
     riverside                VARCHAR(16),
@@ -338,12 +342,12 @@
 CREATE SEQUENCE SEDIMENT_LOAD_ID_SEQ;
 
 CREATE TABLE sediment_load (
-    id                    int NOT NULL,
-    grain_fraction_id     int NOT NULL,
-    time_interval_id      int NOT NULL,
-    sq_time_interval_id   int,
+    id                    NUMERIC(9,0) NOT NULL,
+    grain_fraction_id     NUMERIC(9,0) NOT NULL,
+    time_interval_id      NUMERIC(9,0) NOT NULL,
+    sq_time_interval_id   NUMERIC(9,0),
     description           VARCHAR(256),
-    kind                  int,
+    kind                  NUMERIC(9,0),
     PRIMARY KEY (id),
     CONSTRAINT fk_sl_kind_id FOREIGN KEY (kind)
         REFERENCES sediment_load_kinds(id),
@@ -359,9 +363,9 @@
 CREATE SEQUENCE SEDIMENT_LOAD_VALUES_ID_SEQ;
 
 CREATE TABLE sediment_load_values (
-    id                      int NOT NULL,
-    sediment_load_id        int NOT NULL,
-    measurement_station_id  int NOT NULL,
+    id                      NUMERIC(9,0) NOT NULL,
+    sediment_load_id        NUMERIC(9,0) NOT NULL,
+    measurement_station_id  NUMERIC(9,0) NOT NULL,
     value                   DOUBLE PRECISION NOT NULL,
     PRIMARY KEY (id),
     CONSTRAINT fk_slv_sediment_load_id FOREIGN KEY (sediment_load_id)
@@ -374,8 +378,8 @@
 CREATE SEQUENCE SQ_RELATION_ID_SEQ;
 
 CREATE TABLE sq_relation (
-    id               int NOT NULL,
-    time_interval_id int NOT NULL,
+    id               NUMERIC(9,0) NOT NULL,
+    time_interval_id NUMERIC(9,0) NOT NULL,
     description      VARCHAR(256),
     PRIMARY KEY (id),
     CONSTRAINT fk_sqr_tinterval_id FOREIGN KEY (time_interval_id)
@@ -385,19 +389,20 @@
 
 CREATE SEQUENCE SQ_RELATION_VALUES_ID_SEQ;
 
+--FIXME: adjust precision and scale of the numerics
 CREATE TABLE sq_relation_value (
-    id                     int NOT NULL,
-    sq_relation_id         int NOT NULL,
-    measurement_station_id int NOT NULL,
+    id                     NUMERIC(9,0) NOT NULL,
+    sq_relation_id         NUMERIC(9,0) NOT NULL,
+    measurement_station_id NUMERIC(9,0) NOT NULL,
     parameter              VARCHAR(1) NOT NULL,
-    a                      NUMERIC NOT NULL,
-    b                      NUMERIC NOT NULL,
-    qmax                   NUMERIC NOT NULL,
-    rsq                    NUMERIC,
-    ntot                   int,
-    noutl                  int,
-    cferguson              NUMERIC,
-    cduan                  NUMERIC,
+    a                      NUMERIC(38,20) NOT NULL,
+    b                      NUMERIC(38,20) NOT NULL,
+    qmax                   NUMERIC(38,20) NOT NULL,
+    rsq                    NUMERIC(38,3),
+    ntot                   NUMERIC(9,0),
+    noutl                  NUMERIC(9,0),
+    cferguson              NUMERIC(38,20),
+    cduan                  NUMERIC(38,20),
     PRIMARY KEY (id),
     UNIQUE(sq_relation_id, measurement_station_id, parameter),
     CONSTRAINT fk_sqr_id FOREIGN KEY (sq_relation_id)

http://dive4elements.wald.intevation.org