sql >> Databasteknik >  >> RDS >> Mysql

Strategi för att mappa flera arkiverade i en enda tabell till ett enda fält i en annan tabell

Om du tittar på ditt första påstående

"...egenskaper för ett enda objekt är mätt via olika källor ..."

du kan faktiskt direkt se att du förmodligen letar efter 3 bord. Källan Tabellen du föreslår ser bra ut. Jag föreslår att Objekt tabell ser dock mer ut

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

Ditt tredje bord är ditt mått bord, som kan tänkas se ut så här

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

Fördelarna här är

  • Att du inte behöver ha en specifik kolumn i ditt Objekt för en specifik källa . Detta blir väldigt svårt att underhålla om man plötsligt har fler källor.
  • Inte alla objekt behöver ett värde för varje källa , även om du med den här strukturen fortfarande kan avgöra om ett objekt saknar mätning från en viss källa också enkelt.
  • Du kan ha flera mätningar lagrade för ett objekt (separerade via DatePerformed), och med Max(DatePerformed) kan du hämta den senaste mätningen.

Då kan du få en resultatlista, om du sedan gör det

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



  1. En lösning för:Markörer stöds inte i en tabell som har ett klustrat kolumnlagerindex

  2. MySql :Ordna efter och grupp Genom att kombinera inte ge den senaste posten

  3. 2nd Quadrant på PostgresConf US 2018

  4. Hur skapar man en tabell med hjälp av en sökfråga i SQL Server?