Befreien Sie sich von den authors
Spalte in books
.
Sie haben eine Viele-zu-Viele-Beziehung zwischen Büchern und Autoren:Einige Bücher haben mehrere Autoren, und einige Autoren haben mehr als ein Buch geschrieben. Und Bücher haben Erst-, Zweit- und Drittautoren und so weiter. Sie können die Autorennamen für ein Buch nicht in einer unvorhersehbaren Reihenfolge wiedergeben. Die Autoren und der Herausgeber entscheiden über die Autorenreihenfolge, nicht der dbms-Programmierer.
Sie benötigen also einen books_authors
Tabelle mit den folgenden Spalten
book_id
author_id
author_ordinal (a number like 1,2,3 to denote the order of authors)
Mit dieser Abfrage können Sie eine Liste der Autoren für ein bestimmtes Buch abrufen:
SELECT isbn, title, author_ordinal, first, last
FROM books b
LEFT JOIN books_authors ba ON (b.id = ba.book_id)
LEFT JOIN authors a ON (ba.author_id = a.id)
WHERE isbn = '978whatever'
ORDER BY author_ordinal
Sie sollten auch ein Textfeld mit dem Namen role
einfügen in Ihrer books_authors-Tabelle, wenn Sie Ihre Software bibliografisch vervollständigen möchten. Menschen haben verschiedene Rollen bei der Erstellung von Büchern, wie „Autor“, „Illustrator“, „Herausgeber“, „Reihenherausgeber“, „Mitwirkender“, „Vorwortschreiber“ und so weiter. Die role
Spalte können Sie diese Informationen erfassen.
Übrigens werden die meisten dbms-Reverse-Engineering-Tools VIEL glücklicher sein, wenn Sie Ihre ID-Spalten durchgehend einheitlich benennen. Daher sollten Sie books.book_id und authors.author_id statt nur books.id und authors.id verwenden.