sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo escribir en la base de datos varios autores en una tabla de libros simples?

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.