Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zapisać do bazy danych wielu autorów w prostej tabeli książek?

Pozbądź się authors kolumna w books .

Między książkami a autorami istnieje wiele relacji wiele do wielu:niektóre książki mają wielu autorów, a niektórzy autorzy napisali więcej niż jedną książkę. Książki mają pierwszego, drugiego i trzeciego autora i tak dalej. Nie możesz oddać nazwisk autorów książki w jakiejś nieprzewidywalnej kolejności. O kolejności autorów decydują autorzy i wydawca, a nie programista dbms.

Potrzebujesz więc books_authors tabela z następującymi kolumnami

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

Listę autorów konkretnej książki można uzyskać za pomocą tego zapytania:

 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

Mądrze byłoby również umieścić pole tekstowe o nazwie role w tabeli books_authors, jeśli chcesz, aby Twoje oprogramowanie było kompletne pod względem bibliograficznym. Ludzie pełnią różne role w tworzeniu książek, takich jak „autor”, „ilustrator”, „redaktor”, „redaktor serii”, „współautor”, „autor przedmowy” i tak dalej. role kolumna pozwoli ci uchwycić te informacje.

Nawiasem mówiąc, większość narzędzi dbms do inżynierii wstecznej będzie DUŻO szczęśliwsza, jeśli konsekwentnie nadasz swoim kolumnom id. Dlatego powinieneś używać books.book_id i author.author_id zamiast tylko books.id i author.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. Błąd MySQL Entity Framework — Nie można znaleźć określonego dostawcy sklepu w konfiguracji lub jest on nieprawidłowy

  2. Mysql:Wybieranie wartości między dwiema kolumnami

  3. Jak podłączyć strony html do bazy mysql?

  4. zaimplementuj zapytanie LIKE w PDO

  5. MySQL LOAD DATA LOKALNY INFILE Python