Deshazte de los authors
columna en books
.
Tiene una relación de muchos a muchos entre libros y autores:algunos libros tienen múltiples autores y algunos autores escribieron más de un libro. Y los libros tienen primero, segundo y tercer autor, y así sucesivamente. No puedes representar los nombres de los autores de un libro en un orden impredecible. Los autores y el editor deciden el orden de los autores, no el programador de dbms.
Entonces, necesitas un books_authors
tabla con las siguientes columnas
book_id
author_id
author_ordinal (a number like 1,2,3 to denote the order of authors)
Puede obtener una lista de autores de un libro en particular con 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
También sería prudente poner un campo de texto llamado role
en su tabla books_authors si desea que su software sea bibliográficamente completo. Las personas tienen varios roles en la creación de libros como 'autor', 'ilustrador', 'editor', 'editor de la serie', 'colaborador', 'escritor de prefacio', etc. El role
le permitirá capturar esa información.
Por cierto, la mayoría de las herramientas de ingeniería inversa de dbms serán MUCHO más felices si nombra sus columnas de identificación de manera consistente en todo momento. Por lo tanto, debe usar books.book_id yauthors.author_id en lugar de solo books.id yauthors.id.