Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да запишете в базата данни множество автори в таблица с прости книги?

Отървете се от authors колона в books .

Имате много към много отношения между книги и автори:някои книги имат няколко автора, а някои автори са написали повече от една книга. И книгите имат първи, втори и трети автори и така нататък. Не можете да изобразявате имената на автора за книга в някакъв непредсказуем ред. Авторите и издателят решават реда на автора, а не програмиста на dbms.

Така че имате нужда от books_authors таблица със следните колони

  book_id
  author_id
  author_ordinal   (a number like 1,2,3 to denote the order of authors)

Можете да получите списък с автори за конкретна книга с тази заявка:

 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

Също така би било разумно да поставите текстово поле, наречено role във вашата таблица books_authors, ако искате да направите софтуера си библиографски пълен. Хората имат различни роли в създаването на книги като „автор“, „илюстратор“, „редактор“, „редактор на поредици“, „сътрудник“, „автор на предговор“ и т.н. role колона ще ви позволи да заснемете тази информация.

Между другото, повечето инструменти за обратно инженерство на dbms ще бъдат МНОГО по-щастливи, ако наименувате колоните си с идентификатор последователно навсякъде. Така че трябва да използвате books.book_id и authors.author_id вместо само books.id и authors.id.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на MATLAB и MySQL с JDBC драйвера

  2. SQL JOIN много към много

  3. Връзка много към много между два обекта в пролетното зареждане

  4. SubSonic 3 и MySQL, премахването на долно черта от името на колона в метода CleanUp() причинява изключения при използване на свойство в linq-query

  5. обхождане на html страница с помощта на php?