【问题标题】:setting foreign key and primary key in gcp firestore在 gcp firestore 中设置外键和主键
【发布时间】:2021-07-16 08:06:49
【问题描述】:

我是 GCP 和 NOSQL 的新手。

GCP 火库中是否可以有主键和外键

示例:我有两张表 STUDENT 和 DEPARTMENT 表格如下所示

部门表

部门 ID(主键)
部门名称

学生桌

部门ID(外键)
学生证
学生姓名

有人可以帮忙在 GCP Fire-store 中设计这个吗?

【问题讨论】:

  • 你能定义foriegn keyprimary key的意思吗
  • @dharmaraj ...在上面的 DEPARTMENT 表中的部门 ID(主键)中将用于标识每个部门,而 STUDENT 表中的部门 ID 用作外键来识别哪个部门系学生所属

标签: google-cloud-platform google-cloud-firestore


【解决方案1】:

对于数据库,密钥与任何 UUID/randomID 相同,可以在各种用户、团队、管理员、企业之间共享和使用。重要的是这些数据是如何关联的。由于 Firestore 是一个 noSQL 数据库,因此没有直接的关系引用,因此如果不包括辅助查找,一个键就不能等于另一个键。

与通过 ID 定义用户配置文件的方式相同,您可以创建一个带有随机 ID 的空文档,以方便团队的 ID,或者在本例中为部门的 ID。如果您有一个团队和一个子团队,您也可以使用字符串组合,只要在数据库请求时您可以访问团队/部门 ID,您就可以使用 Regex 来匹配字符串比较。

示例:request.resource.data.name.matches('/^' + departmentID)

要使外键适用于安全规则或在客户端内,您必须获取包含数据的键,因为键应该是相关文档的名称,以简化请求,因为您无法执行查询或循环安全规则中的数据。

我很好地阅读了这个主题,我强烈推荐这篇文章 https://medium.com/firebase-developers/a-list-of-firebase-firestore-security-rules-for-your-project-fe46cfaf8b2a

但我的建议是使用直接代表部门的键,而不是使用额外的资源来拥有外键并对其进行管理。

【讨论】:

    【解决方案2】:

    Firestore 不支持参照完整性。

    这意味着您可以为字段使用任何(遵守规则和约定)名称,但语义和附加功能将由您维护,而不是由系统维护。

    【讨论】:

    • 您是否有任何示例链接可以在 fire-store 中设计上述场景?
    • 我建议检查 Firestore 支持的数据模型的描述:firebase.google.com/docs/firestore/data-model,这样您就可以评估您所考虑的设计的优缺点。如果您确实需要系统构建参照完整性 - Firestore 可能不是一个好的选择。另一方面,如果您需要两者 - 参照完整性将被定制开发 - 即dev.to/anishkny/…
    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2022-01-12
    • 2020-07-07
    相关资源
    最近更新 更多