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

标签 mysql sql mysql-workbench

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

我想知道在这种情况下我会有什么样的映射? 在我看来,我必须将对象表中的每个单独属性列映射到源表中的 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/

相关文章:

mysql - SQL insert into select from - 插入 id 而不是数据

php - 需要使用 foreach 循环中的变量执行 SQL 查询

mysql - 从子查询结果中删除 id

mysql - 将第二高日期与最新日期进行比较

MySQL 服务器与 XAMPP

MySQL 我需要从 txt 文件导入数据,但在文件中我有不同的数据类型

mysql - 如何使用 LOAD DATA INFILE 将数据导入特殊字符列名称

php - 从数组中找到值的总和

sql - 使用 JSONB 列中的值连接表

php - Select 语句回显行两次