我们正在为即将开展的项目评估NoSQL。我倾向于以RDBMS的方式思考问题,并且难以概念化缺乏规范化。
据我所知,在NoSQL中,重复数据不算错误。我无法理解的是修复数据更改以防止出现异常。
示例问题解释:
您正在组织一系列扑克锦标赛。你有球员, 地点和比赛活动。据我所知,比赛 事件可能包含一个位置和一组玩家。确实如此 不需要拥有所有玩家数据,但如果你想得到这些名字 每个人去参加下一场比赛的家庭住址,那个信息 应该在锦标赛中。
有人已经结婚并感动,改变他们的姓氏和 地址。应用程序是否需要更新播放器集合和 锦标赛系列?或者我的收藏模型错了吗?怎么做 开发人员“跟踪”信息重复的位置?
答案 0 :(得分:11)
我看到最近使用的模型是拥有一个不可变的“主”数据集合(在你的情况下,玩家列表,每个锦标赛中玩家的锦标赛列表“关联”,其中锦标赛记录包含玩家ID列表),以及非规范化列表(在您的情况下,具有完全填充的玩家数据的锦标赛列表),只有通过对“主”数据运行定期处理才能更新。
这样,应用程序只需要更新主数据,定期更新过程最终会重建非规范化结果。
答案 1 :(得分:10)
要做的一件事就是为每种类型的数据设置一个“记录系统”或主记录系统。所有数据都不需要单一来源,但每个数据都应该有一个。
要采取的另一个措施是使数据版本化(保留历史更改),以便非规范化数据可以是不可变的 - 在您的示例中,过去发生的锦标赛的玩家数据适合该时间。如果玩家从那时起移动到新地址,您仍然可以通过转到玩家的“记录系统”来获取当前地址,但锦标赛记录反映了他/她当时的地址等。