我遇到过两种情况,即'标记'字段(/复制它们)看起来会使处理变得更加简单,并且在这两种情况下,它都是“正在使用”记录之间的区别通过某种东西而不是“归属”某种东西。
这可能没有多大意义,所以这里有一些例子:
示例1:地址
地址可能属于'a:
它可能被'a:
使用如果不是允许订单/预订引用现有地址,我总是复制地址(在地址表或其他地方),以便订单/预订实际上也是“所有者”(意思是< em>任何地址只有一个所有者),系统逻辑非常简单:地址的所有者可以随意更新/删除。不幸的是,这也意味着通常没有充分理由(最终)使用更多的存储空间。
否则,每次对锁定行进行更改时,都需要一个“软删除”和“行锁定”系统并创建新行。
示例2:服务
(与第一个例子类似)
服务(service_type,duration,max_clients,cancellation_notice_required,price)'属于'a:
可能会被'a:
使用因此,如果我没有“预订”预订中的服务详细信息,并且预订得到更改,则每次对与a对应的任何字段进行更改时,我都必须在“服务”表中添加一个条目。服务(或者有一些逻辑来确定何时更新)。
问题
'标记'字段/重复记录是个好主意吗?对这类问题有更好的解决方案吗?
答案 0 :(得分:1)
如果我理解正确,你会在事情发生时(例如预订)存储某事物(地址或服务)的当前价值。
这是非常合理的,绝对是处理缓慢变化的维度的一种可行方法。它确实需要在每次预订中存储大量不必要的信息。另一种方法是在地址/服务上使用有效和结束日期,以便所有版本都在一个地方。
在您的情况下,这是否是一个好主意,取决于您不会触及的其他因素,例如表格的基数,更改的频率,查询的类型以及记录的宽度
我应该注意别的。供应商,场所和供应商的地址可能看起来相同,但它们可能不同。例如,供应商可能有账单地址和送货地址,每个地址都有特殊说明。场地可能有空间可以组合。