Sự khác biệt thực sự giữa mối quan hệ một-nhiều và nhiều-một là gì?
Có sự khác biệt về khái niệm giữa các thuật ngữ này sẽ giúp bạn hình dung dữ liệu và những khác biệt có thể có trong lược đồ đã tạo cần được hiểu đầy đủ. Phần lớn sự khác biệt là một trong những góc nhìn.
Trong mối quan hệ một-nhiều , bảng cục bộ có một hàng có thể được liên kết với nhiều hàng trong bảng khác. Trong ví dụ từ SQL cho người mới bắt đầu , một cái Customer
có thể được liên kết với nhiều Order
s.
Trong mối quan hệ nhiều-một ngược lại , bảng cục bộ có thể có nhiều hàng được liên kết với một hàng trong bảng khác. Trong ví dụ của chúng tôi, nhiều Order
s có thể được liên kết với một Customer
. Sự khác biệt về khái niệm này rất quan trọng đối với sự thể hiện tinh thần.
Ngoài ra, lược đồ hỗ trợ mối quan hệ có thể được biểu diễn khác nhau trong các bảng Customer
và Order
. Ví dụ: nếu khách hàng có các cột id
và name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Sau đó, để a Order
được liên kết với a Customer
, nhiều triển khai SQL thêm vào Order
bảng một cột lưu trữ id
của liên kết Customer
(trong lược đồ này customer_id
:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
Trong các hàng dữ liệu trên, nếu chúng ta nhìn vào customer_id
cột id, chúng ta thấy rằng Bill Smith
(id khách hàng # 1) có 2 đơn đặt hàng được liên kết với anh ta: một đơn hàng với giá 12,34 đô la và một đơn hàng có giá 7,58 đô la. Jim Kenshaw
(customer-id # 2) chỉ có 1 đơn đặt hàng với giá $ 158,01.
Điều quan trọng cần nhận ra là thông thường mối quan hệ một-nhiều không thực sự thêm bất kỳ cột nào vào bảng là "một". Không Customer
có cột bổ sung mô tả mối quan hệ với Order
. Trên thực tế, hàm Customer
cũng có thể có mối quan hệ một-nhiều với ShippingAddress
và SalesCall
các bảng nhưng không có cột bổ sung nào được thêm vào Customer
bảng.
Tuy nhiên, để mô tả mối quan hệ nhiều-một, thường một id
cột được thêm vào bảng "nhiều" là khóa ngoại của bảng "một" - trong trường hợp này, một customer_id
cột được thêm vào Order
. Đối với đơn đặt hàng số 10 được liên kết với $ 12,34 Bill Smith
, chúng tôi chỉ định customer_id
cột cho Bill Smith
id 1 của.
Tuy nhiên, cũng có thể có một bảng khác mô tả mối quan hệ Customer
và Order
để không cần thêm trường bổ sung vào Order
bảng. Thay vì thêm một customer_id
trường vào Order
bảng, có thể có một Customer_Order
bảng chứa các khóa cho cả Customer
và Order
.
customer_id,order_id
1,10
1,11
2,12
Trong trường hợp này, một-nhiều và nhiều-một đều là khái niệm vì không có thay đổi lược đồ nào giữa chúng. Cơ chế nào phụ thuộc vào lược đồ và triển khai SQL của bạn.
Hi vọng điêu nay co ich.