Vraag


Acties:
  • 0 Henk 'm!

  • yozgoesdigital
  • Registratie: Mei 2010
  • Laatst online: 09-09 15:16
Mijn vraag
Via een interview applicatie op telefoon krijg ik een tabel aangeleverd met dezelfde data in meerdere kolommen. Het verzamelen van de informatie kan ik niet aanpassen dus wil nu in database de data aggregeren. Als voorbeeld ziet de data er zo uit:
IDDatumph totaaltemperatuur totaalBron1NaamBron1hoeveelheidBron2NaamBron2hoeveelheidBron3NaamBron3hoeveelheid
121-8-20177.430.5A2.1B8.9C7.5
221-8-20177.330.5B8.1A7.9A6.5
320-8-20177.630.7A8.7B5.0

In totaal kan tot 8 bronnen toegevoegd worden. Elke bron komt vanuit dezelfde lijst bronnen (ca 35) waar en af en toe wat bronnen bij kunnen komen. We hebben het hier over ca 500 ID's per jaar met gemiddeld ca 3 bronnen per ID, dus problemen met traagheid etc verwacht ik niet tegen te komen.
Omdat waarschijnlijk al veel meer mensen met meer ervaring en kennis over nagedacht hebben, is mijn vraag hoe zouden jullie de data beschikbaar maken om per ID en/of per dag/week/maand te kunnen agregreren?
Subvraag:Is de onderstaande oplossing logisch of kan dat makkelijker?

Relevante software en hardware die ik gebruik
De data komt vanuit de server van de mobiele app naar een Postgresql database.

Wat ik al gevonden of geprobeerd heb:
Zelf zat ik te denken om in materialized views meerdere tabellen te maken. Ik wilde de ideën afwachten voordat ik met SQL aan de slag ga:
1) Een tabel te maken met de generieke data (ID, datum, totaal pH en tempertuur)
2) een andere tabel waar de 8 kolommen onder elkaar geplaatst worden met ID, bron naam en bron hoeveelheid
Deze twee tabellen zijn dan weer samen te voegen met ID als 1:many relationship en te groeperen op gewenste parameter

Beste antwoord (via yozgoesdigital op 22-08-2017 08:45)


  • desmond
  • Registratie: Januari 2004
  • Niet online
Volgens mij zit je in de goede richting de denken. Het vuile werk doe je eerst door jouw puntje 2). Ik zou in eerste instantie gewoon een view bouwen. Materialiseren kan altijd nog als performance daarom vraagt. En vervolgens netjes categoriseren via jouw puntje 1) - dat laatste op het laagst mogelijke niveau. Daarbovenop kan je dan de aggregaties ontwikkelen al naar gelang de behoefte. Die aggregaten kan je ook materialiseren, bijvoorbeeld in plaats van de views uit puntje 2). Het ligt eraan wanneer je wat ververst wilt hebben.

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • desmond
  • Registratie: Januari 2004
  • Niet online
Volgens mij zit je in de goede richting de denken. Het vuile werk doe je eerst door jouw puntje 2). Ik zou in eerste instantie gewoon een view bouwen. Materialiseren kan altijd nog als performance daarom vraagt. En vervolgens netjes categoriseren via jouw puntje 1) - dat laatste op het laagst mogelijke niveau. Daarbovenop kan je dan de aggregaties ontwikkelen al naar gelang de behoefte. Die aggregaten kan je ook materialiseren, bijvoorbeeld in plaats van de views uit puntje 2). Het ligt eraan wanneer je wat ververst wilt hebben.

Acties:
  • 0 Henk 'm!

  • yozgoesdigital
  • Registratie: Mei 2010
  • Laatst online: 09-09 15:16
Ik heb me meer verdiept in in views en zolang het niet te lang duurt om views te genereren kan ik volgens mij het beste bij views blijven.
De tabel onder 2) was uiteindelijk zo gemaakt met UNION (Ik begin mij steeds meer af te vragen waarom ik niet jaren geleden al met SQL aan de gang ben gegaan, maar daarvoor in plaats in spreadsheets ben blijven hangen)
Ik heb het geheel nog niet helemaal kunnen neerzetten omdat ik nog een probleempje heb met waardes die als 'empty strings' worden geïmporteerd, maar zodra ik opgelost komt ik er wel uit.