Avatar billede plovski Novice
06. marts 2010 - 11:55 Der er 2 kommentarer og
1 løsning

Samkøring-to spørgsmål

Hej dér. Jeg har et spørgsmål angående "samkøring" "synkronisering" af databaser. Jeg må vist hellere forklare...:

Forestil jer følgende. Jeg sidder med en master-database, en anden sidder med en kopi. Lad os sige, at det er en addresse-database. Min makker tilføjer nye poster og opdaterer gamle i databasen (i kopien), og jeg opdaterer nogle andre felter i master-databasen. Er der er funktion til at synkronisere de to databaser, sådan at kopidatabase og materdatabase er éns i indhold?

Spørgsmål to, som måske er lidt i samme boldgade. Lad os sige, at vi har to databaser. En med familiemedlemmer, og én med medlemmer af fx en skakklub. Der er et vist overlap mellem de to, og nu handler det om at der blandt felterne i familiedatabasen skal være ét, der angiver, om familiemedlemmet er med i skal klubben eller ej. Det kan fx være et tekst felt, hvori der står "skak", eller ingenting, et rullegardin hvor feltet skak er valgt  eller...

Jeg har nok fornemmelsen af, at spørgsmålene ikke er så ligetil, men hvis nogen kan nævne funktionens navn, og måske henvise til dokumerenterede løsninger på lignende udfordringer, så vil jeg blive rigtig glad. PF
Avatar billede plovski Novice
06. marts 2010 - 12:44 #1
Lige en opfølgning. Et andet eksempel:

For det første en database med for- og efternavne, email-addresser og i nogle tilfælde addresser, eksporteret fra gmail (base1). For det andet en filemaker-database, med navne, efternavne, addresser og - i nogle tilfælde - email-addresser (base 2).

To ting mere: Base 2 har alle de poster, der indgår i base 1. Base 1 er altså en ("lokal", baseret på postnumre)delmængde af de poster der optræder i base 2 (som er national og rummer alle medlemmer)

Så vi står altså med en base1, der er delmængde af base 2, og som er fyldt ud med email-addresser, men ikke nødvendigvis med post-addresser. Og med en base to, der selv rummer flere poster poster.

Så det handler kort sagt om, at opdatere base 1 med de postaddresser den mangler, men som optræder i base 2. Og det handler om at opdatere base 2 med de email-addresser den mangler, men som optræder i base1.

Jeg går ud fra, at det nemmeste er, at koncentrere sig om at opdatere base 2 og så - når den er opdateret - at udtrække alle dem indenfor det givne postnummer-interval. Så spørgsmålet er vel kort sagt, hvordan jeg føjer den information, der optræder i base 1 til base 2, hvor den mangler.
Avatar billede zordesign Nybegynder
06. marts 2010 - 14:09 #2
For at kunne synkronisere de to databaser er du nødt til at definere, hvornår der er tale om samme person dvs. hvilk(e) felt(er), der skal matche, før du har et match. Det er derfor CPR-nummeret er så genialt, idet det identificerer hver enkelt på en entydig måde. Men det kan du jo ikke forlade dig på. Så hvad er dine muligheder?

Adresser er notorisk upræcise med mindre de er "renset" så alle gader har samme stavemåde og etager etc. har samme form. Men selv om du har adresserne på samme form, så kan det stadig være to forskellige personer, der blot deler adresse, men hvor den ene (for at bruge dit første eksempel) er med i skakklubben og den anden er med i løbeklubben.

Navne er også notorisk problematiske - for det første fordi mellemnavne til tider bruges som efternavne og Per Jones Hansen derfor kan stå som Per Jones eller Per J. Hansen eller Per Hansen eller Per Jones Hansen. For slet ikke at tale om to Per Hansener, der jo meget vel kan være to forskellige personer.

Det letteste er nok at lave en tabel i FileMaker, som har felter svarende til din import fra gmail. Herefter bygger du en relation mellem denne tabel og din egentlige database. Herefter kan du opbygge matchkriterier i flere niveauer afhængigt af, hvor entydigt de rammer. Et bud kunne være:

1) match på e-postadresse (match her er så godt som sikker succes)
2) match på navn og adresse (match her er er et godt bud)
3) match på navn og postnr (ikke helt god, men er der kun ét match går det nok)
4) match på navn (ikke helt gangbar)
osv.

For hvert matchkriterium opbygger du en separat relation i FileMakers relationsgraf. Du kan evt. vælge at lave nogle specielle versioner af felterne som beregnede felter hvor du fjerner alle tegn og mellemrum og laver alt om til små bogstaver. Derved undgår du, at adresserne "Store Gade 5" og "Storegade 5" ses som to forskellige adresser.

Du skriver ikke noget om telefonnumre, men de kan også være et godt bud - i takt med, at flere og flere har deres egen mobiltelefon er de også mere og mere unikke på samme måde som e-postadresser, som færre og færre deler mellem sig. Jeg vil betragte et match på mobilnummer som næste lige så godt som match på e-postadresse, og det gode ved tal er, at de ikke har samme muligheder for fejlstavning - der skal du blot fjerne mellemrum og enten fjerne eventuelle landepræfikser (+45 osv.) eller sætte landepræfikser på alle telefonnumre.

