Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como anotar no banco de dados vários autores na tabela de livros simples?


Livre-se dos authors coluna em books .

Você tem uma relação de muitos para muitos entre livros e autores:alguns livros têm vários autores e alguns autores escreveram mais de um livro. E os livros têm primeiro, segundo e terceiro autores, e assim por diante. Você não consegue renderizar os nomes dos autores de um livro em alguma ordem imprevisível. Os autores e a editora decidem a ordem do autor, não o programador do dbms.

Então, você precisa de um books_authors tabela com as seguintes colunas
  book_id
  author_id
  author_ordinal   (a number like 1,2,3 to denote the order of authors)

Você pode obter uma lista de autores de um livro específico com esta consulta:
 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

Você também pode colocar um campo de texto chamado role na sua tabela books_authors se você quiser tornar seu software bibliograficamente completo. As pessoas têm vários papéis na criação de livros como 'autor', 'ilustrador', 'editor', 'editor da série', 'colaborador', 'escritor de prefácio' e assim por diante. O role coluna permitirá que você capture essas informações.

A propósito, a maioria das ferramentas de engenharia reversa de dbms ficará MUITO mais feliz se você nomear suas colunas de ID de forma consistente. Portanto, você deve usar books.book_id e autores.author_id em vez de apenas books.id e autores.id.