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.