|
| [MySQL] En svær en at finde ud af!? Fra : AlbertE |
Dato : 16-09-05 11:33 |
|
Jeg indrømmer, at overskriften ikke er den bedste, men jeg kunne ikke
forklare det bedre
Jeg har følgende tabel:
History:
id, id_navn, id_telefon
1, 1, 2
2, 2, 2
3, 3, 3
Dvs. at jeg har 3 navne med 2 telefonnumre - ingen problem i det. Men hvis
så id_navn 1 skifter telefonnummer bliver der indsat en ny række i tabellen
(for at opretholde en history og dermed ikke bare ændre værdien på den
eksisterende række):
id, id_navn, id_telefon
1, 1, 2
2, 2, 2
3, 3, 3
4, 1, 5
Mit problem er så, at hvis jeg laver et udtræk på telefon tabellen (den er
ikke vist her), hvor jeg vil have en liste med hvilke navne der har f.eks.
tlf. "id_telefon 2", så figurere "id_navn 1" i listen selvom han jo har
skiftet telefonnummer til "id_telefon 5". Der burde kun være "id_navn 2" i
listen.
Hvordan laver jeg et udtræk, så jeg undgår det?
| |
Kristian Damm Jensen (16-09-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 16-09-05 12:54 |
|
AlbertE wrote:
> Jeg indrømmer, at overskriften ikke er den bedste, men jeg kunne ikke
> forklare det bedre
>
> Jeg har følgende tabel:
>
> History:
> id, id_navn, id_telefon
> 1, 1, 2
> 2, 2, 2
> 3, 3, 3
>
> Dvs. at jeg har 3 navne med 2 telefonnumre - ingen problem i det. Men hvis
> så id_navn 1 skifter telefonnummer bliver der indsat en ny række i tabellen
> (for at opretholde en history og dermed ikke bare ændre værdien på den
> eksisterende række):
>
> id, id_navn, id_telefon
> 1, 1, 2
> 2, 2, 2
> 3, 3, 3
> 4, 1, 5
>
> Mit problem er så, at hvis jeg laver et udtræk på telefon tabellen (den er
> ikke vist her), hvor jeg vil have en liste med hvilke navne der har f.eks.
> tlf. "id_telefon 2", så figurere "id_navn 1" i listen selvom han jo har
> skiftet telefonnummer til "id_telefon 5". Der burde kun være "id_navn 2" i
> listen.
>
> Hvordan laver jeg et udtræk, så jeg undgår det?
Det gør du ikke. Du har ganske enkelt ikke information nok. *Hvis* du
tillægger id'er en betydning ud over at være nøgler og *hvis* du
postulerer, at en person kun kan have én telefon, kan det lige lade
sig gøre. Begge tiltag er usunde.
Det nemmeste vil være at tilføje en statuskolonne til tabellen, så
du kan skelne mellem gældende og historisk data. Hvis du vil gøre det
rigtig fint, lader du det være en dato, så du over i købet kan se,
hvornår ændringen skete.
Kristian
| |
AlbertE (16-09-2005)
| Kommentar Fra : AlbertE |
Dato : 16-09-05 13:10 |
|
>> Hvordan laver jeg et udtræk, så jeg undgår det?
>
> Det gør du ikke. Du har ganske enkelt ikke information nok. *Hvis* du
> tillægger id'er en betydning ud over at være nøgler og *hvis* du
> postulerer, at en person kun kan have én telefon, kan det lige lade
> sig gøre. Begge tiltag er usunde.
>
> Det nemmeste vil være at tilføje en statuskolonne til tabellen, så
> du kan skelne mellem gældende og historisk data. Hvis du vil gøre det
> rigtig fint, lader du det være en dato, så du over i købet kan se,
> hvornår ændringen skete.
Undskyld, det var også klodset af mig - jeg har et dato felt også.
id, dato, id_navn, id_telefon
1, 2005-01-01, 1, 2
2, 2005-01-01, 2, 2
3, 2005-01-01, 3, 3
4, 2005-09-16, 1, 5
Du har selvfølgelig en pointe i, at man kan lave en boolean, der bestemme om
rækken er den gældende, men jeg kan ikke se hvordan det kan lade sig ud fra
dato?
| |
|
|