-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschema.sql
120 lines (107 loc) · 3.61 KB
/
schema.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
\set AUTOCOMMIT FALSE
\echo :AUTOCOMMIT
DROP TABLE IF EXISTS posts;
DROP TABLE IF EXISTS threads;
DROP TABLE IF EXISTS employees;
DROP TABLE IF EXISTS employees_backup;
DROP TABLE IF EXISTS patients;
DROP TABLE IF EXISTS patients_backup;
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS users_backup;
CREATE TABLE IF NOT EXISTS users(
CPR char(10) PRIMARY KEY,
firstname varchar(120),
lastname varchar(120),
password varchar(120) NOT NULL,
address text DEFAULT 'Adresse ikke sat',
created_date timestamp DEFAULT CURRENT_TIMESTAMP,
last_online_date timestamp DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS users_backup(
CPR char(10) PRIMARY KEY,
firstname varchar(120) NOT NULL,
lastname varchar(120) NOT NULL,
password varchar(120) NOT NULL,
address text DEFAULT 'Adresse ikke sat',
created_date timestamp DEFAULT CURRENT_TIMESTAMP,
last_online_date timestamp DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS employees(
CPR char(10) PRIMARY KEY,
specialization varchar(100) NOT NULL,
temp boolean DEFAULT TRUE,
privilege integer DEFAULT 0,
works_at integer NOT NULL,
FOREIGN KEY (CPR) REFERENCES users(CPR)
--FOREIGN KEY (works_at) REFERENCES departments(id)
);
CREATE TABLE IF NOT EXISTS employees_backup(
CPR char(10) PRIMARY KEY,
specialization varchar(100) NOT NULL,
temp boolean DEFAULT TRUE,
privilege integer DEFAULT 0,
works_at integer NOT NULL,
FOREIGN KEY (CPR) REFERENCES users(CPR)
--FOREIGN KEY (works_at) REFERENCES departments(id)
);
CREATE TABLE IF NOT EXISTS patients(
CPR char(10) PRIMARY KEY,
journal integer,
process_id integer,
FOREIGN KEY (CPR) REFERENCES users(CPR)
--FOREIGN KEY (journal) REFERENCES journals(id)
--FOREIGN KEY (process_id) REFERENCES process(id)
);
CREATE TABLE IF NOT EXISTS patients_backup(
CPR char(10) PRIMARY KEY,
journal integer,
process_id integer,
FOREIGN KEY (CPR) REFERENCES users(CPR)
--FOREIGN KEY (journal) REFERENCES journals(id)
--FOREIGN KEY (process_id) REFERENCES process(id)
);
CREATE TABLE IF NOT EXISTS threads(
id SERIAL PRIMARY KEY,
CPR char(10) NOT NULL,
header varchar(100) NOT NULL,
content text NOT NULL,
created_date timestamp DEFAULT CURRENT_TIMESTAMP,
is_open boolean DEFAULT TRUE,
FOREIGN KEY (CPR) REFERENCES users(CPR)
);
CREATE TABLE IF NOT EXISTS posts(
id SERIAL PRIMARY KEY,
tid integer NOT NULL,
CPR char(10) NOT NULL,
content text NOT NULL,
created_date timestamp DEFAULT CURRENT_TIMESTAMP,
modified_date timestamp DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tid) REFERENCES threads(id),
FOREIGN KEY (CPR) REFERENCES users(CPR)
);
DROP TRIGGER IF EXISTS insert_user ON users;
DROP TRIGGER IF EXISTS insert_patient ON patients;
DROP TRIGGER IF EXISTS insert_employee ON employees;
CREATE OR REPLACE FUNCTION update_userbackup() RETURNS trigger AS $update_userbackup$
BEGIN
NEW.CPR = OLD.CPR;
IF (OLD.firstname IS DISTINCT FROM NEW.firstname) THEN
EXECUTE CONCAT('UPDATE users_backup SET firstname = ', NEW.firstname, 'WHERE CPR = ', OLD.CPR);
END IF;
IF (OLD.lastname IS DISTINCT FROM NEW.lastname) THEN
EXECUTE CONCAT('UPDATE users_backup SET lastname = ', NEW.lastname, 'WHERE CPR = ', OLD.CPR);
END IF;
IF (OLD.password IS DISTINCT FROM NEW.password) THEN
EXECUTE CONCAT('UPDATE users_backup SET password = ', NEW.password, 'WHERE CPR = ', OLD.CPR);
END IF;
IF (OLD.address IS DISTINCT FROM NEW.address) THEN
EXECUTE CONCAT('UPDATE users_backup SET address = ', NEW.address, 'WHERE CPR = ', OLD.CPR);
END IF;
RETURN NEW;
END;
$update_userbackup$ LANGUAGE plpgsql;
CREATE TRIGGER insert_user AFTER UPDATE ON users
FOR ROW
WHEN (OLD.* IS DISTINCT FROM NEW.*)
EXECUTE PROCEDURE update_userbackup();
COMMIT;