Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment écrire dans la base de données plusieurs auteurs dans une table de livres simple ?

Débarrassez-vous des authors colonne dans books .

Vous avez une relation plusieurs à plusieurs entre les livres et les auteurs :certains livres ont plusieurs auteurs et certains auteurs ont écrit plus d'un livre. Et, les livres ont des premier, deuxième et troisième auteurs, et ainsi de suite. Vous ne pouvez pas rendre les noms des auteurs d'un livre dans un ordre imprévisible. Les auteurs et l'éditeur décident de l'ordre des auteurs, pas le programmeur dbms.

Donc, vous avez besoin d'un books_authors tableau avec les colonnes suivantes

  book_id
  author_id
  author_ordinal   (a number like 1,2,3 to denote the order of authors)

Vous pouvez obtenir une liste des auteurs d'un livre particulier avec cette requête :

 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

Il serait également judicieux de mettre un champ de texte appelé role dans votre table books_authors si vous souhaitez que votre logiciel soit bibliographiquement complet. Les gens ont divers rôles dans la création de livres comme « auteur », « illustrateur », « éditeur », « éditeur de série », « contributeur », « auteur de la préface », etc. Le role colonne vous permettra de saisir ces informations.

Soit dit en passant, la plupart des outils d'ingénierie inverse dbms seront BEAUCOUP plus heureux si vous nommez vos colonnes d'identification de manière cohérente tout au long. Vous devez donc utiliser books.book_id et auteurs.author_id au lieu de simplement livres.id et auteurs.id.