0

我有一个模型,我们可以在其中导入更改,可以说,

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

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

解决方案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

如果可能的话,谁能给我解释哪种方法更好或任何其他替代方法?

谢谢

4

2 回答 2

0

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

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

于 2013-07-08T00:29:52.790 回答
0

我将删除“来自”列,仅使用一个“更改”表并将其链接到具有“更改类型”的外部表,例如:

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

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

于 2013-07-08T00:28:22.940 回答