79 lines
1.6 KiB
MySQL
79 lines
1.6 KiB
MySQL
|
-- +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;
|