2016-01-02 30 views
13

Tôi đang phát triển một ứng dụng sails.js với sequelize ORM. Tôi hơi bối rối khi BelongsTo và HasOne cần được sử dụng.Sự khác biệt giữa HasOne và BelongsTo trong bản tóm tắt ORM

Các tài liệu nói rằng:

BelongsTo hiệp hội là hiệp hội nơi chính nước ngoài cho mối quan hệ one-to-one tồn tại trên mô hình nguồn.

HasOne liên kết là các liên kết trong đó khóa ngoại cho mối quan hệ một-một tồn tại trên mô hình đích.

Có sự khác biệt nào khác ngoài địa điểm được chỉ định không? Liệu hành vi vẫn tiếp tục giống nhau trong cả hai trường hợp?

Trả lời

24

Đây là vấn đề phổ quát hơn.

Sự khác biệt chính là ngữ nghĩa. bạn phải quyết định mối quan hệ là gì (Một số ví dụ ngớ ngẩn):

Con người chỉ có một cánh tay phải. Cánh tay phải thuộc về một người đàn ông.

Nói nó nghịch trông hơi lạ:

cánh tay phải có một người đàn ông. Một người đàn ông thuộc về cánh tay phải.

Bạn có thể có người đàn ông mà không cần tay phải. Nhưng một mình cánh tay phải là vô dụng.

Trong sequelize nếu RightArm và nam là các mô hình, nó có thể trông giống như:

Man.hasOne(RightArm); 
RightArm.belongsTo(Man); 

Và như bạn nhận thấy vẫn còn có sự khác biệt trong cấu trúc bảng db:

BelongsTo sẽ thêm ForeignKey trên nguồn mà hasOne sẽ thêm vào mục tiêu (Phần tiếp theo tạo cột mới 'ManId' trong bảng 'RightArm', nhưng không tạo cột 'RightArmId' trong bảng 'Man').

Tôi không thấy bất kỳ sự khác biệt nào khác.

+0

Vì vậy, trong trường hợp này, tôi nên sử dụng 'Man.hasOne (RightArm);' hoặc 'RightArm.belongsTo (Man);'? Hoặc sử dụng cả hai? –

+0

Trong hầu hết các trường hợp, tôi sẽ sử dụng cả hai –

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