我正在创建一个数据库,其中通过不同的源测量单个对象的不同属性。我有一个表,其中包含源列表以及源描述和源 ID。我想创建一个表,其中列出我将用于特定对象的特定测量的源。因此,在此表中,我将有一个用于 objectID 的字段以及我要测量的属性。对于每个属性,我想映射一个 sourceID。下图描述了我的设计
我想知道在这种情况下我会有什么样的映射? 在我看来,我必须将对象表中的每个单独属性列映射到源表中的 sourceID。这样我将拥有多个 1:n 映射。这样好吗? 我正在使用 MySQL 工作台。请告知是否可以以更好的方式设计。
编辑#1 对于每个对象,我想查询哪个是特定“属性”字段的源。获得此信息后,我将使用给定的源在不同的表中记录该特定属性的数据。
最佳答案
如果你看看你的第一个陈述
“...单个对象的属性是通过不同的源测量...”
您实际上可以立即看出您可能正在寻找 3 张 table 。您建议的源表看起来不错。我建议 Object 表看起来更像
ObjectId
ObjectName
ObjectDescription
... other object details (except measurement)
您的第三个表是您的测量表,可以想象它看起来像这样
MeasurementId
ObjectId - reference to Object table
SourceId - reference to Source table
DatePerformed
MeasurementValue
Success
Notes etc
这样做的好处是
- 您不需要在对象中为特定源提供特定列。如果你突然有了更多的资源,这将变得非常难以维护。
- 并非所有对象都需要每个源的值,尽管使用此结构您仍然可以轻松确定对象是否缺少特定源的测量值。里>
- 您可以为一个对象存储多个测量值(通过 DatePerformed 分隔),并使用 Max(DatePerformed) 可以检索最新的测量值。
然后你可以得到一个结果列表,如果你这样做
SELECT ObjectId, SourceId, DatePerformed, MeasurementValue
FROM Measurement
WHERE ObjectId = <your Object>
[AND/OR] SourceId = <your source>
关于mysql - 将单个表中的多个字段映射到另一个表中的单个字段的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153966/