如何使用 Angular 10 和 Cloud Firestore 按引用类型建立 1:N 关系
How to make 1:N relationship by reference type using Angular 10 and Cloud Firestore
我们正在寻找一种允许用户使用 Angular 10.
购买数字内容的机制
我正在考虑如何使用 Angular 10 和 Cloud Firestore 创建与引用类型的 1:N 关系,方法是参考 digitalcontents.service.ts 中的以下内容,但嵌套在子集合中或引用
我不知道如何通过引用根集合 (digitalContents) 添加或获取用户集合。
数据库结构
-root-
users<collection>
uid<document>
name:string<field>
digitalContents:map[{
digitalId:reference
purchaceDate:timeStamp
}]
digitalContents<collection>
digitalId<document>
name:string<field>
price:number
数据库设计是否适合如何添加或获取上述用户集合,或者我应该怎么做?
如果你能教我,我将不胜感激。您可以 DI AngularFireStore 并获取集合。
对于给您带来的不便,我们深表歉意,但如果您能指导我们,我们将不胜感激。
与使用 NoSQL 数据库(更具体地说是 Firestore)相关的 best/worst 事情之一是,自从正确答案取决于您的具体实施。最接近规则的是建议避免对不同的集合进行多次读取,因为您需要为每个 read/write 付费。也就是说,对于您的具体情况,我认为您希望遵循一个名为 denormalization:
的过程
Database denormalization is the process of optimizing your database for reads by creating redundant data
我建议遵循的结构如下:
users (collection)
|-- userid (document)
|-- name
|-- purchases (subcollection)
|-- purchaseid (document)
|-- digitalID (reference)
|-- digitalName
|-- price
|-- purchasedDate
如您所见,我在每个 user
中重复了 digitalCollections
中的信息,这种结构背后有两个原因:
(最明显的一个)我很确定你想保存所购买商品的价格,这是由于价格的一些变化与价格不一致用户购买时购买的商品,或者即使以折扣价购买的商品,这与目录价格不一致。
通过保存每个用户的所有购买,您可以简单地查询 purchases
子集合并获取所有这些,而无需进入不同的集合:
var purchases_by_user1 = db.collection('users/userid').collection('purchases');
或按具体购买查询:
var purchase_x_by_user1 = db.collection('users/userid').collection('purchases').doc('purchaseid');
还有一篇很棒的文章 video 解释了如何构建数据的一些前提条件,我希望这能让您明白并帮助您为您的用例选择正确的设计。
我们正在寻找一种允许用户使用 Angular 10.
购买数字内容的机制我正在考虑如何使用 Angular 10 和 Cloud Firestore 创建与引用类型的 1:N 关系,方法是参考 digitalcontents.service.ts 中的以下内容,但嵌套在子集合中或引用 我不知道如何通过引用根集合 (digitalContents) 添加或获取用户集合。
数据库结构
-root-
users<collection>
uid<document>
name:string<field>
digitalContents:map[{
digitalId:reference
purchaceDate:timeStamp
}]
digitalContents<collection>
digitalId<document>
name:string<field>
price:number
数据库设计是否适合如何添加或获取上述用户集合,或者我应该怎么做? 如果你能教我,我将不胜感激。您可以 DI AngularFireStore 并获取集合。
对于给您带来的不便,我们深表歉意,但如果您能指导我们,我们将不胜感激。
与使用 NoSQL 数据库(更具体地说是 Firestore)相关的 best/worst 事情之一是,自从正确答案取决于您的具体实施。最接近规则的是建议避免对不同的集合进行多次读取,因为您需要为每个 read/write 付费。也就是说,对于您的具体情况,我认为您希望遵循一个名为 denormalization:
的过程Database denormalization is the process of optimizing your database for reads by creating redundant data
我建议遵循的结构如下:
users (collection)
|-- userid (document)
|-- name
|-- purchases (subcollection)
|-- purchaseid (document)
|-- digitalID (reference)
|-- digitalName
|-- price
|-- purchasedDate
如您所见,我在每个 user
中重复了 digitalCollections
中的信息,这种结构背后有两个原因:
(最明显的一个)我很确定你想保存所购买商品的价格,这是由于价格的一些变化与价格不一致用户购买时购买的商品,或者即使以折扣价购买的商品,这与目录价格不一致。
通过保存每个用户的所有购买,您可以简单地查询
purchases
子集合并获取所有这些,而无需进入不同的集合:
var purchases_by_user1 = db.collection('users/userid').collection('purchases');
或按具体购买查询:
var purchase_x_by_user1 = db.collection('users/userid').collection('purchases').doc('purchaseid');
还有一篇很棒的文章 video 解释了如何构建数据的一些前提条件,我希望这能让您明白并帮助您为您的用例选择正确的设计。