2010-05-21 33 views
9

Trong hướng dẫn Hibernate, chương 25 thực hành tốt nhất cho biết chúng ta nên sử dụng 2 mối quan hệ một-nhiều thay vì một-nhiều với một lớp liên kết trung gian. Tôi không thể thấy lợi ích của nó là gì: tại sao việc tạo ra một thực thể 3d tốt hơn trong khi nhiều người có thể tạo ra một bảng kết nối hoạt động như một liên kết trung gian này. Tuy nhiên, đề xuất này phải có lý do chính đáng.2 một-nhiều thay vì 1 nhiều đến nhiều

Ai đó có thể giải thích lý do cho đề xuất này? Cảm ơn bạn.

Trả lời

8

Mối quan hệ nhiều người thường phát triển các barnacles — dữ liệu bổ sung được liên kết với chính mối quan hệ, thay vì một trong những người tham gia trong mối quan hệ (theo kinh nghiệm của tôi, đây là tiêu chuẩn chứ không phải ngoại lệ). Ví dụ các thành viên và nhóm có thể được liên kết theo nhiều cách và bạn muốn biết khi nào một thành viên tham gia vào nhóm, trạng thái thành viên của họ là gì (mới, đang chờ xử lý, bị tạm ngừng, ...) v.v.

Nếu bạn bắt đầu bằng cách mô hình hóa mối quan hệ trực tiếp dưới dạng nhiều người và viết tất cả mã của bạn, cột bổ sung đầu tiên chạm vào bảng nối sẽ phá vỡ mô hình của bạn và một chuỗi mã.

+0

+1 (và tôi nghĩ rằng cũng có lý do hiệu suất để không sử dụng bảng nhiều người: ngủ đông sẽ gặp khó khăn khi tối ưu khi cập nhật bảng tham gia.) – Thierry

+0

@Thierry, bạn không thể tránh được "nhiều -to-nhiều "bảng (tôi thích gọi nó là bàn nối) khi mô hình hóa mối quan hệ nhiều-nhiều. Những gì tôi nói không phải là bạn không nên có một bảng nối, nhưng bạn nên mô hình hóa bảng nối trực tiếp trong ORM, thay vì ngụ ý nó thông qua các thuộc tính sưu tập trên các đối tượng liên quan. –

+0

Vâng, tôi hoàn toàn đồng ý với bạn, và có một lỗi đánh máy trong những gì tôi đã viết: tôi muốn nói rằng nhiều-nhiều có thể kém hiệu quả hơn hai nhiều-một (vì vậy thay vì 'không sử dụng' tôi muốn viết 'để sử dụng', điều đó hoàn toàn ngược lại ý nghĩa -_-). Vì vậy, ngay cả khi bạn biết bạn sẽ không có bất kỳ tài sản nào khác trong bảng tham gia, có thể là một ý kiến ​​hay khi xem xét ánh xạ nó như một thực thể. – Thierry

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