ErdDocs

Beispiele / Schulverwaltung

Schulverwaltung

Die Datenbank einer Schule verbindet Schüler und Fächer über Belegungen. Das ist eine Zwischentabelle, die auch die Note speichert. Lehrkräfte unterrichten Kurse eines Fachs in einem bestimmten Halbjahr. Die Anwesenheit hängt an der Belegung, mit einer Zeile je Schüler und Unterrichtstag.

Unten zeichnet ErdDocs dieses Schema aus seinem SQL, mit allen Tabellen und Beziehungen. Im Reiter „Data Dictionary“ finden Sie das druckbare Nachschlagewerk, vollständig und kostenlos auf dieser Seite. Das SQL steht weiter unten.

Ihr Schema

Fahren Sie über eine Tabelle, um ihre Beziehungen hervorzuheben. Ein Klick hält sie fest.

Wozu jede Tabelle dient

  • students / teachersGetrennte Tabellen. Schüler und Lehrkräfte haben nur den Namen gemeinsam, Lebenszyklus und Daten sind verschieden.
  • coursesDer Eintrag im Lehrplan. CS-101 gibt es nur einmal, egal wie oft das Fach angeboten wird.
  • sectionsDer Kurs: ein Fach in einem Halbjahr bei einer Lehrkraft. Daran nehmen Schüler tatsächlich teil.
  • enrollmentsZwischentabelle zwischen Schüler und Kurs. Außer den Verweisen speichert sie die Note.
  • attendanceHängt über einen zusammengesetzten Fremdschlüssel an der Belegung. Niemand kann in einem Kurs anwesend sein, den er nicht belegt hat.

Entwurfsentscheidungen zum Übernehmen

  • Die Trennung von Fach und Kurs ist die Grundlage des Schemas. Schreibt man Schüler direkt in „Fächer“ ein, bricht alles zusammen, sobald ein Fach zweimal läuft. Dann gibt es zwei Halbjahre und zwei Lehrkräfte, aber nur eine Notenspalte. Niemand weiß mehr, worauf sich die Note bezieht.
  • Die Anwesenheit verweist über einen zusammengesetzten Fremdschlüssel (student_id, section_id) auf die Belegung. Deshalb lehnt die Datenbank selbst eine Anwesenheit ab, wenn der Schüler nicht eingeschrieben ist.
  • Die Note darf NULL sein und hat keinen Standardwert. Eine fehlende Note heißt, dass das Halbjahr noch läuft, und nicht, dass jemand eine Sechs bekommen hat.

Das SQL

PostgreSQL-Dialekt. Im Tool oben steht dieses SQL schon. Sie dürfen es frei kopieren und in die eigene Datenbank oder eine Migration übernehmen.

CREATE TABLE students (
    id          bigserial    PRIMARY KEY,
    student_no  varchar(20)  NOT NULL UNIQUE,
    full_name   varchar(120) NOT NULL,
    enrolled_on date         NOT NULL
);

CREATE TABLE teachers (
    id         bigserial    PRIMARY KEY,
    full_name  varchar(120) NOT NULL,
    department varchar(80)  NOT NULL
);

CREATE TABLE courses (
    id      bigserial    PRIMARY KEY,
    code    varchar(12)  NOT NULL UNIQUE,
    title   varchar(160) NOT NULL,
    credits int          NOT NULL
);
COMMENT ON COLUMN courses.code IS 'Fachkürzel, z. B. CS-101';

CREATE TABLE sections (
    id          bigserial   PRIMARY KEY,
    course_id   bigint      NOT NULL REFERENCES courses(id),
    teacher_id  bigint      NOT NULL REFERENCES teachers(id),
    term        varchar(20) NOT NULL,
    room        varchar(20)
);
COMMENT ON TABLE sections IS 'Ein Fach, das eine Lehrkraft in einem Halbjahr anbietet; Schüler belegen Kurse, nicht Fächer';

CREATE TABLE enrollments (
    student_id  bigint     NOT NULL REFERENCES students(id),
    section_id  bigint     NOT NULL REFERENCES sections(id),
    grade       varchar(2),
    PRIMARY KEY (student_id, section_id)
);
COMMENT ON COLUMN enrollments.grade IS 'NULL bis zum Ende des Halbjahres';

CREATE TABLE attendance (
    student_id  bigint  NOT NULL,
    section_id  bigint  NOT NULL,
    class_date  date    NOT NULL,
    present     boolean NOT NULL,
    PRIMARY KEY (student_id, section_id, class_date),
    FOREIGN KEY (student_id, section_id) REFERENCES enrollments(student_id, section_id)
);

Häufige Fragen

Wohin gehören Eltern oder Erziehungsberechtigte?

In eine Tabelle guardians und eine Zwischentabelle student_guardians. Das ist eine n:m-Beziehung, denn Geschwister teilen sich Erziehungsberechtigte, und ein Schüler kann mehrere haben.

Warum steht teacher_id nicht in courses?

Weil dasselbe Fach in verschiedenen Halbjahren von verschiedenen Lehrkräften unterrichtet wird. Die Lehrkraft gehört zum Kurs, nicht zum Eintrag im Lehrplan.

Weitere Beispiele