我正在研究客户的销售点(POS)软件。我打算将django与MySQL结合使用,但客户端无法为主机付费,因此我决定用Firebase用Java编写它。我在考虑来自MySQL的Firebase时遇到了一些麻烦。
根据Firebase文档,要像我在SQL中那样进行关系,它必须看起来像这样:
inventory : {
CD001 : {
genre : {
"CLASSICAL" : TRUE
}
}
genre : {
CLASSICAL : {
Name : "CLASSICAL"
inventory : {
CD001 : TRUE
}
}
}
在SQL中,我只是将类型primary key
作为foreign key
放入清单中。在Firebase中有更好的方法吗?似乎对于每种具有CLASSICAL
类型的产品,我都必须制作两个updateChildAsync()
。另外,任何更改(例如从清单中删除流派)也必须遍历两个DatabaseReference
。
如果我要使用push
来获取生成的primary key
,那就更糟了,因为我必须遍历每个孩子才能得到genre
的名字。
我知道这可能不是制作POS的最佳方法,但是鉴于项目的局限性,而且我喜欢学习新知识,因此我会坚持下去。
答案 0 :(得分:1)
在NoSQL中,您经常会在多个地方使用相同的值,以允许应用程序的特定用例。这是正常现象,但是如果您来自关系数据库的背景,则可能需要一些时间来适应。
要掌握Firebase的NoSQL模型,我建议阅读NoSQL data modeling,观看Firebase for SQL developers(对于Firebase Realtime Database)和Getting to know Clouf Firestore。
有关如何为多对多关系建模的示例,请参见Many to Many relationship in Firebase。您的示例看起来更像是一个分类问题,在这种情况下,我还建议您阅读Firebase query if child of child contains a value。