管理 Google Cloud Datastore 中实体内实体的嵌套列表

2023-12-13

我是数据存储新手,我正在尝试创建一个简单的应用程序来跟踪图书借阅。

我希望数据库架构如下:

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实体,同时指向bookuser。没有改变user or the book实体。并且不需要嵌套.

旁注:我会把firstname and email下的属性user实体类型,它们并不真正属于借用事件,每次同一用户发生此类事件时它们都会被复制。

也尽量不要被祖先所迷惑——它不是建立关系所必需的,请参阅Google App Engine (Python) 中的电子商务产品类别

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

管理 Google Cloud Datastore 中实体内实体的嵌套列表 的相关文章

随机推荐

  • 在 WooCommerce 中隐藏特定运输类别的运输方式

    本质上我正在尝试使统一费率方法 Idflat rate 7 disabled当购物车商品的运输类别为 Roller ID92 这是我尝试过的代码 add filter woocommerce package rates wf hide sh
  • 如何创建可点击的列表视图并转到新页面

    我是一名新的安卓程序员 我想创建一个可点击的列表视图 我的意思是 当用户单击一个项目时 它会转到一个新页面并开始一项新活动 请帮我 提前致谢 这是我在 mainactivity java 中的代码 package first app imp
  • 错误:获取非对象的属性[重复]

    这个问题在这里已经有答案了 可能的重复 调用非对象的成员函数 我收到此错误 尝试获取非对象的属性 来自模型 当我尝试通过输入一个字符串从数据库检索 id 时 在本例中是 某物 这是我的模型 function getRoleId role n
  • 如何继承NilClass或者如何模拟类似的功能

    我只想使用空对象设计模式 但我发现我可以从 NilClass 继承 我可以写一个方法 nil 并返回 false 但如果用户在下面编写代码怎么办 if null object puts shouldn t be here end 为了澄清我
  • 如何禁用仅在一张特定图像上右键单击保存

    我正在运营一个亚洲电子商务网站 用户可以在其中发布其产品的图片 有没有办法禁用页面上仅 1 个特定图像的右键单击 例如 查看产品时 会看到一个大图像 然后是一些产品的缩略图 当尝试右键单击大图像时 我想禁用右键单击 但如果他们尝试右键单击缩
  • 使用 OpenCSV 解析 CSV,并在带引号的字段内添加双引号

    我正在尝试使用 OpenCSV 解析 CSV 文件 其中一列以 YAML 序列化格式存储数据 并用引号引起来 因为其中可以包含逗号 它里面也有引号 所以通过加两个引号来转义 我可以在 Ruby 中轻松解析该文件 但使用 OpenCSV 我无
  • 创建具有额外功能的自定义命名元组类型

    我想创建我自己类型的内置命名元组 它具有一些额外的功能 假设我们创建一个类 from collections import namedtuple MyClass namedtuple MyClass field1 field2 它是不可变的
  • Android 应用程序的安装时间?

    有没有办法以编程方式确定 Android 应用程序的安装时间 我在 PackageInfo 等中没有看到任何内容 编辑 澄清一下 应用程序 A 是在时间 X 安装的 在稍后的某个时间 时间 Y 安装了应用程序 B App B 有什么办法可以
  • 如何在 Google Apps 脚本上仅选中一个框而不是两个框?

    function onEdit var ss SpreadsheetApp getActiveSpreadsheet var sheet ss getSheets 1 if sheet getActiveCell E11 sheet get
  • 解析带有大数字的 JSON javascript

    我得到了一个JSON对象包括一个long输入 API 响应中的值 由于javascript无法处理64位数字 因此执行时JSON parse在响应中 它将数字四舍五入到 JavaScript 可以处理的最大值 API响应 subject s
  • 从 x,y 坐标检测左转或右转的算法

    我有一个 x y 坐标数据集 从原点开始 每秒记录一次 我可以检测距离 速度 加速度 位移模量 有什么算法可以检测左转还是右转吗 我目前正在每 10 秒计算一次距离和位移模数 如果位移大约等于距离 则车辆处于直线路径上 但值发生变化则涉及转
  • 如何从 PATH 环境变量中提取完整路径?

    我想从中提取完整路径PATH本地cmd工具的环境变量 考虑以下PATH内容 C Program Files Windows Resource Kits Tools C Perl site bin C Perl bin C WI NDOWS
  • Graph API 响应中的相关 ID 在哪里?

    我正在尝试提供correlation id为了这issue但我不知道如何获得它 我认为它应该是回应 对吗 可能是 client request id 吗 HTTP响应 HTTP 1 1 403 Forbidden Cache Control
  • 从对象列表中删除重复项

    我有 MyObject 字段 id a b c e f 我有包含 500 000 个项目的列表 现在如何删除参数 a c f 具有相同值的所有重复项目 我只寻找最快 最有效的方法 UPDATE我实现了比较器 我的班级中的字段有不同的类型 所
  • requests-html 和无限滚动

    我正在检查一个 python 库 requests html 看起来很有趣 简单明了的抓取 但是 我不确定如何呈现无限滚动的页面 从他们的文档中我了解到我应该渲染一个具有特殊属性 向下滚动 的页面 我正在尝试 但我不知道具体如何 我知道如何
  • C# Datagridview:获取组合框列中的选定项目

    我正在开发一个允许用户操作 xml 文件的 GUI 我在 datagridview 中显示 xml 文件 通过 xml 元素按列整齐地组织 我允许用户添加列作为我的项目的扩展 该列被添加到数据集表中 然后更新到我用来显示 xml 文件的 d
  • 如何循环遍历数据表中特定列的值?

    我想循环访问数据表中特定列的值 谁能给出 C 编码吗 DataTable tbl new DataTable foreach DataRow row in tbl Rows object cellData row colName
  • 在 PHP 中使用 exec 命令时可能出现权限问题

    我们有一个小型办公室内联网 用 PHP 构建 在 apache 服务器上 即 WAMP 它允许我们在文件服务器上创建项目文件夹 这是通过使用 shell exec xcopy 命令和以下开关将一组模板文件夹复制到新位置来实现的 e k i
  • 通过 yum 安装 Fiware-Cygnus 时出错

    我正在尝试通过 yum 安装 Fireware Cygnus yum install cygnus ngsi 但中间我遇到了一些错误 Transaction Check Error file usr cygnus init d cygnus
  • 管理 Google Cloud Datastore 中实体内实体的嵌套列表

    我是数据存储新手 我正在尝试创建一个简单的应用程序来跟踪图书借阅 我希望数据库架构如下 books book id name borrowing timestamp user id firstname email users name bo