2012-04-13 42 views
8

Mối quan hệ một đến nhiều giữa hai bảng phải được thực hiện với hai hoặc ba bảng? Ví dụ chúng ta nên có:một đến nhiều mối quan hệ trong cơ sở dữ liệu - khái niệm thiết kế

author(id,otherAttributtes) 
books(id,authorid,otherAttributes) 

hoặc

author(id,otherAttributtes) 
    books(id,otherAttributes) 
    authorConnectsBooks(authorid,booksid) 

Tôi thích hơn cách tiếp cận đầu tiên nhưng tôi đã thấy thứ hai và trong các ứng dụng phức tạp hơn rất nhiều lần. Có bất kỳ nhược điểm nào cho phương pháp đầu tiên hay chỉ là cách cá nhân để theo dõi?

+0

cảm ơn cho câu trả lời !! (ví dụ là ngẫu nhiên tôi chỉ muốn hiển thị một mối quan hệ một đến nhiều) – user666

Trả lời

22

Ví dụ đầu tiên cho thấy mối quan hệ một đến nhiều trong khi mối quan hệ thứ hai thể hiện mối quan hệ nhiều với nhiều người.

Ví dụ cho phép nói rằng chúng tôi sử dụng ví dụ đầu tiên

Author 
AuthorID 

Book 
BookID 
AuthorID 

Làm thế nào bạn sẽ đại diện cho rằng cả hai Jane và Jon đã viết cuốn sách "Stackoverflow cho vui"? Trong bảng quan hệ này bạn không thể, bạn đã bày tỏ rằng một tác giả có thể viết nhiều sách. Vì vậy, hoặc Jane đã viết nó hoặc Jon đã viết nó. Nếu chỉ một trong số họ viết những cuốn sách bạn có thể sử dụng loại mối quan hệ này. Tuy nhiên, nếu bạn muốn cho thấy rằng cả hai đã viết cuốn sách này bạn cần một mối quan hệ nhiều đến nhiều.

Bây giờ sử dụng cùng sự tương tự của Jane và Jon, bạn có thể đại diện cho cả hai tác giả cho cuốn sách này bằng ví dụ thứ hai của bạn - nhiều mối quan hệ với nhiều người.


Cho phép sử dụng Stackoverflow là một ví dụ bắt đầu với một đến nhiều mối quan hệ và kết thúc bằng một nhiều mối quan hệ:

Authors 
Joel 
Jeff 

Books 
Stackoverflow Joel 

Poor Jeff, anh không được ghi nhận với stackoverflow từ ví dụ trên ... vì vậy chúng tôi cần phải khắc phục điều đó:

Author 
Joel 
Jeff 

Books 
Stackoverflow 

AuthorBooks 
Stackoverflow Jeff 
Stackoverflow Joel 

Bây giờ tất cả mọi người là hạnh phúc ...

+0

Chúng tôi sẽ phải xóa bản ghi mà Jeff là chủ sở hữu vì anh ấy không còn là :-( – JonH

1

Nếu mối quan hệ thực sự là một đến nhiều, không cần có bảng nối kết (authorConnectsBooks trong ví dụ của bạn). Trong ví dụ của bạn, tuy nhiên, bạn không có mối quan hệ một-nhiều vì một tác giả có thể viết nhiều sách và một cuốn sách có thể được viết bởi nhiều tác giả. Trong ví dụ của bạn, bạn thực sự có mối quan hệ nhiều-nhiều. Nếu bạn thực sự có mối quan hệ nhiều-nhiều, thì bạn cần một bảng liên kết (authorConnectsBooks trong ví dụ của bạn).

5

một đến nhiều là hai bảng.

thứ hai là nhiều đến nhiều.

Authors 
1 Larry Niven 
2 Jerry Pournelle 

Books 
1 Integral Trees 
2 King David's Spaceship 
3 The Mote in God's eye 

AuthorsBooks 
1 1 
2 2 
1 3 
2 3 
4

Mối quan hệ một-nhiều nên được triển khai với 2 bảng.

Nhưng mối quan hệ bạn đề xuất trong ví dụ của bạn (giữa Tác giả và Sách) không phải là một-nhiều, là nhiều người.

"Tác giả có thể viết nhiều sách và sách có thể được viết bởi một hoặc nhiều tác giả".

Và mối quan hệ nhiều-nhiều nên được triển khai với 3 bảng.

Chúc một ngày tốt lành.

0

Như mọi người đã nêu, điều đầu tiên là mối quan hệ một đến nhiều mà bạn không cần thêm bảng. Chỉ cần hai bàn làm việc. Nhưng trong trường hợp thứ hai, vì có nhiều giả thiết, bạn sẽ cần thêm một bảng phụ được gọi là Junction hoặc bảng tham chiếu chéo vì hầu hết các hệ thống quản lý cơ sở dữ liệu chỉ hỗ trợ các mối quan hệ một-nhiều, nó là cần thiết để thực hiện các mối quan hệ đó theo cách thủ công thông qua bảng nối thứ ba. Khóa chính của bảng giao nhau thường được hình thành bằng cách sử dụng các khóa chính của các bảng mà nó kết nối. Đây là một trang wiki giải thích giống nhau ví dụ chính xác mà bạn hỏi:

LINK

Các vấn đề liên quan