Sjaak is juist gekrompen

Icey schreef op woensdag 29 augustus 2012 @ 14:57:
Nee, jouw oplossing zorgt voor een veelvoud aan onnodige rijen. Mijn oplossing beperkt dat juist!
Iedere keer als één van jouw waardes wijzigd (leeftijd, gewicht, lengte) voeg je een extra rij toe met gegevens die helemaal niet gewijzigd zijn (onnodige data!) en dat iedere dag weer.
Daarnaast, waarom zou je in hemelsnaam de leeftijd op willen slaan? Voeg de geboortedatum toe aan de tabel Users en je bent klaar.
Sla alleen gegevens op als iets wijzigd (ipv iedere dag) dan haal je gewoon de laatst bekende gegevens op...
Stom voorbeeld; je leeftijd wijzigd 1x per jaar en toch wil je het voor iedereen iedere dag op gaan slaan.
Ja, nu zie ik wat je bedoelt. Bij mijn ding zet ik het er altijd in, behalve als er niks veranderd is, dan komt er geen rij. Dan neemt hij de waarden van de vorige rij (= dag). Die leeftijd was een voorbeeld xD Ik gebruik de waarde leeftijd niet, en al zou ik dat doen, dan zou ik geboortedatum bij users implanteren en leeftijd berekenen..
phex schreef op woensdag 29 augustus 2012 @ 15:00:
Over de leeftijd heb je helemaal gelijk. Maar gewicht en lengte worden op een bepaalde datum vast gesteld. Dus samen zijn ze de values van een person+date combinatie.
Ik maak niet onnodig veel rijen, maar ik voeg extra kolommen voor. Zolang deze samen een moment zijn is dit perfect normalisatie. Bij jouw oplossing is elke waarde een nieuwe rij...
Ik weet niet precies wat voor applicatie de OT in gedachten heeft. Maar gewicht, lengte op een bepaalde datum lijkt me info die je altijd wil opslaan op het moment dat je deze checkt. Als het gewicht niet gewijzigd is, betekent dat niet dat die data niet relevant is, integendeel!
Lees mijn post over anti-patterns ook even hierboven waarom jouw oplossing meestal geen goede keuze is.
Je hebt compleet gelijk

phex schreef op woensdag 29 augustus 2012 @ 15:09:
Omdat het een momentopname is. Hij gebruikt een datum veld dus het is niet direct de waarde van een persoon, maar de combinatie datum persoon. Zoals ik al net zei, als de waardes niet gewijzigd zijn, is het nog steeds nuttige data.
Ik denk namelijk dat hij met een cronjob (3d) grafieken wil maken

Ja, het gaat me om de vergelijking van:
- is er iets gebeurd;
- is er veel gebeurd.
Bijvoorbeeld als je het voor een spel gebruikt, dan kan je op die manier de inactiviteit van een speler bepalen aan de hand van speeltijd, experience etc.
OkkE schreef op woensdag 29 augustus 2012 @ 15:29:
Ik ben nu wel benieuwd of die "leeftijd", "lengte" en "gewicht" zomaar voorbeeld data is, en er dus beter gesproken kan worden over A, B en C. Of dat het ook echt die data is, want dan zou o.a. geboortedatum een veel betere optie zijn dan leeftijd.
Het is inderdaad voorbeelddata.
VERGEET DE LEEFTIJD, NIET ZEUREN OVER DE LEEFTIJD.
Het gaat wel over momentopnamen, het is data die elke dag kan veranderen, maar het hoeft niet. Het is voor statistieken, grafieken.You know too much..
Ik heb even heel leuk een voorbeeldje gemaakt voor het nut van een 4D tabel:
Stel, je wil de prijzen van olieconcerns vergelijken. Dan maak je een simpel tabelletje:
| Diesel | Euro 95 | Euro 98 |
Shell | 1,79 | 1,88 | 3,73 |
BP | 1,72 | 1,35 | 3,58 |
etc.. | 1,75 | 1,80 | 3,78 |
waarschuwing: data kan incorrect zijn!
Maar dan! Straks wil je dat elke dag doen, voor meerdere landen. Als je dat nou voor 3 jaar doet, voor 30 landen, dan heb je 3 * 365 * 30 = 32850 tabellen. Dat is een beetje onhandig hè? Die tabel hierboven heeft, zoals ik het noem, 2 dimensies, X en Y, rij en kolom. Om dit dagelijks te doen, voegen we een dimensie toe: datum. Nu heb je nog maar 30 tabellen nodig! (ja, dat is te doen en nog handig ook, maar geniet van het voorbeeld) Om al deze data in één "tabel" te proppen, voegen we nóg een dimensie toe: het land. Nu kan je lekker al je data in de tabel proppen, en er makkelijk door bladeren.
Velen van jullie zullen dit als onnodig beschouwen, maar ik vind het wel wat hebben :3
[
Voor 14% gewijzigd door
Josaus op 29-08-2012 19:13
]