Tôi vẫn đang học các bài học về mô hình hóa dữ liệu trong bigtable/nosql và sẽ đánh giá cao một số phản hồi. Sẽ công bằng khi nói rằng tôi nên tránh các mối quan hệ cha mẹ -> con trong mô hình dữ liệu của tôi nếu tôi thường xuyên phải đối phó với các trẻ em trong tổng thể qua các bậc cha mẹ?parent-> mối quan hệ con trong appengine python (bigtable)
Ví dụ: giả sử tôi đang xây dựng một blog sẽ được đóng góp bởi một số tác giả và mỗi người có bài đăng và mỗi bài đăng có thẻ. Vì vậy, tôi có khả năng có thể thiết lập một cái gì đó như thế này:
class Author(db.Model):
owner = db.UserProperty()
class Post(db.Model):
owner = db.ReferenceProperty(Author,
collection_name='posts')
tags = db.StringListProperty()
Vì tôi hiểu điều này sẽ tạo một nhóm thực thể dựa trên cha mẹ Tác giả. Điều này có gây ra sự kém hiệu quả nếu tôi chủ yếu cần truy vấn Bài đăng theo các thẻ mà tôi muốn cắt ngang qua nhiều Tác giả không?
Tôi hiểu việc thực hiện truy vấn trên các thuộc tính danh sách có thể không hiệu quả. Giả sử mỗi bài đăng có khoảng 3 thẻ trung bình, nhưng có thể đi hết mức tối đa 7. Và tôi hy vọng bộ sưu tập các thẻ có thể của tôi sẽ ở mức thấp. Có bất kỳ lợi ích nào để thay đổi mô hình đó thành một cái gì đó như thế này không?
class Author(db.Model):
owner = db.UserProperty()
class Post(db.Model):
owner = db.ReferenceProperty(Author,
collection_name='posts')
tags = db.ListProperty(db.Key)
class Tag(db.Model):
name = db.StringProperty()
Hoặc tôi có nên làm điều gì đó như thế này?
class Author(db.Model):
owner = db.UserProperty()
class Post(db.Model):
owner = db.ReferenceProperty(Author,
collection_name='posts')
class Tag(db.Model):
name = db.StringProperty()
class PostTag(db.Model):
post = db.ReferenceProperty(Post,
collection_name='posts')
tag = db.ReferenceProperty(Tag,
collection_name='tags')
Và câu hỏi cuối cùng ... nếu trường hợp sử dụng phổ biến nhất của tôi sẽ truy vấn bài đăng bằng nhiều thẻ. Ví dụ: "tìm tất cả bài đăng có thẻ trong {'táo', 'cam', 'dưa chuột', 'xe đạp'}" Là một trong những phương pháp tiếp cận phù hợp hơn cho truy vấn tìm các bài đăng có bất kỳ bộ sưu tập thẻ nào ?
Cảm ơn, tôi biết đó là một ngụm. :-)
Không có ví dụ nào của bạn tạo nhóm tổ chức. Trong ví dụ đầu tiên, bạn đang sử dụng một ReferenceProperty, nó tạo ra một tham chiếu đến thực thể kia - điều này có thể thay đổi và không ngụ ý quyền sở hữu. Tham chiếu gốc được tạo bằng cách chỉ định đối số 'cha' cho hàm tạo cho thực thể - xem trang này để biết chi tiết: http://code.google.com/appengine/docs/python/datastore/entities.html#Entity_Groups_and_Ancestor_Paths –
Ah, cảm ơn Nick. Tôi đã bỏ lỡ một phần ... nghĩ rằng đó là các tài liệu tham khảo đã tạo ra mối quan hệ cha mẹ và đã mất tích mà bạn cần phải vượt qua cha mẹ để các nhà xây dựng. Điều đó có ý nghĩa bây giờ. –