Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie schreibe ich mehrere Autoren in eine einfache Büchertabelle in die Datenbank?

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.