Loại bỏ các authors
trong books
.
Bạn có rất nhiều mối quan hệ giữa sách và tác giả:một số sách có nhiều tác giả và một số tác giả đã viết nhiều hơn một cuốn sách. Và, sách có tác giả thứ nhất, thứ hai và thứ ba, v.v. Bạn không thể hiển thị tên tác giả cho một cuốn sách theo một số thứ tự không thể đoán trước được. Các tác giả và nhà xuất bản quyết định đơn đặt hàng tác giả, không phải người lập trình dbms.
Vì vậy, bạn cần books_authors
bảng với các cột sau
book_id
author_id
author_ordinal (a number like 1,2,3 to denote the order of authors)
Bạn có thể nhận được danh sách các tác giả cho một cuốn sách cụ thể với truy vấn sau:
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
Bạn cũng nên đặt một trường văn bản có tên là role
trong bảng books_authors của bạn nếu bạn muốn làm cho phần mềm của mình hoàn chỉnh về mặt thư mục. Mọi người có nhiều vai trò khác nhau trong việc tạo ra sách như 'tác giả', 'người vẽ tranh minh họa', 'người biên tập', 'người biên tập bộ truyện', 'người đóng góp', 'người viết lời tựa', v.v. role
cột sẽ cho phép bạn nắm bắt thông tin đó.
Nhân tiện, hầu hết các công cụ thiết kế ngược dbms sẽ hạnh phúc hơn RẤT NHIỀU nếu bạn đặt tên các cột id của mình một cách nhất quán trong suốt. Vì vậy, bạn nên sử dụng books.book_id và author.author_id thay vì chỉ books.id và author.id.