sql >> Databasteknik >  >> RDS >> Mysql

Hur skriver du ner flera författare till databasen i en enkel boktabell?

Bli av med authors kolumn i books .

Du har många till många relationer mellan böcker och författare:vissa böcker har flera författare, och vissa författare skrev mer än en bok. Och böcker har första, andra och tredje författare, och så vidare. Du får inte återge författarnamnen för en bok i någon oförutsägbar ordning. Författarna och förlaget bestämmer författarordningen, inte dbms-programmeraren.

Så du behöver en books_authors tabell med följande kolumner

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

Du kan få en lista över författare för en viss bok med den här frågan:

 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 skulle också göra klokt i att lägga in ett textfält som heter role i din books_authors-tabell om du vill göra din programvara bibliografiskt komplett. Människor har olika roller i skapandet av böcker som 'författare', 'illustratör', 'redaktör', 'serieredaktör', 'bidragsgivare', 'förordsförfattare' och så vidare. role kolumnen låter dig fånga den informationen.

Förresten, de flesta dbms reverse engineering-verktyg blir MYCKET gladare om du namnger dina id-kolumner konsekvent hela tiden. Så du bör använda books.book_id och authors.author_id istället för bara books.id och authors.id.



  1. Enklaste sättet att aktivera PHP och MySQL på Mac OS 10.6 (Snow Leopard), 10.7 (Lion), 10.8 (Mountain Lion)?

  2. Mysql-servern på MAMP startar inte

  3. Konstigt beteende hos SUM och CONCAT i MySql

  4. App Engine och MySQL