Herefter er der ikke andet for end at prøve at matche alle poster i database 1 mod base 2, og så må du vurdere, hvor langt ned i præcision, du vil gå, før du opgiver at matche og blot importerer posten fra base 1.

Hvis du har et match, men oplysningerne er forskellige i de to databaser, skal du også definere, hvilken database, du stoler mest på. Her ved du selv bedst, men hvis der er dato og tidspunkt for oprettelse og seneste ændring på posterne, bliver arbejdet lidt lettere.

Jeg vil anbefale dig, at du tildeler alle poster et unikt serienummer så du efterfølgende kan identificere hvilket serienummer i den ene base der matcher hvilket nummer i den anden base.

Din fremgangsmåde i øvrigt med at synkronisere op mod base 2 først og så skrive informationen tilbage giver god mening, men her må du igen have et felt at synkronisere op imod. Med mindre du blot vil slette base 1 og så importere alle poster fra base 2 (det vil jo være det letteste).

Der findes et værktøj fra Worldscyn - se http://www.worldsync.com/ -  til at synkronisere to FileMaker-baser, men det er nok ikke lige det, du har brug for.

Det var meget teori og ikke så meget praksis. Hvordan har du tænkt dig at køre importen? Skal det være et script, eller vil du selv ind over manuelt på dem med tvivlsomme match?
Avatar billede zordesign Nybegynder
14. maj 2010 - 12:18 #3
For at kunne synkronisere de to databaser er du nødt til at definere, hvornår der er tale om samme person dvs. hvilk(e) felt(er), der skal matche, før du har et match. Det er derfor CPR-nummeret er så genialt, idet det identificerer hver enkelt på en entydig måde. Men det kan du jo ikke forlade dig på. Så hvad er dine muligheder?

Adresser er notorisk upræcise med mindre de er "renset" så alle gader har samme stavemåde og etager etc. har samme form. Men selv om du har adresserne på samme form, så kan det stadig være to forskellige personer, der blot deler adresse, men hvor den ene (for at bruge dit første eksempel) er med i skakklubben og den anden er med i løbeklubben.

Navne er også notorisk problematiske - for det første fordi mellemnavne til tider bruges som efternavne og Per Jones Hansen derfor kan stå som Per Jones eller Per J. Hansen eller Per Hansen eller Per Jones Hansen. For slet ikke at tale om to Per Hansener, der jo meget vel kan være to forskellige personer.

Det letteste er nok at lave en tabel i FileMaker, som har felter svarende til din import fra gmail. Herefter bygger du en relation mellem denne tabel og din egentlige database. Herefter kan du opbygge matchkriterier i flere niveauer afhængigt af, hvor entydigt de rammer. Et bud kunne være:

1) match på e-postadresse (match her er så godt som sikker succes)
2) match på navn og adresse (match her er er et godt bud)
3) match på navn og postnr (ikke helt god, men er der kun ét match går det nok)
4) match på navn (ikke helt gangbar)
osv.

For hvert matchkriterium opbygger du en separat relation i FileMakers relationsgraf. Du kan evt. vælge at lave nogle specielle versioner af felterne som beregnede felter hvor du fjerner alle tegn og mellemrum og laver alt om til små bogstaver. Derved undgår du, at adresserne "Store Gade 5" og "Storegade 5" ses som to forskellige adresser.

Du skriver ikke noget om telefonnumre, men de kan også være et godt bud - i takt med, at flere og flere har deres egen mobiltelefon er de også mere og mere unikke på samme måde som e-postadresser, som færre og færre deler mellem sig. Jeg vil betragte et match på mobilnummer som næste lige så godt som match på e-postadresse, og det gode ved tal er, at de ikke har samme muligheder for fejlstavning - der skal du blot fjerne mellemrum og enten fjerne eventuelle landepræfikser (+45 osv.) eller sætte landepræfikser på alle telefonnumre.

Herefter er der ikke andet for end at prøve at matche alle poster i database 1 mod base 2, og så må du vurdere, hvor langt ned i præcision, du vil gå, før du opgiver at matche og blot importerer posten fra base 1.

Hvis du har et match, men oplysningerne er forskellige i de to databaser, skal du også definere, hvilken database, du stoler mest på. Her ved du selv bedst, men hvis der er dato og tidspunkt for oprettelse og seneste ændring på posterne, bliver arbejdet lidt lettere.

Jeg vil anbefale dig, at du tildeler alle poster et unikt serienummer så du efterfølgende kan identificere hvilket serienummer i den ene base der matcher hvilket nummer i den anden base.

Din fremgangsmåde i øvrigt med at synkronisere op mod base 2 først og så skrive informationen tilbage giver god mening, men her må du igen have et felt at synkronisere op imod. Med mindre du blot vil slette base 1 og så importere alle poster fra base 2 (det vil jo være det letteste).

Der findes et værktøj fra Worldscyn - se http://www.worldsync.com/ -  til at synkronisere to FileMaker-baser, men det er nok ikke lige det, du har brug for.

Det var meget teori og ikke så meget praksis. Hvordan har du tænkt dig at køre importen? Skal det være et script, eller vil du selv ind over manuelt på dem med tvivlsomme match?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester