我正在做一个有关买卖商品的项目,就像一个市场一样。我在项目中使用React和Firebase。
问题是构建数据库的最佳方法是什么: 问题: 我当前的数据库是:
Root ---
---Users //data about the user: id, username, avatar, customer rating...
---SellData //include data about the Seller ads: title, price, description, image,...
---BuyData //include data about the Buyer ads: title, price, description, image,...
然后,在我的主页中,我想显示一个列表项,每个项目都具有以下信息:userName,Avatar,客户评分,标题,价格。因此,它是Users和SellData之间的结合。
我是否应该将更多用户数据添加到Root / SellData或Root / BuyData中,因为提交的那些只是产品信息,而不是用户信息?但是,如果这样做的话,我的数据库在扩展时将非常大。 我的情况有其他解决方案吗?
答案 0 :(得分:3)
在NoSQL的世界中,您不应该害怕重复数据和使数据模型非规范化。这是有关NoSQL数据建模方法的“著名”文章:https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/
与其从纯粹的数据库优化角度(在SQL世界中进行规范化)设计数据模型,不如在NoSQL世界中,从查询角度来考虑它,尝试最大程度地减少给定屏幕的查询数量/用例。
因此,在User
和SellData
记录/节点中复制BuyData
数据是完全有效的。这样,在一个查询中,您将获得主页所需的所有信息。
我不知道您使用的是哪个数据库,但是要使不同的记录保持同步,您可以对Realtime数据库使用update()
方法,对于Firestore使用batched write方法。