Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để ghi vào cơ sở dữ liệu nhiều tác giả trong bảng sách đơn giản?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận giá trị trước sau khi cập nhật - MySql

  2. Nâng cấp giản đồ trực tuyến trong MySQL Galera Cluster bằng phương pháp RSU

  3. Unnesting Node gọi cơ sở dữ liệu

  4. Giải thích hàm IF () trong MySQL

  5. Thêm khóa ngoại vào bảng hiện có gây ra lỗi 1050 bảng đã tồn tại