Files
myhealth/2.database/01.CreateTables.sql
2019-12-22 07:22:56 +01:00

265 lines
8.9 KiB
SQL

DO
$$
begin
IF NOT EXISTS(SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'myhealth') THEN
CREATE SCHEMA myhealth;
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='usrmyhealth') THEN
create user usrmyhealth with encrypted password 'myhealth.123';
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='USER') THEN
create user "USER" with encrypted password 'PASSWORD';
END IF;
GRANT ALL ON SCHEMA myhealth TO "USER";
GRANT ALL ON SCHEMA myhealth TO usrmyhealth;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='administrator') THEN
drop table myhealth.administrator;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='medicaltest') THEN
drop table myhealth.medicaltest;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='question') THEN
drop table myhealth.question;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='response') THEN
drop table myhealth.response;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='visit') THEN
drop table myhealth.visit;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='patient') THEN
drop table myhealth.patient;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='familydoctor') THEN
drop table myhealth.familydoctor;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='primaryhealthcarecenter') THEN
drop table myhealth.primaryhealthcarecenter;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='specialistdoctor') THEN
drop table myhealth.specialistdoctor;
end if;
if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='medicalspecialty') THEN
drop table myhealth.medicalspecialty;
end if;
/*
drop table myhealth.administrator;
drop table myhealth.familydoctor;
drop table myhealth.medicalspecialty;
drop table myhealth.medicaltest;
drop table myhealth.patient;
drop table myhealth.primaryhealthcarecenter;
drop table myhealth.question;
drop table myhealth.response;
drop table myhealth.specialistdoctor;
drop table myhealth.visit;
*/
if exists (SELECT 1 FROM pg_sequences WHERE schemaname='myhealth' and sequencename='profesionalnumber') THEN
drop sequence myhealth.profesionalnumber;
end if;
if exists (SELECT 1 FROM pg_sequences WHERE schemaname='myhealth' and sequencename='codigoidentificacionpaciente') THEN
drop sequence myhealth.codigoidentificacionpaciente;
end if;
CREATE SEQUENCE myhealth.profesionalnumber
INCREMENT 1
START 1000
MINVALUE 1000
CACHE 1;
CREATE SEQUENCE myhealth.codigoidentificacionpaciente
INCREMENT 1
START 1000
MINVALUE 1000
CACHE 1;
-- Table: myhealth.administrator
-- DROP TABLE myhealth.administrator;
CREATE TABLE myhealth.administrator
(
email VARCHAR(120) COLLATE pg_catalog."default" NOT NULL,
password VARCHAR(100) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT administrator_pkey PRIMARY KEY (email)
)
TABLESPACE pg_default;
ALTER TABLE myhealth.administrator
OWNER to "USER";
-- Table: myhealth.primaryhealthcarecenter
-- DROP TABLE myhealth.primaryhealthcarecenter;
CREATE TABLE myhealth.primaryhealthcarecenter
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
name VARCHAR(150) COLLATE pg_catalog."default" NOT NULL,
location VARCHAR(512) COLLATE pg_catalog."default",
CONSTRAINT primaryhealthcarecenter_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE myhealth.primaryhealthcarecenter
OWNER to "USER";
-- Table: myhealth.familydoctor
-- DROP TABLE myhealth.familydoctor;
CREATE TABLE myhealth.familydoctor
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
professionalnumber VARCHAR(15) NOT NULL COLLATE pg_catalog."default",
password VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
nif VARCHAR(50) NOT NULL COLLATE pg_catalog."default",
name VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
surname VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
email VARCHAR(120) COLLATE pg_catalog."default",
primaryhealthcarecenterid integer REFERENCES myhealth.primaryhealthcarecenter(id) ,
CONSTRAINT familydoctor_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
CREATE UNIQUE INDEX family_doctor_professionaln_index
ON myhealth.familydoctor (professionalnumber);
ALTER TABLE myhealth.familydoctor
OWNER to "USER";
-- Table: myhealth.medicalspecialty
-- DROP TABLE myhealth.medicalspecialty;
CREATE TABLE myhealth.medicalspecialty
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
name VARCHAR(50) COLLATE pg_catalog."default" NOT NULL UNIQUE,
description VARCHAR(1000) COLLATE pg_catalog."default",
CONSTRAINT medicalspecialty_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE myhealth.medicalspecialty
OWNER to "USER";
-- Table: myhealth.patient
-- DROP TABLE myhealth.patient;
CREATE TABLE myhealth.patient
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
personalIdentificationCode VARCHAR(15) NOT NULL COLLATE pg_catalog."default",
password VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
nif VARCHAR(50) NOT NULL COLLATE pg_catalog."default",
name VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
surname VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
email VARCHAR(120) COLLATE pg_catalog."default",
familydoctorid INTEGER REFERENCES myhealth.familydoctor(id),
CONSTRAINT patient_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
CREATE UNIQUE INDEX patient_pic_index
ON myhealth.patient (personalIdentificationCode);
ALTER TABLE myhealth.patient
OWNER to "USER";
-- Table: myhealth.specialistdoctor
-- DROP TABLE myhealth.specialistdoctor;
CREATE TABLE myhealth.specialistdoctor
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
professionalnumber VARCHAR(15) NOT NULL COLLATE pg_catalog."default",
password VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
nif VARCHAR(50) NOT NULL COLLATE pg_catalog."default",
name VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
surname VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
email VARCHAR(120) COLLATE pg_catalog."default",
medicalspecialtyid INTEGER REFERENCES myhealth.medicalspecialty(id),
CONSTRAINT specialistdoctor_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
CREATE UNIQUE INDEX specialistdoctor_professionaln_index
ON myhealth.specialistdoctor (professionalnumber);
ALTER TABLE myhealth.specialistdoctor
OWNER to "USER";
-- Table: myhealth.visit
-- DROP TABLE myhealth.visit;
CREATE TABLE myhealth.visit
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
date date NOT NULL,
"time" abstime NOT NULL,
observations TEXT COLLATE pg_catalog."default",
result TEXT COLLATE pg_catalog."default",
patientid INTEGER REFERENCES myhealth.patient(id),
familydoctorid INTEGER REFERENCES myhealth.familydoctor(id),
CONSTRAINT visit_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE myhealth.visit
OWNER to "USER";
-- Table: myhealth.question
-- DROP TABLE myhealth.question;
CREATE TABLE myhealth.question
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
title VARCHAR(512) COLLATE pg_catalog."default" NOT NULL,
message TEXT COLLATE pg_catalog."default" NOT NULL,
status INTEGER,
response TEXT COLLATE pg_catalog."default",
patientid INTEGER REFERENCES myhealth.patient(id),
familydoctorid INTEGER REFERENCES myhealth.familydoctor(id),
CONSTRAINT question_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE myhealth.question
OWNER to "USER";
-- Table: myhealth.medicaltest
-- DROP TABLE myhealth.medicaltest;
CREATE TABLE myhealth.medicaltest
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
date DATE,
"time" TIME,
observations TEXT COLLATE pg_catalog."default",
highresimage bytea,
type INTEGER,
patientid INTEGER REFERENCES myhealth.patient(id),
specialistdoctorid INTEGER REFERENCES myhealth.specialistdoctor(id),
CONSTRAINT medicaltest_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE myhealth.medicaltest
OWNER to "USER";
END;
$$