Sbarazzati degli authors
colonna in books
.
Hai una relazione da molti a molti tra libri e autori:alcuni libri hanno più autori e alcuni autori hanno scritto più di un libro. E i libri hanno il primo, il secondo e il terzo autore e così via. Non puoi rendere i nomi degli autori di un libro in un ordine imprevedibile. Gli autori e l'editore decidono l'ordine degli autori, non il programmatore dbms.
Quindi, hai bisogno di un books_authors
tabella con le seguenti colonne
book_id
author_id
author_ordinal (a number like 1,2,3 to denote the order of authors)
Puoi ottenere un elenco di autori per un determinato libro con questa query:
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
Sarebbe anche saggio inserire un campo di testo chiamato role
nella tua tabella libri_autori se vuoi rendere il tuo software bibliograficamente completo. Le persone hanno vari ruoli nella creazione di libri come "autore", "illustratore", "editore", "editore di serie", "collaboratore", "scrittore di prefazioni" e così via. Il role
colonna ti consentirà di acquisire tali informazioni.
A proposito, la maggior parte degli strumenti di reverse engineering di dbms sarà MOLTO più felice se dai un nome alle colonne ID in modo coerente. Quindi dovresti usare books.book_id e author.author_id invece di solo books.id e author.id.