30. december 2002 - 11:21Der er
8 kommentarer og 1 løsning
historik, tror jeg
Hej Eksperter,
jeg har brug for lidt assistance. Jeg har en database med produktionsdata, hvor jeg bla. har en tabel med følgende felter ([ID]nøgle, [Prodnr], [Receptnr], [Varebeskrivelse].
Mit problem er at der fra tid til anden sker det at [Varebeskrivelsen] ændres til noget andet, hvordan kan jeg sikre mig at en sådan ændring ikke slår igennem på historiskedata???
Deter desværre ikke så simpelt. Jeg går ud fra, at de historiske data (salget) alene refererer til ovenstående tabel.
Du er nødt til at implementere en tidsstyring - ogdet kræver ændringer i hele applikationen - alternativt skal de historiske data også indeholde værdierne fra denne tabel.
Hvis det er et "datawarehouse" som genereres, så skal data denormaliseres, således at varebeskrivelsen tages med over i databaseskuret med det samme - så er problemet der kun for det kørende system.
jeg har overvejet at ligge [Varebeskrivelse] i en underliggende tabel, sammen med et timestamp og så [ID] som fremmednøgle, men er ikke helt sikker på at det løser mit problem .
lap>>> det er det jeg gør idag, trækker varebeskrivelsen med over på hver record der oprettes i produktionstabellen.
jkjaers>>>det sker automatisk, men hvis varebeskrivelsen ændres vil historiske data, hvor varebeskivelsen var "tekst1", efter en ændring blive lavet om til "tekst2"
Misforståelse: som det kører idag trækkes varebeskrivelsen med over på hver ny record der oprettes i produktionstabellen. Det virker fint nok.
Jeg er igang med at normaliserer databasen da den ikke tilnærmelsesvis kører optimalt, og det er i den forbindelse at jeg så løber ind i det her problem. lap>>> du har vel egentligt svaret på mit spørgsmål, at jeg ikke skal normaliserer den Helt, men fortsat skal trække vare beskrivelsen med over.
Ja, pointen med et datavareskur er netop, at data ikke nødvendigvis skal være normaliserede.
Hvis du normaliserer det, så vil historik ikke virke.
Men, eftersom du er i gang med at normalisere, så skal du også ændre applikationen - derfor bør du gøre følgende:
Alle records i "salg" skal være tidsstemplet - og dit varekatalog skal have en ekstra kolonne - nemlig et "gældende_fra", som også er et tidsstempel.
På den måde kan du altid finde den gyldige record for et givet id på et givet tidspunkt. Det vil nemlig være den, hvor "gældende_fra" ligger umiddelbart før nu.
For at det skal blive simpelt kan du også indføre et "gældende_til", men så går du igen lidt på kompromis med normaliseringen - men det gør udtræk lidt nemmere.
Det kræver dog en del ændringer i applikationen, men er den korrekte måde at gøre det. Samtidig skal du også ændre nøgle på tabellen - id+gældende_fra er nu primærnøgle.
Jeg har været ude for det samme problem og har valgt at blive ved med at trække "varebeskrivelsen" med over i de nye records. Med mindre der er tale om en meget stor mængde records eller meget lange varebeskrivelser, er det vel kun et teoretisk og æstetisk problem?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.