79 lines
No EOL
1.6 KiB
SQL
79 lines
No EOL
1.6 KiB
SQL
-- +micrate Up
|
|
-- SQL in section 'Up' is executed when this migration is applied
|
|
CREATE TYPE user_roles AS ENUM ('Admin', 'Teacher', 'Student');
|
|
|
|
CREATE TABLE users(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
firstname TEXT NOT NULL,
|
|
lastname TEXT NOT NULL,
|
|
email TEXT NOT NULL,
|
|
PASSWORD TEXT NOT NULL,
|
|
role user_roles NOT NULL,
|
|
blocked BOOLEAN NOT NULL,
|
|
UNIQUE (firstname, lastname, email)
|
|
);
|
|
|
|
CREATE TABLE admins(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL UNIQUE REFERENCES users(id)
|
|
);
|
|
|
|
CREATE TABLE teachers(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL UNIQUE REFERENCES users(id),
|
|
max_students INT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE students(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL UNIQUE REFERENCES users(id),
|
|
skif BOOLEAN NOT NULL
|
|
);
|
|
|
|
ALTER TABLE
|
|
users
|
|
ADD
|
|
COLUMN admin_id BIGINT UNIQUE REFERENCES admins(id);
|
|
|
|
ALTER TABLE
|
|
users
|
|
ADD
|
|
COLUMN teacher_id BIGINT UNIQUE REFERENCES teachers(id);
|
|
|
|
ALTER TABLE
|
|
users
|
|
ADD
|
|
COLUMN student_id BIGINT UNIQUE REFERENCES students(id);
|
|
|
|
CREATE TABLE votes(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
student_id BIGINT NOT NULL UNIQUE REFERENCES students(id)
|
|
);
|
|
|
|
ALTER TABLE
|
|
students
|
|
ADD
|
|
COLUMN vote_id BIGINT UNIQUE REFERENCES votes(id);
|
|
|
|
CREATE TABLE teacher_votes(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
vote_id BIGINT NOT NULL REFERENCES votes(id),
|
|
teacher_id BIGINT NOT NULL REFERENCES teachers(id),
|
|
priority INT NOT NULL
|
|
);
|
|
|
|
-- +micrate Down
|
|
-- SQL section 'Down' is executed when this migration is rolled back
|
|
DROP TABLE teacher_votes;
|
|
|
|
DROP TABLE votes;
|
|
|
|
DROP TABLE users;
|
|
|
|
DROP TABLE admins;
|
|
|
|
DROP TABLE teachers;
|
|
|
|
DROP TABLE students;
|
|
|
|
DROP TYPE user_roles; |