管理 Google 云数据存储中实体内的嵌套实体列表
Manage nested list of entities within entities in Google Cloud Datastore
我是 Datastore 的新手,我正在尝试创建一个简单的应用程序来跟踪图书借阅。
我希望数据库架构如下:
books:
book_id
name:
borrowing:
timestamp:
user_id
firstname
email
users:
name:
borrowed:
timestamp:
book_id
我正在使用控制台配置数据库。
我定义了两种:Books
和User
业务逻辑:
- n个用户可以借1本书
- 1个用户可以借n本书
基本上,当用户借书时,我希望发生以下两个插入:
- 一个新的借阅条目被附加到 Book 类型的图书实体,以当前时间戳作为键,user_id,名字和电子邮件作为属性
- 一个新的借用条目被附加到 ty User 的用户实体,以当前时间戳为键,book_id 为 属性
如何使用 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"
}
}
},
...
}
}
总的来说,这不是一种可扩展的方法:每次用户借书时,您都必须 re-write user
和 book
实体,这将逐步得到由于两个实体都将继续增长,因此速度较慢。
我建议采用不同的方法:向您的模式添加一个新类型,我们称之为 borrowed_book
,代表用户借阅的一本书:
borrowed_book:
book_id
user_id
timestamp
现在,每次用户借书时,您只需创建一个这样的 borrowed_book
实体,同时指向 book
和 user
。 user
或 book
实体没有变化。 并且不需要嵌套。
旁注:我将 firstname
和 email
属性放在 user
实体类型下,它们实际上不属于将被复制的借用事件每次同一用户发生此类事件时。
也尽量不要被祖先混淆 - 建立关系不需要它,参见
我是 Datastore 的新手,我正在尝试创建一个简单的应用程序来跟踪图书借阅。
我希望数据库架构如下:
books:
book_id
name:
borrowing:
timestamp:
user_id
firstname
email
users:
name:
borrowed:
timestamp:
book_id
我正在使用控制台配置数据库。
我定义了两种:Books
和User
业务逻辑:
- n个用户可以借1本书
- 1个用户可以借n本书
基本上,当用户借书时,我希望发生以下两个插入:
- 一个新的借阅条目被附加到 Book 类型的图书实体,以当前时间戳作为键,user_id,名字和电子邮件作为属性
- 一个新的借用条目被附加到 ty User 的用户实体,以当前时间戳为键,book_id 为 属性
如何使用 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"
}
}
},
...
}
}
总的来说,这不是一种可扩展的方法:每次用户借书时,您都必须 re-write user
和 book
实体,这将逐步得到由于两个实体都将继续增长,因此速度较慢。
我建议采用不同的方法:向您的模式添加一个新类型,我们称之为 borrowed_book
,代表用户借阅的一本书:
borrowed_book:
book_id
user_id
timestamp
现在,每次用户借书时,您只需创建一个这样的 borrowed_book
实体,同时指向 book
和 user
。 user
或 book
实体没有变化。 并且不需要嵌套。
旁注:我将 firstname
和 email
属性放在 user
实体类型下,它们实际上不属于将被复制的借用事件每次同一用户发生此类事件时。
也尽量不要被祖先混淆 - 建立关系不需要它,参见