Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Estratégia para mapear vários arquivados em uma única tabela para um único campo em outra tabela


Se você olhar para sua primeira declaração

"...propriedades de um único objeto são medidos através de diferentes fontes ..."

você pode ver imediatamente que provavelmente está procurando por 3 mesas. A Fonte tabela que você propõe parece bem. Sugiro que Objeto mesa embora pareça mais
ObjectId
ObjectName
ObjectDescription
... other object details (except measurement)

Sua terceira tabela é sua Medição mesa, que poderia ser assim
MeasurementId
ObjectId - reference to Object table
SourceId - reference to Source table
DatePerformed
MeasurementValue
Success 
Notes  etc

Os benefícios aqui são
  • Que você não precisa ter uma coluna específica em seu Objeto para uma Fonte específica . Isso se torna muito difícil de manter se de repente você tiver mais fontes.
  • Nem todos os objetos precisa de um valor para cada Fonte , embora com essa estrutura você ainda possa determinar se um objeto está faltando Medição de uma fonte específica facilmente também.
  • Você pode ter várias medições armazenadas para um objeto (separadas por meio de DatePerformed) e, usando Max(DatePerformed), você pode recuperar a medição mais recente.

Então você pode obter uma lista de resultados, se você fizer isso
SELECT ObjectId, SourceId, DatePerformed, MeasurementValue
FROM Measurement
WHERE ObjectId = <your Object>
[AND/OR] SourceId = <your source>