我是GCP和NOSQL的新手。
GCP消防仓库中可以有主密钥和外键吗
示例:我有两张桌子,学生和部门下面的表格看起来像
部门表
dept id(主键(
deptname
学生表
dept id(外键(
学生id
用户名
有人能在GCP消防商店帮忙设计这个吗?
对于数据库,密钥与任何UUID/randomID相同,可以在各种用户、团队、管理员、企业之间共享和使用。重要的是数据如何关联。由于Firestore是一个noSQL数据库,因此没有直接的关系引用,因此如果不包括辅助查找,一个键就不能等于另一个键。
与通过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
但我的建议是使用直接代表部门的密钥,而不是使用额外的资源来拥有外键并对其进行管理
Firestore不支持引用完整性。
这意味着您可以对字段使用任何名称(根据规则和约定(,但语义和附加功能将由您维护,而不是由系统维护。