2011-01-25 31 views
12

Tôi đang cố gắng tìm ra cách thực hiện tốt nhất điều này cho hệ thống của mình ... và lấy đầu của tôi ra khỏi không gian RDBMS ...Câu hỏi thiết kế tài liệu NoSQL cơ bản

Một phần của DB hiện tại của tôi ba bảng: Hiển thị, ShowEntry và Entry. Về cơ bản ShowEntry là một bảng nối nhiều-nhiều giữa Show và Entry. Trong RDBMS của tôi nghĩ rằng nó khá hợp lý vì bất kỳ thay đổi để hiển thị chi tiết có thể được thực hiện ở một nơi, và cùng với Entry.

Cách tốt nhất để phản ánh điều này trong bộ nhớ dựa trên tài liệu là gì? Tôi chắc chắn không có cách nào để làm điều này nhưng tôi không thể không nghĩ rằng nếu lưu trữ dựa trên tài liệu là thích hợp cho trường hợp này cả.

FYI, tôi hiện đang xem xét triển khai RavenDB. Trong khi các cuộc thảo luận về thiết kế NoSQL chung sẽ tốt hơn, một RavenDB tập trung hơn sẽ trở nên tuyệt vời!

Cảm ơn, D.

Trả lời

21

Khi lập mô hình quan hệ nhiều-nhiều trong cơ sở dữ liệu tài liệu, bạn thường lưu trữ một tập hợp các khóa ngoại trong một trong các tài liệu. Tài liệu bạn chọn chủ yếu phụ thuộc vào hướng bạn định đi qua mối quan hệ. Traversing nó một cách là tầm thường, đi qua nó theo cách khác đòi hỏi một chỉ mục.

Lấy ví dụ giỏ mua hàng. Điều quan trọng hơn là phải biết chính xác mặt hàng nào nằm trong một giỏ cụ thể so với giỏ chứa một mặt hàng cụ thể. Vì chúng ta thường theo dõi mối quan hệ theo hướng theo từng mục, nên lưu trữ các ID mục trong giỏ hàng có ý nghĩa hơn là lưu trữ ID giỏ trong một mục.

Bạn vẫn có thể duyệt qua mối quan hệ theo hướng ngược lại (ví dụ: tìm giỏ chứa một mục cụ thể) bằng cách sử dụng chỉ mục, nhưng chỉ mục sẽ được cập nhật ở chế độ nền để nó không phải lúc nào cũng chính xác 100%. (Bạn có thể đợi chỉ mục chính xác với WaitForNonStaleResults, nhưng độ trễ đó sẽ hiển thị trong giao diện người dùng của bạn.)

Nếu bạn yêu cầu chính xác 100% ngay cả theo cả hai hướng, bạn có thể lưu khóa ngoài trong cả hai tài liệu, nhưng ứng dụng của bạn sẽ phải cập nhật hai tài liệu bất cứ khi nào một mối quan hệ được tạo ra hoặc bị hủy.

+1

Cảm ơn - giải thích tuyệt vời. Tôi đã đi với một sự kết hợp của lưu trữ các phím nước ngoài ở mỗi bên, cũng như một bên chỉ cho một số mối quan hệ. Tần suất giao diện người dùng của tôi truy cập vào mối quan hệ theo mỗi hướng là khá nhiều chìa khóa. – codedog

+0

+1 để có giải thích tốt và có cấu trúc. –

7

This đi một chặng đường dài hướng tới việc giải quyết các câu hỏi của tôi!

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