我是数据存储的新手,我正在尝试创建一个简单的应用程序来跟踪书籍借阅。
我希望数据库架构如下:
books:
book_id
name:
borrowing:
timestamp:
user_id
firstname
email
users:
name:
borrowed:
timestamp:
book_id
我正在使用控制台来配置数据库。
我定义了两种类型:Books
和User
业务逻辑:
- n 个用户可以借阅 1 本书。
- 1 用户可以借阅 n 本书
基本上,当用户借书时,我希望出现以下两个插入:
- 新的借阅条目将追加到类型为 Book 的 Book 实体,当前时间戳作为键,user_id、名字和电子邮件作为属性
- 一个新的借用条目将附加到 ty User 的用户实体,当前时间戳作为键,book_id作为属性
如何使用数据存储实现此目的(管理嵌套列表子项(?通过嵌入式实体?家长参考?
以下是我期望的示例:
{
"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"
}
}
},
...
}
}
一般来说,这不是一种可扩展的方法:每次用户借书时,您都必须重写user
和book
实体,随着两个实体的不断增长,这将变得越来越慢。
我建议一种不同的方法:向你的模式添加一个新类型,我们称之为borrowed_book
,表示由用户嘘声的书:
borrowed_book:
book_id
user_id
timestamp
现在,每次用户借书时,您只需创建一个这样的borrowed_book
实体,同时指向book
和user
。对user
或book
实体没有更改。并且不需要嵌套。
旁注:我将firstname
和email
属性放在user
实体类型下,它们实际上不属于借用事件,每次此类事件发生此类事件时,它们都会被复制。
也尽量不要被祖先混淆 - 建立关系不需要,请参阅Google App Engine(Python(中的电子商务产品类别