sql >> Database teknologi >  >> RDS >> Mysql

Hvordan skriver man flere forfattere ned til databasen i en simpel bogtabel?

Slip af med authors kolonne i books .

Du har mange til mange forhold mellem bøger og forfattere:nogle bøger har flere forfattere, og nogle forfattere har skrevet mere end én bog. Og bøger har første, anden og tredje forfatter og så videre. Du kommer ikke til at gengive forfatternavnene til en bog i en eller anden uforudsigelig rækkefølge. Forfatterne og udgiveren bestemmer forfatterrækkefølgen, ikke dbms-programmøren.

Så du har brug for en books_authors tabel med følgende kolonner

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

Du kan få en liste over forfattere til en bestemt bog med denne forespørgsel:

 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

Du gør også klogt i at indsætte et tekstfelt kaldet role i din books_authors-tabel, hvis du ønsker at gøre din software bibliografisk komplet. Folk har forskellige roller i skabelsen af ​​bøger som 'forfatter', 'illustratør', 'redaktør', 'serieredaktør', 'bidragyder', 'forordsforfatter' og så videre. role kolonne vil lade dig fange disse oplysninger.

Forresten vil de fleste dbms reverse engineering-værktøjer være MEGET gladere, hvis du navngiver dine id-kolonner konsekvent hele vejen igennem. Så du bør bruge books.book_id og authors.author_id i stedet for blot books.id og authors.id.



  1. Oracle:Fuldtekstsøgning med betingelse

  2. UTF-8 tegnkodningskampe json_encode()

  3. Pivottabel ved hjælp af MySQL

  4. Mysql :flere borde eller et stort bord?