08. januar 2003 - 12:46Der er
8 kommentarer og 1 løsning
Problemer med normalisering
Jeg har følgende felter i en tabel (udsnit):
ID Navn Email Kommentar 12 Jan jan@jan.dk 732 Jan jan@jan.dk A 23 Jan jan@jan.dk C 3 Jens jens@jens.dk B 999 Jens jens@jens.dk C 87 John john@john.dk A 55 Jytte j@jytte.dk osv. Tabellen er sorteret på emailadresser og viser at den samme bruger eksisterer flere gange :o( A, B og C navnene på distributionslister som modtageren er tilføjet på. Er der ingen værdi i kommentarfeltet er det fordi abonnementet er registreret i en m-m-relationstabel med BrugerID og ListeID. Hvordan laver jeg en forespørgsel der fjerner de 2 x Jan og appender A og C til min m-m-relationstabel, knyttet til den 1. Jan? I tilfældet med "Jens" skal kun den ene slettes og værdierne B og C skal knyttes til den andens ID i min m-m-relationstabel.
Jeg forestiller mig noget med en temp-tabel, hvor jeg lagrer de unikke brugere (Count Distinct?) og alle de mulige lister som true/false-felter og sætter værdierne true, hvis queryen støder på den samme emailadresse i den originale tabel. Men jeg er ikke sikker på fremgangsmåden..
Laaangt spørgsmål.. Håber at nogen ved hvad jeg fabler om og er i stand til at hjælpe mig :o)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Efter at have eksperimenteret en hel del med problemet er jeg kommet til den konklusion, at det i hvert fald ikke kan løses med forespørgsler. Det må kræve noget kodning, men hvordan den i givet fald skal se ud, kan jeg ikke lige gennemskue.
I pseudokode må det være noget i denne stil:
Hvis Jan@Jan.dk forekommer mere end en gang, skal du huske det nummer, han forekommer under første gang, men kun hvis kommentarfeltet ikke er tomt. Hvis feltet er tomt, skal du springe personen over.
Næste gang du møder Jan@Jan.dk, skal du ignorere hans ID, men du skal huske hans Bemærkning. Nu skal du finde den første forekomst af jan@jan.dk igen. Det ID der står her, skal du nu overføre til den nye tabel sammen med bemækningen for den anden forekomst. Dette skal du gentage til der ikke er flere forekomster. Derefter skal du tage fat i den næste e-mail adresse.
Hvis der findes en post, hvor bemærkningskolonnen ikke er tom i nogen af forekomsterne, skal ID for den første forekomst overføres sammen mked bemærkningen for hver af forekomsterne.
arne-v-> Jeg har allerede tidligere prøvet noget i den stil, men det giver det problem at hvis du selecter ID inds i BrugerID, at den samme person optræder under mange forskellige ID'er,men i M:N tabellen kun skal optræde under det først forekommende ID.
Nu må jeg vist hellere blande mig i debatten.. Det lyder som om I virkelig har tænkt så det knaget :o/ - tak for det so far.. Kan man ikke lave en tempTabel, der indeholder alle felterne i den originale tabel + et felt for hver liste (hhv. A, B og C)? Først skal alle de brugere, hvis kommentarfelt er tomt, lagres med deres ID i tempTabellen. Når jan@jan.dk (ID 732) forekommer, skal der søges efter jan@jan.dk i tempTabellen. Da han findes, skal feltet A i tempTabellen sættes fra False til True og ID 732 skettes fra org. tabellen. Når jan@jan.dk (ID 23) findes, skal feltet C i tempTabellen sættes fra False til True og ID 23 slettes fra org. tabel. Osv. osv.. Til sidst tages alle de brugere, der ikke allerede findes i tempTabellen, f.eks. john@john.dk (ID 87) der ikke havde et tomt Kommentarfelt overhovedet, og gemmes med deres ID i temptabellen. I tilfældet med john@john.dk ID 87 sættes feltet A til True og ID 87 slettes fra org. tabellen.
Er det herefter så ikke til at tilføje linier i m-m-relationstabellen ved at løbe tempTabellen igennem og tilføje en linie i m-m for alle brugere med alle de værdier, der er True?
Men jeg har meget svært ved at forestille mig hvorledes det skal gøres rent praktisk, enten i SQL eller i VB?
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.