206 lines
5.7 KiB
SQL
206 lines
5.7 KiB
SQL
CREATE TABLE schoolyears (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
name VARCHAR NOT NULL,
|
|
active BOOLEAN NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE UNIQUE INDEX schoolyears_active ON schoolyears(active)
|
|
WHERE
|
|
active;
|
|
|
|
CREATE TABLE tenants (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
name VARCHAR NOT NULL,
|
|
active BOOLEAN NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE UNIQUE INDEX tenants_active ON tenants(active)
|
|
WHERE
|
|
active;
|
|
|
|
CREATE TABLE teachers (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
name VARCHAR NOT NULL,
|
|
forename VARCHAR,
|
|
display_name VARCHAR NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE classes (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
name VARCHAR NOT NULL,
|
|
long_name VARCHAR NOT NULL,
|
|
active BOOLEAN NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE subjects (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
name VARCHAR NOT NULL,
|
|
long_name VARCHAR NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE rooms (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
name VARCHAR NOT NULL,
|
|
long_name VARCHAR NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE departments (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
name VARCHAR NOT NULL,
|
|
long_name VARCHAR NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE holidays (
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
name VARCHAR NOT NULL,
|
|
long_name VARCHAR NOT NULL,
|
|
start_date DATE NOT NULL,
|
|
end_date DATE NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE timegrids (
|
|
id SERIAL PRIMARY KEY,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
active BOOLEAN NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE UNIQUE INDEX timegrids_active ON timegrids(active)
|
|
WHERE
|
|
active;
|
|
|
|
CREATE TYPE weekday AS ENUM (
|
|
'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'
|
|
);
|
|
|
|
CREATE TABLE timegrid_days (
|
|
id SERIAL PRIMARY KEY,
|
|
timegrid_id INTEGER NOT NULL REFERENCES timegrids(id),
|
|
weekday weekday NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE timegrid_time_unit (
|
|
id SERIAL PRIMARY KEY,
|
|
timegrid_day_id INTEGER NOT NULL REFERENCES timegrid_days(id),
|
|
start_time TIME NOT NULL,
|
|
end_time TIME NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TYPE week_type AS ENUM ('a', 'b');
|
|
|
|
CREATE TABLE substitution_queries (
|
|
id SERIAL PRIMARY KEY,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
date DATE NOT NULL,
|
|
week_type week_type NOT NULL,
|
|
queried_at TIMESTAMP NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TYPE substitution_type AS ENUM (
|
|
'cancel',
|
|
'subst',
|
|
'add',
|
|
'shift',
|
|
'rmchg',
|
|
'rmlk',
|
|
'bs',
|
|
'oh',
|
|
'sb',
|
|
'other',
|
|
'free',
|
|
'exam',
|
|
'ac',
|
|
'holi',
|
|
'stxt'
|
|
);
|
|
|
|
CREATE TABLE substitutions(
|
|
id SERIAL PRIMARY KEY,
|
|
substitution_query_id INTEGER NOT NULL REFERENCES substitution_queries(id),
|
|
subst_type substitution_type NOT NULL,
|
|
lesson_id INTEGER NOT NULL,
|
|
start_time TIME NOT NULL,
|
|
end_time TIME NOT NULL,
|
|
text VARCHAR,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE substitution_classes (
|
|
id SERIAL PRIMARY KEY,
|
|
substitution_id INTEGER NOT NULL REFERENCES substitutions(id),
|
|
position SMALLINT NOT NULL,
|
|
class_id INTEGER NOT NULL REFERENCES classes(id),
|
|
original_id INTEGER REFERENCES classes(id),
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE substitution_teachers (
|
|
id SERIAL PRIMARY KEY,
|
|
substitution_id INTEGER NOT NULL REFERENCES substitutions(id),
|
|
position SMALLINT NOT NULL,
|
|
teacher_id INTEGER REFERENCES teachers(id),
|
|
original_id INTEGER REFERENCES teachers(id),
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE substitution_subjects (
|
|
id SERIAL PRIMARY KEY,
|
|
substitution_id INTEGER NOT NULL REFERENCES substitutions(id),
|
|
position SMALLINT NOT NULL,
|
|
subject_id INTEGER NOT NULL REFERENCES subjects(id),
|
|
original_id INTEGER REFERENCES subjects(id),
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE substitution_rooms (
|
|
id SERIAL PRIMARY KEY,
|
|
substitution_id INTEGER NOT NULL REFERENCES substitutions(id),
|
|
position SMALLINT NOT NULL,
|
|
room_id INTEGER REFERENCES rooms(id),
|
|
original_id INTEGER REFERENCES rooms(id),
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|