***********************************************************
***********************************************************
Andreas Stern: "Keine Angst vor Microsoft Access!"
SQL-Befehle zur Erstellung der Datenbank "Verleih" V601
11.2.2019
www.andreasstern.de
***********************************************************
***********************************************************

***********************************************************
Mit den folgenden Befehlen werden zwar die Fremdschlsselspalten
schon angelegt - zunchst werden aber noch KEINE Beziehungen
zwischen den Tabellen hergestellt!!
***********************************************************

CREATE TABLE tblAutor
(
    autor_id           COUNTER               NOT NULL,
    autor_name         TEXT(50)              NOT NULL,
    autor_vorname      TEXT(50)              NULL    ,
    autor_bemerkung    MEMO                  NULL    ,
    CONSTRAINT pk_tblautor PRIMARY KEY (autor_id)
);

CREATE TABLE tblKontakttyp
(
    ktyp_id            COUNTER               NOT NULL,
    ktyp_name          TEXT(50)              NOT NULL,
    CONSTRAINT pk_tblkontakttyp PRIMARY KEY (ktyp_id)
);

CREATE TABLE tblLagertyp
(
    ltyp_id            COUNTER               NOT NULL,
    ltyp_name          TEXT(30)              NOT NULL,
    CONSTRAINT pk_tbllagertyp PRIMARY KEY (ltyp_id)
);

CREATE TABLE tblMahnung
(
    mahn_id            COUNTER               NOT NULL,
    mahn_datum         DateTime              NOT NULL,
    mahn_bemerkung     MEMO                  NULL    ,
    CONSTRAINT pk_tblmahnung PRIMARY KEY (mahn_id)
);

CREATE TABLE tblOrt
(
    ort_id             COUNTER               NOT NULL,
    ort_bezeichnung    TEXT(50)              NOT NULL,
    ort_bemerkung      MEMO                  NULL    ,
    CONSTRAINT pk_tblort PRIMARY KEY (ort_id)
);

CREATE TABLE tblPerson
(
    per_id             COUNTER               NOT NULL,
    per_name           TEXT(50)              NOT NULL,
    per_vorname        TEXT(50)              NULL    ,
    per_bemerkung      MEMO                  NULL    ,
    CONSTRAINT pk_tblperson PRIMARY KEY (per_id)
);

CREATE TABLE tblSachgebiet
(
    sachgebiet         TEXT(255)             NOT NULL,
    obersachgebiet     TEXT(255)             NOT NULL,
    CONSTRAINT pk_tblsachgebiet PRIMARY KEY (sachgebiet)
);

CREATE TABLE tblVerlag
(
    ver_id             COUNTER               NOT NULL,
    ver_name           TEXT(50)              NOT NULL,
    ver_ort            TEXT(50)              NULL    ,
    ver_bemerkung      MEMO                  NULL    ,
    CONSTRAINT pk_tblverlag PRIMARY KEY (ver_id)
);

CREATE TABLE tblZustand
(
    zust_id            COUNTER               NOT NULL,
    zust_name          TEXT(30)              NOT NULL,
    CONSTRAINT pk_tblzustand PRIMARY KEY (zust_id)
);

CREATE TABLE tblLager
(
    lager_id           COUNTER               NOT NULL,
    ort_id_f           LONG                  NULL    ,
    ltyp_id_f          LONG                  NOT NULL,
    lager_bezeichnung  TEXT(50)              NOT NULL,
    lager_anzahl       LONG                  NULL    ,
    lager_kapazitaet   LONG                  NULL    ,
    lager_bemerkung    MEMO                  NULL    ,
    CONSTRAINT pk_tbllager PRIMARY KEY (lager_id)
);

CREATE TABLE tblBuch
(
    buch_id            COUNTER               NOT NULL,
    zust_id_f          LONG                  NULL    ,
    lager_id_f         LONG                  NULL    ,
    ver_id_f           LONG                  NULL    ,
    buch_titel         TEXT(255)             NOT NULL,
    buch_nummer        TEXT(50)              NULL    ,
    buch_jahr          LONG                  NULL    ,
    buch_seiten        LONG                  NULL    ,
    buch_bemerkung     MEMO                  NULL    ,
    CONSTRAINT pk_tblbuch PRIMARY KEY (buch_id)
);

CREATE TABLE tblAusleihe
(
    aus_id             COUNTER               NOT NULL,
    buch_id_f          LONG                  NOT NULL,
    per_id_f           LONG                  NOT NULL,
    aus_von            DateTime              NOT NULL,
    aus_bis            DateTime              NULL    ,
    aus_bemerkung      MEMO                  NULL    ,
    CONSTRAINT pk_tblausleihe PRIMARY KEY (aus_id)
);

