2013-09-03 104 views
5

Tôi đang học về MongoDB và tôi có một câu hỏi: Làm thế nào để bạn đại diện cho mối quan hệ Nhiều-nhiều hoặc Nhiều-một? Trong một DB SQL chuẩn, nó sẽ đơn giản:Làm thế nào để thể hiện mối quan hệ nhiều hoặc nhiều người trong MongoDB?

Parent Table has fields ID (primary key) and Name. 
Child Table has fields ID (primary key) and Name 
Parent-Child-Relationship Table has fields ID (primary key), ParentID and ChildID 

insert into table Parent (ID, Name) values (1, "Bob"); 
insert into table Child (ID, Name) values (1, "Mahmoud"); 
insert into table Parent-Child-Relationship (ID, ParentID, ChildID) values (1,1,1); 

Nhưng tôi đã không tìm ra cách làm điều này trong MongoDB. Tôi có thể làm:

db.parent.save({name: "Bob", children: ["Mahmoud"]}); 

Nhưng sau đó làm cách nào để tôi có thể tạo một Phụ huynh khác (Nói "Mary") cho Mahmoud ??

Tôi có thiếu thứ gì đó hiển nhiên không? Hãy giúp tôi. Tôi là người mới hoàn thành công nghệ NoSQL.

+0

Trong hầu hết trường hợp, bạn tham gia vào cấp ứng dụng. Bạn có thể nhúng dữ liệu trên cả bố mẹ hoặc chỉ cần thực hiện hai lần tra cứu. Bạn có thể nhận được nhiều thông tin hơn ở đây: http://docs.mongodb.org/manual/core/data-modeling/ – ranman

Trả lời

1

Câu trả lời ngắn gọn là bạn không.

Câu trả lời 10Gen sẽ cho bạn biết là sử dụng một tài liệu duy nhất là phụ huynh và các tài liệu con đại diện cho trẻ em.

Tuy nhiên, đừng làm điều đó, vì truy vấn tài liệu phụ trong Mongo bị giới hạn và chậm hơn.

Những gì mọi người kết thúc làm là lưu trữ ID cha mẹ trên con và thực hiện nhiều truy vấn/tham gia ở cấp ứng dụng.

+0

điều gì khiến bạn nói rằng truy vấn tài liệu phụ bị giới hạn? – ranman

+0

Bạn không thể truy vấn sâu hơn một cấp trong tài liệu phụ. –

+1

Mongo không có tham gia ... –

1

Không có gì dừng bạn từ việc tạo cha mẹ khác như dưới đây:

db.parent.save({name: "Jane", children: ["Mahmoud"]}) 

nhưng tôi sẽ nói rằng bạn đang bị mất điểm. Tách dữ liệu theo cách giống như hàng trong cơ sở dữ liệu hướng tài liệu thường là ý tưởng tồi. Tất cả mọi thứ phụ thuộc vào logic ứng dụng nhưng nếu bạn muốn phản ánh dữ liệu gia đình, bạn có thể thử cấu trúc ví dụ như:

db.family.insert({mother: {name: "Jane", age: 27}, father: {name: "Bob", age: 29}, children: [{name: "Mahmoud", age: 2}], }) 
+1

Về mặt khái niệm, điều này dường như không hiệu quả. Điều gì sẽ xảy ra nếu chúng ta muốn lưu trữ các mối quan hệ giữa các đối tượng giống nhau Bob, Jane, Mahmoud và các đối tượng khác nhau? Nếu chúng ta muốn nói Jane và Mahmoud được sinh ra ở Chicago, nhưng Bob được sinh ra ở Tokyo? Và điều gì sẽ xảy ra nếu mỗi thành phố có một loạt thông tin liên quan đến chúng (ví dụ dân số, dài, lat, v.v ...). Có phải tâm trí của tôi đã được chuẩn bị thẳng thắn để luôn suy nghĩ về mọi thứ theo bảng và hàng? Tôi có cần phải suy nghĩ về chúng một cách khác nhau không? –

+0

Mô hình quan hệ thuần túy IMHO phổ biến hơn nhiều mà bất kỳ thứ gì mà cơ sở dữ liệu định hướng tài liệu có thể cung cấp. Mô hình hóa dữ liệu trong cơ sở dữ liệu định hướng tài liệu như MongoDB phụ thuộc rất cao vào ứng dụng và giống như Jonathan Holland đã viết trên phần lớn công việc bao gồm: "nhiều truy vấn/tham gia ở cấp ứng dụng".Một điều bạn chắc chắn nên tránh là chuẩn hóa dữ liệu. Nói chung, bạn muốn suy nghĩ nhiều hơn về cấu trúc phân cấp của dữ liệu thay vì các mối quan hệ đối tượng - đối tượng đơn giản. – zero323

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