Fixes #8: merges measurement tables.

This commit is contained in:
Matthew Dillon 2014-11-13 17:12:04 -09:00
parent 68b98f6d6b
commit 01036de04d
10 changed files with 36 additions and 76 deletions

View file

@ -0,0 +1,5 @@
-- bactdb
-- Matthew R Dillon
DROP TABLE text_measurement_types;

View file

@ -1,7 +1,7 @@
-- bactdb
-- Matthew R Dillon
CREATE TABLE text_measurements (
CREATE TABLE text_measurement_types (
id BIGSERIAL NOT NULL,
text_measurement_name CHARACTER VARYING(100),

View file

@ -1,5 +0,0 @@
-- bactdb
-- Matthew R Dillon
DROP TABLE text_measurements;

View file

@ -1,5 +0,0 @@
-- bactdb
-- Matthew R Dillon
DROP TABLE numerical_measurements;

View file

@ -1,17 +0,0 @@
-- bactdb
-- Matthew R Dillon
CREATE TABLE numerical_measurements (
id BIGSERIAL NOT NULL,
measurement_value NUMERIC(6, 4) NOT NULL,
confidence_interval NUMERIC(6,4) NULL,
unit_type_id BIGINT,
created_at TIMESTAMP WITH TIME ZONE,
updated_at TIMESTAMP WITH TIME ZONE,
deleted_at TIMESTAMP WITH TIME ZONE,
CONSTRAINT numerical_measurements_pkey PRIMARY KEY (id),
FOREIGN KEY (unit_type_id) REFERENCES unit_types(id)
);

View file

@ -0,0 +1,30 @@
-- bactdb
-- Matthew R Dillon
CREATE TABLE strainsobsmeasurements (
id BIGSERIAL NOT NULL,
strainsobservations_id BIGINT,
text_measurement_type_id BIGINT NULL,
measurement_value NUMERIC(6, 4) NULL,
confidence_interval NUMERIC(6, 4) NULL,
unit_type_id BIGINT NULL,
created_at TIMESTAMP WITH TIME ZONE,
updated_at TIMESTAMP WITH TIME ZONE,
deleted_at TIMESTAMP WITH TIME ZONE,
CONSTRAINT strainsobsmeasurements_pkey PRIMARY KEY (id),
FOREIGN KEY (strainsobservations_id) REFERENCES strainsobservations(id),
FOREIGN KEY (text_measurement_type_id) REFERENCES text_measurement_types(id),
FOREIGN KEY (unit_type_id) REFERENCES unit_types(id),
CONSTRAINT exclusive_data_type CHECK (
(text_measurement_type_id IS NOT NULL
AND measurement_value IS NULL
AND confidence_interval IS NULL
AND unit_type_id IS NULL)
OR
(text_measurement_type_id IS NULL
AND measurement_value IS NOT NULL))
);

View file

@ -1,17 +0,0 @@
-- bactdb
-- Matthew R Dillon
CREATE TABLE strainsobsmeasurements (
id BIGSERIAL NOT NULL,
strainsobservations_id BIGINT,
measurement_table CHARACTER VARYING(15),
measurement_id BIGINT,
created_at TIMESTAMP WITH TIME ZONE,
updated_at TIMESTAMP WITH TIME ZONE,
deleted_at TIMESTAMP WITH TIME ZONE,
CONSTRAINT strainsobsmeasurements_pkey PRIMARY KEY (id),
FOREIGN KEY (strainsobservations_id) REFERENCES strainsobservations(id)
);

View file

@ -1,5 +0,0 @@
-- bactdb
-- Matthew R Dillon
DROP VIEW IF EXISTS v_measurements;

View file

@ -1,26 +0,0 @@
-- bactdb
-- Matthew R Dillon
CREATE OR REPLACE VIEW v_measurements AS
SELECT s.strain_name,
o.observation_name,
som.measurement_table,
tm.text_measurement_name,
nm.measurement_value,
nm.confidence_interval,
nm.unit_type_id
FROM strainsobsmeasurements som
INNER JOIN strainsobservations so
ON som.strainsobservations_id = so.id
INNER JOIN strains s
ON so.strain_id = s.id
INNER JOIN observations o
ON so.observations_id = o.id
LEFT OUTER JOIN text_measurements tm
ON som.measurement_id = tm.id
AND som.measurement_table = 'text'
LEFT OUTER JOIN numerical_measurements nm
ON som.measurement_id = nm.id
AND som.measurement_table = 'num'
ORDER BY measurement_table, o.observation_name ASC