Helpex - Trao đổi & giúp đỡ Đăng nhập

Làm thế nào để bạn xử lý các mối quan hệ m..n trong một cơ sở dữ liệu quan hệ?

Lý Hiền Nhi
· 16:47 08/10/2008
hôm qua

Hãy xem một ví dụ - sách. Một cuốn sách có thể có 1..n tác giả. Một tác giả có thể có 1..m sách. Cách tốt để đại diện cho tất cả các tác giả của một cuốn sách là gì?

Tôi nảy ra ý tưởng tạo bảng Sách và bảng Tác giả. Bảng Tác giả có khóa AuthorID chính là tên tác giả. Bảng Sách có ID sách chính và siêu dữ liệu về sách (tên sách, ngày xuất bản, v.v.). Tuy nhiên, cần có cách liên kết giữa sách với tác giả và tác giả với sách. Và đây là vấn đề ở đâu.

Giả sử chúng ta có ba cuốn sách của Bob. Tuy nhiên, trên một cuốn sách, ông đã viết nó là Bob, Tiến sĩ. Một người khác anh ấy viết là Tiến sĩ Bob, và một phần ba anh ấy viết là Tiến sĩ Robert. Tôi muốn có thể xác định thực tế là những tác giả này, trên thực tế, là cùng một người nhưng được ghi dưới những cái tên khác nhau. Tôi cũng muốn phân biệt Bob với một Bob khác đã viết những cuốn sách khác nhau.

Bây giờ chúng ta cũng hãy thêm một phần khác vào một ứng dụng, một bảng Người theo dõi những người thú vị. Và hãy nói rằng Bob là một người thú vị. Tôi không chỉ muốn nói rằng tác giả của cả ba cuốn sách là Bob, mà Bob thú vị này là Bob giống như tác giả Bob.

Vậy những chiến lược nào tồn tại cho việc lập bản đồ tiềm ẩn phức tạp như vậy, trong khi vẫn đảm bảo rằng các tác giả cuốn sách được xác định bằng tên trên trang bìa?

17 hữu ích 0 bình luận 21k xem chia sẻ
Trần Diệu Hương
· 16:48 08/10/2008
16:48:35 08/10/2008

Thêm một bảng khác có tên BookAuthors với các cột cho BookID, AuthorID và NameUsed. Thay vào đó, giá trị NULL cho NameUsed có nghĩa là kéo nó khỏi bảng Tác giả. Đây được gọi là bảng Giao lộ.

30 hữu ích 5 bình luận chia sẻ
vq gioi
· 16:54 08/10/2008
16:54:06 08/10/2008

Bạn sẽ cần ba bảng -

  1. Sách
  2. Tác giả
  3. BookAuthors

Sách sẽ chứa id sách, tên sách và tất cả các thông tin khác mà bạn cần thu thập về sách.

Tác giả sẽ chứa ID tác giả cũng như các thông tin khác như Tên, họ mà bạn cần thu thập về bất kỳ tác giả nhất định nào.

BookAuthors sẽ là một kết hợp nhiều-nhiều, chứa BookID, AuthorID và NameUsed. Điều này sẽ cho phép sách có không hoặc nhiều tác giả, một tác giả có hoặc không hoặc nhiều sách và thông tin về mối quan hệ đó được ghi lại. Ví dụ: bạn cũng có thể có một cột trên bảng BookAuthor mô tả mối quan hệ của tác giả với cuốn sách ("Được chỉnh sửa bởi", "Trước từ của").

7 hữu ích 0 bình luận chia sẻ
Đỗ Hải Thảo
· 16:49 08/10/2008
16:49:22 08/10/2008

Tôi nghĩ rằng bạn khá nhiều ở đó. Bạn cần bảng Sách, bảng Tác giả và sau đó là bảng "author_of_books" với khóa chính của sách, khóa chính của tác giả và trường văn bản "được trích dẫn là" hiển thị cách tác giả cụ thể đó được trích dẫn trên cuốn sách đó .

6 hữu ích 0 bình luận chia sẻ
Hoàng Bình Dân
· 16:49 08/10/2008
16:49:44 08/10/2008

Điều này nghe có vẻ giống như một mối quan hệ nhiều-nhiều, không phải là một-nhiều. Tôi nghĩ bạn sẽ muốn sử dụng một bảng giữa hai bảng đó cho phép bạn xác định 1-nhiều ở hai bên của bảng đó. Kiểm tra cái này ...

http://www.tekstenuitleg.net/en/articles/database_design_tutorial/8

3 hữu ích 0 bình luận chia sẻ
Hồ Vĩnh Khánh
· 16:50 08/10/2008
16:50:56 08/10/2008

Cho rằng Tiến sĩ Bob và Tiến sĩ Robert và Bob, Tiến sĩ đều là cùng một người, họ sẽ liên kết đến cùng một hàng trong bảng tác giả.

Tuy nhiên, tôi nghĩ những gì bạn cần là một bảng người mà các tác giả liên kết đến. Bạn cũng có thể liên kết bảng người thú vị của mình với nó. Theo cách đó Tác giả Bob và Tác giả Robert cũng như Bob thú vị liên kết đến Người Bob. Hy vọng điều đó có ý nghĩa.

1 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ sql database database-design , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm