Mysql
 sql >> Database >  >> RDS >> Mysql

Strategia per mappare più archiviati in una singola tabella a un singolo campo in un'altra tabella

Se guardi la tua prima affermazione

"...proprietà di un singolo oggetto sono misurati tramite fonti diverse ..."

puoi effettivamente vedere subito che probabilmente stai cercando 3 tavoli. La Fonte il tavolo che proponi sembra a posto. Suggerisco quell'Oggetto la tabella sembra più simile a

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

La tua terza tabella è la tua Misurazione tabella, che potrebbe plausibilmente assomigliare a questa

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

I vantaggi qui sono

  • Che non devi avere una colonna specifica nel tuo Oggetto per una specifica Fonte . Questo diventa molto difficile da mantenere se improvvisamente hai più fonti.
  • Non tutti gli Oggetti bisogno di un valore per ogni Fonte , sebbene con questa struttura sia ancora possibile determinare se a un Oggetto manca la Misurazione anche da una particolare fonte.
  • Puoi memorizzare più misurazioni per un oggetto (separate tramite DatePerformed) e utilizzando Max(DatePerformed) puoi recuperare l'ultima misurazione.

Quindi puoi ottenere un elenco di risultati, se lo fai

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