Mysql
 sql >> Database >  >> RDS >> Mysql

Come annotare nel database più autori in una semplice tabella di libri?

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.