ErdDocs

Beispiele / Bibliotheksverwaltung

Bibliotheksverwaltung

Das Schema einer Bibliothek beruht auf einer Trennung. Das Buch ist ein Titel im Katalog, das Exemplar ist der physische Band im Regal. Mitglieder leihen Exemplare aus, keine Bücher, aber Vormerkungen gelten dem Buch. Autoren hängen über eine Zwischentabelle daran, weil ein Buch mehrere Autoren haben kann.

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

  • books / copiesKatalogeintrag und Exemplar mit Barcode. Die meisten Bibliotheksaufgaben laufen auf diese Trennung hinaus.
  • authors / book_authorsEine n:m-Beziehung. Ein Buch mit zwei Autoren sprengt eine direkte author_id sofort.
  • memberscard_no, die Ausweisnummer, ist die Kennung, die Menschen benutzen.
  • loansHängt am Exemplar, denn man muss wissen, welcher Band genau draußen und überfällig ist.
  • reservationsHängt am Buch. Das Mitglied will den Titel, und es ist egal, welches Exemplar zuerst zurückkommt.

Entwurfsentscheidungen zum Übernehmen

  • Ausleihen zeigen auf Exemplare, Vormerkungen auf Bücher. Wer die beiden Ebenen vermischt, macht den klassischen Fehler. Dann kann das Schema weder sagen, wer genau diesen Band hat, noch, wen es als Nächsten benachrichtigen soll.
  • returned_on darf NULL sein. Das ersetzt ein Feld „zurückgegeben“, und das Datum steht gleich in derselben Spalte.
  • Die ISBN ist eindeutig, darf aber NULL sein. Alte und interne Medien ohne ISBN gibt es wirklich. Mit NOT NULL würden echte Daten gegen das Constraint verstoßen.

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 authors (
    id         bigserial    PRIMARY KEY,
    full_name  varchar(120) NOT NULL
);

CREATE TABLE books (
    id        bigserial    PRIMARY KEY,
    isbn      varchar(17)  UNIQUE,
    title     varchar(240) NOT NULL,
    published smallint
);
COMMENT ON COLUMN books.isbn IS 'NULL für Bestände vor der ISBN oder interne Medien';

CREATE TABLE book_authors (
    book_id    bigint NOT NULL REFERENCES books(id),
    author_id  bigint NOT NULL REFERENCES authors(id),
    PRIMARY KEY (book_id, author_id)
);

CREATE TABLE copies (
    id        bigserial   PRIMARY KEY,
    book_id   bigint      NOT NULL REFERENCES books(id),
    barcode   varchar(20) NOT NULL UNIQUE,
    shelf     varchar(20),
    condition varchar(20) NOT NULL DEFAULT 'good'
);
COMMENT ON TABLE copies IS 'Der physische Band; ein gefragtes Buch hat viele Exemplare';

CREATE TABLE members (
    id         bigserial    PRIMARY KEY,
    card_no    varchar(20)  NOT NULL UNIQUE,
    full_name  varchar(120) NOT NULL,
    joined_on  date         NOT NULL
);

CREATE TABLE loans (
    id          bigserial PRIMARY KEY,
    copy_id     bigint    NOT NULL REFERENCES copies(id),
    member_id   bigint    NOT NULL REFERENCES members(id),
    loaned_on   date      NOT NULL,
    due_on      date      NOT NULL,
    returned_on date
);
COMMENT ON COLUMN loans.returned_on IS 'NULL, solange das Exemplar ausgeliehen ist';

CREATE TABLE reservations (
    id          bigserial   PRIMARY KEY,
    book_id     bigint      NOT NULL REFERENCES books(id),
    member_id   bigint      NOT NULL REFERENCES members(id),
    placed_at   timestamptz NOT NULL DEFAULT now(),
    fulfilled   boolean     NOT NULL DEFAULT false
);
COMMENT ON TABLE reservations IS 'Vormerkung auf das BUCH – jedes zurückgegebene Exemplar erfüllt sie';

Häufige Fragen

Wohin gehören Mahngebühren?

In eine Tabelle fines, die auf loans verweist, denn der Grund ist die überfällige Ausleihe. Sie enthält Betrag, Datum und Zahlungsdatum. Für eine Übung reicht es auch, die Gebühr jedes Mal aus dem Fälligkeitsdatum zu berechnen. Wichtig ist, dass Sie die Wahl begründen.

Was ändern E-Books am Schema?

E-Books haben keine Exemplare, deshalb wird die Ausleihe zur Lizenzfrage. Sie können neben copies eine Tabelle licenses anlegen, die N gleichzeitige Ausleihen erlaubt. Oder Sie hängen Ausleihen direkt an das Buch und prüfen in der Anwendung, wie viele gleichzeitig laufen.

Weitere Beispiele