我正在建立一个交付系统,到现在为止,我的设计看起来像这样:
问题是,我经常需要一个看起来像这样的结构(数组,json,对象......)(非常分层):
问题在于,它会创建大量重复的StreetAddress,DeliveryPoint和Customer,因为每个行程都会创建很多,行程看起来非常像其他行程。 好的部分是只需几个连接就可以实现一切。
使用第一个模式,创建第二个结构会非常奇怪,但它可能。
有关如何控制重复的任何想法,仍然可以轻松查询上述结构的架构?
我正在使用:
[如果有人想知道我是如何绘制模式的:www.gliffy.com]
答案 0 :(得分:0)
重复和规范化并不总是相反的问题。
这是基本问题:
规范化并不关心重复本身,而是关注功能依赖性
重复是错误的问题。功能依赖是正确的问题。在某些情况下,地址非常难以确定功能依赖关系,因为有很多约定,即使你这样做,你仍然会遇到格式化问题。
一个简单的方法是询问为什么给定的数据可能会发生变化的原因。良好的标准化设计限制了为什么给定的数据可能需要改变的原因。现在,考虑到这一点,看起来您需要为客户存储历史位置,并且在我看来,您可能希望做一些稍微不同的事情。
而不是:
Delivery -> customer -> street address -> itinerary
在我看来,它会更有意义:
Customer -> street address
和
delivery -> itinerary -> street address
在此模型中,您可能有重复的信息,您可能需要在街道地址中指明日期何时有效,但这不会影响我作为规范化问题,特别是考虑到已经解决的规范化问题姿势。但是从那里你可以很容易地跟踪交付的客户,而在你的模型中,你不清楚你可以跟踪给定交付的街道地址或行程。