Weg met de authors
kolom in books
.
Je hebt een veel-op-veel-relatie tussen boeken en auteurs:sommige boeken hebben meerdere auteurs en sommige auteurs hebben meer dan één boek geschreven. En boeken hebben eerste, tweede en derde auteurs, enzovoort. Je mag de auteursnamen voor een boek niet in een onvoorspelbare volgorde weergeven. De auteurs en de uitgever bepalen de volgorde van de auteur, niet de dbms-programmeur.
Je hebt dus een books_authors
. nodig tabel met de volgende kolommen
book_id
author_id
author_ordinal (a number like 1,2,3 to denote the order of authors)
U kunt een lijst met auteurs voor een bepaald boek krijgen met deze vraag:
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
Het is ook verstandig om een tekstveld met de naam role
. te plaatsen in uw books_authors tabel als u uw software bibliografisch compleet wilt maken. Mensen hebben verschillende rollen bij het maken van boeken, zoals 'auteur', 'illustrator', 'editor', 'serie-editor', 'bijdrager', 'voorwoordschrijver', enzovoort. De role
kolom laat je die informatie vastleggen.
Trouwens, de meeste dbms reverse engineering-tools zullen VEEL gelukkiger zijn als je je id-kolommen overal consequent een naam geeft. U moet dus books.book_id en authors.author_id gebruiken in plaats van alleen books.id en authors.id.