将单个表中的多个字段映射到另一个表中的单个字段的策略

时间:2014-08-06 06:51:17

标签: mysql sql mysql-workbench

我正在创建一个数据库,通过不同的来源测量单个对象的不同属性。我有一个包含源列表以及源描述和源ID的表。我想创建一个表,列出我将用于特定对象的特定测量的源。所以在这个表中我将有一个objectID字段和我要测量的属性。对于我想要映射sourceID的每个属性。下图描述了我的设计 enter image description here

我想知道在这种情况下我会有什么样的映射? 在我看来,我将必须将Object表中的每个单独的属性列映射到源表中的sourceID。有了这个,我将有多个1:n映射。这样好吗? 我正在使用MySQL工作台。请告诉我这是否可以更好地设计。

修改#1 对于每个对象,我想查询哪个是特定"属性的来源"领域。获取此信息后,我将使用给定的源将该特定属性的数据记录在不同的表中。

1 个答案:

答案 0 :(得分:2)

如果你看一下你的第一个陈述

" ...单个对象的属性通过不同的来源测量 ..."

你实际上可以直接看到你可能正在寻找3张桌子。您建议的来源表看起来不错。我建议对象表看起来更像

ObjectId
ObjectName
ObjectDescription
... other object details (except measurement)

您的第三个表格是您的度量表格,可能看起来像这样

MeasurementId
ObjectId - reference to Object table
SourceId - reference to Source table
DatePerformed
MeasurementValue
Success 
Notes  etc

这里的好处是

  • 您不需要在对象中为特定来源设置特定列。如果突然有更多来源,这将变得非常难以维护。
  • 并非所有对象都需要每个来源的值,但是使用此结构,您仍然可以确定对象是否缺少来自特定来源的测量值。< / LI>
  • 您可以为对象存储多个测量值(通过DatePerformed分隔),使用Max(DatePerformed)可以检索最新测量值。

然后你可以得到一个结果列表,如果你那么做

SELECT ObjectId, SourceId, DatePerformed, MeasurementValue
FROM Measurement
WHERE ObjectId = <your Object>
[AND/OR] SourceId = <your source>