Tôi mới trong google-app-engine và google datastore (bigtable) và tôi có một số nghi ngờ theo thứ tự có thể là phương pháp tốt nhất để thiết kế mô hình dữ liệu cần thiết.Mô hình hóa dữ liệu phân cấp - GAE
Tôi cần tạo mô hình phân cấp, giống như danh mục sản phẩm, mỗi miền có một số tên miền phụ sâu. Hiện tại, cấu trúc của sản phẩm thay đổi ít hơn yêu cầu đọc. Rượu dụ:
- xứ (Toscana, Priorat, Alsacian)
- Winery (Thuộc duy nhất một xứ)
- rượu (chỉ thuộc về một Winery)
Tất cả các mối quan hệ là rời nhau và không đầy đủ. Ngoài ra theo thứ tự các yêu cầu có lẽ chúng ta cần phải lưu trữ quầy sử dụng cho tất cả các loại rượu (có thể yêu cầu giao dịch)
Theo thứ tự tài liệu dường như đang có những giải pháp tiềm năng khác nhau:
- quản lý Tổ tiên. Sử dụng mối quan hệ cha mẹ và giao dịch
- Quản lý tổ tiên giả. Mô phỏng tổ tiên bằng db.ListProperty (db.Key)
- ReferenceProperty. Chỉ định rõ ràng mối quan hệ giữa các lớp học
Nhưng theo thứ tự các yêu cầu dự kiến nhận được rượu ... đôi khi theo nhiều loại, đôi khi do nguồn gốc, đôi khi bởi nhà máy rượu ... tôi lo lắng về hành vi của các truy vấn bằng cách sử dụng các cấu trúc này (giống như nhiều kết nối trong một mô hình quan hệ. Nếu bạn yêu cầu các sản phẩm của một gia đình ... bạn cần tham gia vòng loại cuối cùng trong cây sản phẩm và tham gia từ gia đình)
Có thể tốt hơn là tạo một số thông tin trùng lặp (theo thứ tự các đề xuất của nhóm google: các hoạt động tốn kém, nhưng không lưu trữ, vì vậy nội dung trùng lặp sẽ không được xem là vấn đề chính)
Một số câu trả lời của câu hỏi tương tự khác đề nghị:
- Lưu trữ tất cả các id cha mẹ như một hệ thống phân cấp trong một chuỗi ... như một tài sản đường
- Duplicate các mối quan hệ giữa các thực thể uống một tất cả các bậc cha mẹ trong cây ...
Bất kỳ đề xuất nào?
Hi Will,
trường hợp của chúng tôi là hơn một cách tiếp cận thứ bậc nghiêm ngặt như bạn đại diện trong ví dụ thứ hai. Và các truy vấn là để truy xuất danh sách các sản phẩm, chỉ truy xuất một danh sách không phải là bình thường.
Chúng ta cần phải lấy tất cả các loại rượu vang từ một xứ, từ một Winery hoặc từ một Variety (Nếu chúng ta giả sử rằng sự đa dạng là một nút của cây thứ bậc nghiêm ngặt, chỉ là ví dụ)
Một cách có thể được bao gồm một tài sản con đường, như bạn đề cập:
- /gốc/{id}/nhà máy rượu/{id}/nhiều/{id}
để cho phép tôi để lấy một danh sách các loại rượu vang từ một loạt các ứng dụng truy vấn như thế này:
wines_query = Wine.all()
wines_query.filter('key_name >','/origin/toscana/winery/latoscana/variety/merlot/')
wines_query.filter('key_name <','/origin/toscana/winery/latoscana/variety/merlot/zzzzzzzz')
Hoặc như thế này từ một xứ:
wines_query = Wine.all()
wines_query.filter('key_name >','/origin/toscana/')
wines_query.filter('key_name <','/origin/toscana/zzzzzz')
Cảm ơn bạn!
Tôi không hiểu câu hỏi được cập nhật của bạn. 'Variety' sẽ phù hợp với cấu trúc phân cấp như thế nào? Rượu vang không phải từ các nguồn gốc khác nhau và/hoặc nhà máy rượu vang có giống nhau không? Nếu là vậy, tôi nghĩ sự đa dạng sẽ chỉ là một tài sản trên mô hình 'Wine'. Tôi cũng không hiểu những gì các truy vấn của bạn đang thực hiện mà các truy vấn ví dụ của riêng tôi thì không. –