合并列数据库图

时间:2013-07-08 00:23:07

标签: database-design entity-relationship database-schema

我有一个模型,我们导入更改,比如说,

一个人有固定的属性 - 名称,眼睛颜色 改变属性:身高,体重,年龄

我正在尝试为这些变化提出最佳解决方案。

解决方案1:

Table1: Person , Columns: Name,EyeColour
Table2: WeightChange: PersonId(FK), ChangeDate, FromWeight, ToWeight
Table3: OtherChange: PersonId(FK), ChangeDate, ChangeType(height or age), FinalState

解决方案2:

Table1: Person , Columns: Name,EyeColour
Table2: WeightChange: PersonId(FK), ChangeDate, FromWeight, ToWeight
Table3: HeightChange: PersonId(FK), ChangeDate, FinalState
Table4: AgeChange: PersonId(FK), ChangeDate, FinalState

如果可能的话,有人可以给我解释哪种方法更好或其他替代方法?

由于

2 个答案:

答案 0 :(得分:0)

我将删除“from”列,只使用一个“Change”表并将其链接到具有“ChangeType”的外表,如:

Table1: Person , Columns: Name,EyeColour
Table2: Change: PersonId(FK), Type(FK) ChangeDate, Value
Table3: ChangeType: TypeDescription

如果您需要以历史方式检索值,那么您只需要使用“ChangeDate”列对它们进行查询以对它们进行排序并相应地处理输出。

答案 1 :(得分:0)

首先,您应该只存储出生日期,而不是每年1个条目存储在此人的生日。如果由于某种原因您没有此值,则首选解决方案2。无需将它们组合在一个表中。或者您可以拥有一个包含所有更改的表。您的第一个建议是在这两个选项之间。

您需要尽量降低数据不一致的风险。在今天你的体重从80公斤到82公斤,明天从81公斤到83公斤的情况下很容易结束。这没有多大意义。您应该只存储每个单独的数据点(toWeight)。如果您对此数据进行绘图,则应在数据点之间进行插值以获得连续函数。