我是数据存储新手,我正在尝试创建一个简单的应用程序来跟踪图书借阅。
我希望数据库架构如下:
books:
book_id
name:
borrowing:
timestamp:
user_id
firstname
email
users:
name:
borrowed:
timestamp:
book_id
我正在使用控制台来配置数据库。
我定义了两种:Books
and User
商业逻辑:
- n 个用户可以借阅 1 本书。
- 1个用户可以借n本书
基本上,当用户借书时,我希望发生以下两个插入:
- 一个新的借阅条目被附加到 Book 类型的图书实体中,以当前时间戳为键,以 user_id、firstname 和 email 作为属性
- 一个新的借用条目被附加到 ty User 的用户实体中,以当前时间戳为键,以 book_id 作为属性
如何使用数据存储实现此目的(管理嵌套子列表)?通过嵌入实体?家长参考?
这是我期望的一个例子:
{
"books": {
"book1": {
"name": "book number 1",
"borrowing": {
"1234567890": {
"user_id": "user1",
"firstname": "john",
"email": "[email protected]"
},
"2234567890": {
"user_id": "user2",
"firstname": "robin",
"email": "[email protected]"
}
}
}
...
},
"users": {
"user1": {
"firstname": "robin",
"email": "[email protected]",
"borrowed": {
"1234567890": {
"book_id": "book1"
},
"3247829398": {
"book_id": "book99"
}
}
},
...
}
}
一般来说,这不是一种可扩展的方法:每次用户借书时,您都必须重新编写user
and book
实体,随着两个实体的不断增长,速度会逐渐变慢。
我建议采用不同的方法:向您的模式添加一个新类型,我们称之为borrowed_book
,代表用户借阅的一本书:
borrowed_book:
book_id
user_id
timestamp
现在,每次用户借书时,您只需创建一本这样的书borrowed_book
实体,同时指向book
和user
。没有改变user
or the book
实体。并且不需要嵌套.
旁注:我会把firstname
and email
下的属性user
实体类型,它们并不真正属于借用事件,每次同一用户发生此类事件时它们都会被复制。
也尽量不要被祖先所迷惑——它不是建立关系所必需的,请参阅Google App Engine (Python) 中的电子商务产品类别
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)