CREATE TABLE tblKontakt
(
    kon_id             COUNTER               NOT NULL,
    per_id_f           LONG                  NOT NULL,
    ktyp_id_f          LONG                  NOT NULL,
    kon_kontakt        TEXT(255)             NULL    ,
    kon_bemerkung      MEMO                  NULL    ,
    CONSTRAINT pk_tblkontakt PRIMARY KEY (kon_id)
);

CREATE TABLE tblAus_Mahn
(
    ausmahn_id         COUNTER               NOT NULL,
    aus_id_f           LONG                  NOT NULL,
    mahn_id_f          LONG                  NOT NULL,
    CONSTRAINT pk_tblaus_mahn PRIMARY KEY (ausmahn_id)
);

CREATE TABLE tblAutor_Buch
(
    autorbuch_id       COUNTER               NOT NULL,
    autor_id_f         LONG                  NOT NULL,
    buch_id_f          LONG                  NOT NULL,
    CONSTRAINT pk_tblautor_buch PRIMARY KEY (autorbuch_id)
);

CREATE TABLE tblBuch_Sach
(
    buchsach_id        COUNTER               NOT NULL,
    buch_id_f          LONG                  NOT NULL,
    sachgebiet_f       TEXT(255)             NOT NULL,
    CONSTRAINT pk_tblbuch_sach PRIMARY KEY (buchsach_id)
);


***********************************************************
JETZT werden die Beziehungen hergestellt, d.h. jetzt wird
festgelegt, welcher Fremdschlssel sich auf welchen
Primrschlssel bezieht!
***********************************************************

ALTER TABLE tblSachgebiet
    ADD CONSTRAINT tblSachgebiettblSachgebiet FOREIGN KEY  (obersachgebiet)
       REFERENCES tblSachgebiet (sachgebiet);

ALTER TABLE tblLager
    ADD CONSTRAINT tblOrttblLager FOREIGN KEY  (ort_id_f)
       REFERENCES tblOrt (ort_id);

ALTER TABLE tblLager
    ADD CONSTRAINT tblLagertyptblLager FOREIGN KEY  (ltyp_id_f)
       REFERENCES tblLagertyp (ltyp_id);

ALTER TABLE tblBuch
    ADD CONSTRAINT tblZustandtblBuch FOREIGN KEY  (zust_id_f)
       REFERENCES tblZustand (zust_id);

ALTER TABLE tblBuch
    ADD CONSTRAINT tblVerlagtblBuch FOREIGN KEY  (ver_id_f)
       REFERENCES tblVerlag (ver_id);

ALTER TABLE tblBuch
    ADD CONSTRAINT tblLagertblBuch FOREIGN KEY  (lager_id_f)
       REFERENCES tblLager (lager_id);

ALTER TABLE tblAusleihe
    ADD CONSTRAINT tblBuchtblAusleihe FOREIGN KEY  (buch_id_f)
       REFERENCES tblBuch (buch_id);

ALTER TABLE tblAusleihe
    ADD CONSTRAINT tblPersontblAusleihe FOREIGN KEY  (per_id_f)
       REFERENCES tblPerson (per_id);

ALTER TABLE tblKontakt
    ADD CONSTRAINT tblPersontblKontakt FOREIGN KEY  (per_id_f)
       REFERENCES tblPerson (per_id);

ALTER TABLE tblKontakt
    ADD CONSTRAINT tblKontakttyptblKontakt FOREIGN KEY  (ktyp_id_f)
       REFERENCES tblKontakttyp (ktyp_id);

ALTER TABLE tblAus_Mahn
    ADD CONSTRAINT tblAusleihetblAus_Mahn FOREIGN KEY  (aus_id_f)
       REFERENCES tblAusleihe (aus_id);

ALTER TABLE tblAus_Mahn
    ADD CONSTRAINT tblMahnungtblAus_Mahn FOREIGN KEY  (mahn_id_f)
       REFERENCES tblMahnung (mahn_id);

ALTER TABLE tblAutor_Buch
    ADD CONSTRAINT tblAutortblAutor_Buch FOREIGN KEY  (autor_id_f)
       REFERENCES tblAutor (autor_id);

ALTER TABLE tblAutor_Buch
    ADD CONSTRAINT tblBuchtblAutor_Buch FOREIGN KEY  (buch_id_f)
       REFERENCES tblBuch (buch_id);

ALTER TABLE tblBuch_Sach
    ADD CONSTRAINT tblSachgebiettblBuch_Sach FOREIGN KEY  (sachgebiet_f)
       REFERENCES tblSachgebiet (sachgebiet);

ALTER TABLE tblBuch_Sach
    ADD CONSTRAINT tblBuchtblBuch_Sach FOREIGN KEY  (buch_id_f)
       REFERENCES tblBuch (buch_id);

