188 lines
No EOL
5 KiB
SQL
188 lines
No EOL
5 KiB
SQL
CREATE TABLE schoolyears(
|
|
id SERIAL PRIMARY KEY,
|
|
untis_id INTEGER NOT NULL UNIQUE,
|
|
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 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 DEFAULT FALSE,
|
|
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),
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE timegrid_days(
|
|
id SERIAL PRIMARY KEY,
|
|
timegrid_id INTEGER NOT NULL REFERENCES timegrids(id),
|
|
day_index SMALLINT 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 TABLE substitution_queries(
|
|
id SERIAL PRIMARY KEY,
|
|
schoolyear_id INTEGER NOT NULL REFERENCES schoolyears(id),
|
|
date DATE NOT NULL UNIQUE,
|
|
active BOOLEAN NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX substitution_queries_active ON substitution_queries(active);
|
|
|
|
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),
|
|
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),
|
|
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),
|
|
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),
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP
|
|
); |