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 Customercó thể được liên kết với nhiều Orders.
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 Orders 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 Customervà Order. Ví dụ: nếu khách hàng có các cột idvà 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 Orderbảng một cột lưu trữ idcủ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_idcộ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 Customercó cột bổ sung mô tả mối quan hệ với Order. Trên thực tế, hàm Customercũng có thể có mối quan hệ một-nhiều với ShippingAddressvà SalesCallcác bảng nhưng không có cột bổ sung nào được thêm vào Customerbảng.
Tuy nhiên, để mô tả mối quan hệ nhiều-một, thường một idcộ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_idcộ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_idcột cho Bill Smithid 1 của.
Tuy nhiên, cũng có thể có một bảng khác mô tả mối quan hệ Customervà Orderđể không cần thêm trường bổ sung vào Orderbảng. Thay vì thêm một customer_idtrường vào Orderbảng, có thể có một Customer_Orderbảng chứa các khóa cho cả Customervà 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.