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.