CREATE TABLE composer (
    id INTEGER NOT NULL PRIMARY KEY,
    Vorname VARCHAR(255) NOT NULL,
    Name VARCHAR(255) NOT NULL,
    Geburtsdatum DATE NOT NULL,
    Sterbedatum DATE
);

CREATE TABLE Werk (
    id INTEGER NOT NULL PRIMARY KEY,
    Komp_id INTEGER NOT NULL,
    VOE_Jahr INTEGER,
    Opus VARCHAR(15),
    Sammlung VARCHAR(127),
    Haupttonart VARCHAR(15),
    Titel VARCHAR(127),
    Satztitel VARCHAR(127),
    Aliasname VARCHAR(127),
    Werkverzeichnis VARCHAR(31),
    Werkverzeichnisnummer VARCHAR(15),
    FOREIGN KEY(Komp_id) REFERENCES composer(id)
);

CREATE TABLE Satz (
    Werk_id INTEGER NOT NULL,
    Lfd_Satznummer INTEGER NOT NULL,
    Nummer VARCHAR(15),
    Bezeichnung VARCHAR(63),
    Tonart VARCHAR(15),
    Aufnahme BLOB,
    PRIMARY KEY(Werk_id, Lfd_Satznummer),
    FOREIGN KEY(Werk_id) REFERENCES Werk(id)
);

CREATE TABLE Spieler_in (
    id INTEGER NOT NULL PRIMARY KEY,
    Vorname VARCHAR(255) NOT NULL,
    Nachname VARCHAR(255) NOT NULL
);

CREATE TABLE Konzert (
    id INTEGER NOT NULL PRIMARY KEY,
    Datum DATE,
    Uhrzeit VARCHAR(5),
    Saal VARCHAR(255)
);

CREATE TABLE beherrscht(
    Werk_id INTEGER NOT NULL,
    Satz_id INTEGER NOT NULL,
    Spieler_in_id INTEGER NOT NULL,
    Vorlauf INTEGER DEFAULT 7,
    PRIMARY KEY(Werk_id, Satz_id, Spieler_in_id),
    FOREIGN KEY(Werk_id, Satz_id) REFERENCES Satz(Werk_id, Lfd_Satznummer),
    FOREIGN KEY(Spieler_in_id) REFERENCES Spieler_in(id)
);

CREATE TABLE spielt_in(
    Konzert_id INTEGER NOT NULL,
    Spieler_in_id INTEGER NOT NULL,
    Werk_id INTEGER NOT NULL,
    Satz_id INTEGER NOT NULL,
    PRIMARY KEY(Konzert_id, Spieler_in_id, Werk_id, Satz_id),
    FOREIGN KEY(Konzert_id) REFERENCES Konzert(id),
    FOREIGN KEY(Werk_id, Satz_id) REFERENCES Satz(Werk_id, Lfd_Satznummer),
    FOREIGN KEY(Spieler_in_id) REFERENCES Spieler_in(id)
);
