sql >> Database >  >> RDS >> Mysql

Hoe schrijf je meerdere auteurs in een eenvoudige boekentabel op in de database?

Weg met de authors kolom in books .

Je hebt een veel-op-veel-relatie tussen boeken en auteurs:sommige boeken hebben meerdere auteurs en sommige auteurs hebben meer dan één boek geschreven. En boeken hebben eerste, tweede en derde auteurs, enzovoort. Je mag de auteursnamen voor een boek niet in een onvoorspelbare volgorde weergeven. De auteurs en de uitgever bepalen de volgorde van de auteur, niet de dbms-programmeur.

Je hebt dus een books_authors . nodig tabel met de volgende kolommen

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

U kunt een lijst met auteurs voor een bepaald boek krijgen met deze vraag:

 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

Het is ook verstandig om een ​​tekstveld met de naam role . te plaatsen in uw books_authors tabel als u uw software bibliografisch compleet wilt maken. Mensen hebben verschillende rollen bij het maken van boeken, zoals 'auteur', 'illustrator', 'editor', 'serie-editor', 'bijdrager', 'voorwoordschrijver', enzovoort. De role kolom laat je die informatie vastleggen.

Trouwens, de meeste dbms reverse engineering-tools zullen VEEL gelukkiger zijn als je je id-kolommen overal consequent een naam geeft. U moet dus books.book_id en authors.author_id gebruiken in plaats van alleen books.id en authors.id.



  1. MySQL-transactie met boekhoudtoepassing

  2. Kun je automatisch een mysqldump-bestand maken dat geen beperkingen oplegt aan externe sleutels?

  3. (+) =operator in oracle sql in where-clausule

  4. Gegevens overdragen tussen MySQL- en Oracle-databases