Отървете се от 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.