我想创建一个会计系统。我正在学习“流星”。但是我已经看到Meteor不支持关系数据库,所以我不知道如何拥有一个数据结构,用户可以在其中创建预算,在这个预算的/related中创建多个会计数字,并在这些会计数字上创建多个预算行。
通常,我将使用外键,有一个具有id字段的表budget,一个具有id字段和引用budget的外键的表accounting_numbers,以及一个具有引用accounting_numbers的外键的表budget_line。
但如果我不能引用MongoDB中的其他表,我就会有点困惑如何创建简单的web应用程序,比如会计/预算系统。我想知道最好的选择是不是也将预算id和预算名称保存在accounting_numbers中的每个对象中,但如果用户想要更改预算名称怎么办。他/她是否必须编辑accounting_numbers中所有对象中的名称?如果对象budget_line属于accounting_numbers中的一个对象,而该对象又属于budget中的一个对象,那么我需要在budget_line中的每个对象中存储多少数据
发布于 2015-06-28 23:21:23
你仍然可以在Mongo aka集合中创建多个“表”,并模拟关系结构。就结构而言,Mongo可以在结构上非常紧密地映射到关系数据库。唯一的问题(这是一个很大的问题)是Mongo不支持跨这些“表”的连接,因此你需要在你的代码中手动执行这些连接,或者让ORM为你做。Mongo也没有跨“表”的事务,所以这也是你需要费力手动或通过库来实现的东西。
也就是说,当构建任何东西时,最好使用合适的工具来完成这项工作,而Meteor可能不是您想要的工具。Mongo非常适合处理非关系数据的应用程序。会计数据几乎总是关系数据。我知道Mongo是"webscale“之类的,但是看在上帝的份上,请使用关系数据库。
发布于 2015-06-29 03:25:40
你也可以看看“太空大象--流星的PostgresSQL实现”。您可以使用PostrgreSQL作为数据库,而不是使用Meteor,而不会失去Meteor提供的主要好处。主要是“反应性”和“延迟补偿”。
还有一些包可以用来模拟关系数据库的功能。"Meteor Collection Hooks“就是一个例子。这个包让你在"Mongo.Collection“调用之前和之后添加功能。例如,您可以像这样使用它:
Budget.after.update(function(userId, doc, fieldNames, modifiers, options){
if (this.previous.budgetName !== doc.budgetName){
AccountingName.update({budgetId: doc._id}, {$set: { budgetName: doc.budgetName }}, { multi: true });
}
});我也同意Jamgreen的回答,但如果你真的想使用Meteor,我相信使用这个包并对MongoDB有更多的了解,你可以很容易地实现你的应用。
希望这能有所帮助。
https://stackoverflow.com/questions/31101126
复制相似问题