我是Datastore的新手,我正在尝试创建一个跟踪借书的简单应用程序。
我希望数据库架构如下:
books:
book_id
name:
borrowing:
timestamp:
user_id
firstname
email
users:
name:
borrowed:
timestamp:
book_id
我正在使用控制台配置数据库。
我定义了两种:Books
和User
业务逻辑:
基本上,当用户借书时我想要进行以下两次插入:
如何使用Datastore实现此目标(管理嵌套列表子项)?通过嵌入式实体?家长参考?
这是我期望的一个例子:
{
"books": {
"book1": {
"name": "book number 1",
"borrowing": {
"1234567890": {
"user_id": "user1",
"firstname": "john",
"email": "john@example.com"
},
"2234567890": {
"user_id": "user2",
"firstname": "robin",
"email": "robin@example.com"
}
}
}
...
},
"users": {
"user1": {
"firstname": "robin",
"email": "robin@example.com",
"borrowed": {
"1234567890": {
"book_id": "book1"
},
"3247829398": {
"book_id": "book99"
}
}
},
...
}
}
答案 0 :(得分:2)
一般来说,这不是一种可扩展的方法:每次用户借书时,您都必须重写user
和book
实体,这些实体会逐渐变慢。两个实体都将继续增长。
我建议采用不同的方法:在您的架构中添加新类型,让我们称之为borrowed_book
,代表用户的书:
borrowed_book:
book_id
user_id
timestamp
现在,每当用户借书时,您只需创建一个borrowed_book
实体,同时指向book
和user
。对user
或book
实体没有任何更改。 不需要嵌套。
附注:我将firstname
和email
属性置于user
实体类型下,它们并不真正属于借用事件每次同一用户发生此类事件时都会重复。
也尽量不要被祖先弄糊涂 - 建立关系不需要,请参阅E-commerce Product Categories in Google App Engine (Python)