Avatar billede pdom Nybegynder
30. april 2005 - 12:30 Der er 15 kommentarer og
1 løsning

Opdeling af DB

Jeg ønsker at lave en kundeDB inkl. beskrivelse af kundernes anlæg (ialt ca. 150stk).
Jeg har allerede en kundeDB med ID (autonum), Firmanavn, adresse, postby, tlf, kontaktpers, lokalnr, email, samt en del ja/nej felter.
I første omgang ønsker jeg at opdele DB'en i følgende 4 tabeller:
Tabel 1 (Firma): ID, Firmanavn
Tabel 2 (Afdeling): AfdID, Afdeling, adresse, postby, tlf, + andre ting der vedrører afdelingen
Tabel 3 (Kontakt): Kontaktpers, lokalnr, email, stilling, osv.
Tabel 4: Postnr, Bynavn

Vil dette være praktisk?
Og hvordan gøres det evt.?

Det skal lige bemærkes at det er en eksisterende db, med ca. 150 poster.
Avatar billede kalp Novice
30. april 2005 - 12:40 #1
Tabel 1 (Firma): ID, Firmanavn, afdID
Tabel 2 (Afdeling): AfdID, Afdeling, adresse, postby, tlf, + andre ting der vedrører afdelingen
Tabel 3 (Kontakt): afdID,Kontaktpers, lokalnr, email, stilling, osv.

Du skal i hvertfald have en reference fra de forskellige tabeller.. går ud fra det er afdID
Avatar billede webcreator Nybegynder
30. april 2005 - 12:55 #2
Jeg ville umiddelbart anbefale dig, at sætte dig ind i normalisering af databaser. Den bør som udgangspunkt være på den såkaldte 3. NormalForm.

Som udgangspunkt bør du samle de felter, som du er helt sikre på _skal_ udfyldes. Dem er der ingen grund til at splitte op. Derudover skal du sørge for, at der ikke er redundans (at samme data står i tabellen flere gange). Dette kan du (som du helt rigtigt har gjort), fikse ved fx at dele postnummer og bynavn ud i en separat tabel. Dermed kan du bruge postnummeret som FOREIGN-key i de andre tabeller.
Avatar billede webcreator Nybegynder
30. april 2005 - 12:56 #3
Du kan blive lidt klogere på normalisering, ved at kigge her :
http://www.databasejournal.com/sqletc/article.php/1428511

Hvis det er nyt for dig, så kan det dog virke en smule tungt - men prøv :)
Avatar billede jesperfjoelner Nybegynder
30. april 2005 - 13:08 #4
Du er ved at lave 1-1 relationer mellem information som hører til samme enhed.
Hvis der til alle (eller næsten alle) dine firmaer er information om afdeling,afdelingsadrese,postby osv er der ingen grund til at opdele det i flere tabeller.
De tilfælde hvor det er hensigtsmæssigt at lave 1-1 relationer kan f.eks. være hvis dine kunder falder i nogle store kategorier, hvor du registrer noget bestemt information om alle firmaerne (f.eks. navn, adresse, telefon osv.), og så har noget information, som kun hører til bestemte grupper.
Så kan du, for ikke at få for mange tomme felter i firmatabellen, nøjes ved at gemme fællesinformationen her og lave en tabel til resten af informationen.
Det ser dog ikke ud til at være tilfældet for dig, hvor du bør holde det i samme tabel.
Hvis du derimod skal til at registrere ordrer, samtale, ansatte i firmaerne eller lignende skal det selvfølgelig i andre tabeller.
Avatar billede pdom Nybegynder
30. april 2005 - 22:29 #5
Lige kommet tilbage fra konfirmation!

Grunden til at jeg ville dele den op i flere tabeller var, at jeg har flere firmaer, som har flere afdelinger (men samme "hovednavn"). F.eks. en bank. I hver afdeling kan der så være 1 eller flere kontaktpersoner.

Databasen skal senere (når dette er på plads) udbygges med dokumentation over firmaernes telefonanlæg. Hvordan dette skal bygges op, har jeg ikke helt på plads endnu, men det vil være specifikt for hver afdeling. Derfor opdelingen allerede nu.

Webcreator> jeg vil prøve at kigge på normalisering. Jeg har kun erfaring i at lave små simple databaser som f.eks. medlemskartoteker og adressedatabaser.
Avatar billede webcreator Nybegynder
30. april 2005 - 23:38 #6
Som udgangspunkt skal du bare sørge for disse to ting :
1) Hvis felter ikke SKAL udfyldes, så placeres de i egne tabeller
2) Der må ikke opstå redundant data

Hvis du følger disse regler, så er du godt rustet :)
Avatar billede pdom Nybegynder
01. maj 2005 - 00:41 #7
Ok! Men så tilbage til spørgsmålet: Hvordan opdeler jeg så den eksisterende DB i de tabeller jeg skal bruge?

Jeg mener der findes noget der hedder en "tabeloprettelsesforespørgsel" (Pyh det var et langt ord).
Men jeg ved ikke helt hvordan den fungerer?
Kan nogen hjælpe?
Avatar billede pdom Nybegynder
02. maj 2005 - 19:29 #8
Var der nogen der kunne hjælpe med spøgsmålet fra 01/05-2005 00:41:13 ??
Avatar billede lelupe Nybegynder
02. maj 2005 - 22:27 #9
Du får brug for et par linktabeller tblfirmafd m. flg. felter ID,afdID (en en-til mange relation fra firma til afdeling) og evt en anden linktabel tblafdkontakt d.v.d. du får behov for et kontaktid. Personligt ville jeg foretrække at dele databasen op i en kopi af databasen og når jeg har fået det til at fungere arbejde videre med kopien
Avatar billede pdom Nybegynder
03. maj 2005 - 06:45 #10
lelupe> det må jeg jo så prøve. Du hører (sandsynligvis ;-) nærmere.
Avatar billede pdom Nybegynder
03. maj 2005 - 22:34 #11
Jeg ka' sq ikke hitte ud af det, så jeg starter lige forfra:
Har en DB med 1 tabel (Kundedatabase) med følgende felter:
Id (Autonum) (Primær Nøgle)
Navn (Tekst)
Adresse (Tekst)
PostBy (Tekst)
Kontaktperson (Tekst)
Hovednummer (Tal)
Lokalnr (Tal)
mail (Tekst)
samt en del ja/nej afkrydsningsfelter.
Nu vil jeg gerne have det delt så Kundedatabase indeholder: Id og Navn.
Og så en ny tabel (Afdeling), der indeholder resten.
Til at gøre dette har jeg lavet en tabeloprettelsesforespørgsel (Forespørgsler, Ny, Designvisning, valgt tabellen Kundedatabase, valgt tabeloprettelsesforespørgsel, flyttet de felter jeg vil have overført, ned i "gitteret", og så kørt forespørgslen.
Det gik fint, og jeg har fået oprettet tabellen Afdeling, med de data i, jeg ønsker.
Derefter oprettede jeg et felt i Afdeling, AfdId som autonummerering og primær nøgle, samt et felt Id (Tal), hvor jeg har lavet en en-til-mange relation fra Kundedatabase Id til Afdeling Id.
Går jeg ind i tabellen Afdeling (i dataarkvisning) står alle data der lige så fint. Dog med undtagelse af feltet Id, som er tomt(!).
Men går jeg ind i Kundedatabase i dataarkvisning, står alle mine "gamle" data der, med et + ud for hver post. Klikker jeg på + åbner det en post fra Afdeling, som er tom(!) hele vejen hen i alle felter.
Hvorfor? Hvad er det jeg gør galt? Jeg synes jeg gør det hele efter bogen. Men det gør jeg selvfølgelig ikke, for så havde det jo virket ;-(
Håber ikke det var for lang en smøre, men hellere en forklaring for meget, end en for lidt, ikk'?

Kan nogen komme med de vise ord?
Avatar billede jesperfjoelner Nybegynder
04. maj 2005 - 01:10 #12
Ok, lad mig se om jeg har forstået det rigtigt. Som jeg har forstået det er der nu lige mange poster i begge tabeller "kundedatabase" og "afdelinger"? Hvis ikke vil nedenstående formentlig ikke virke ellers måske ..
--
(tag en backup af databasen først :-)
Du har rigtig nok oprettet feltet id i afdelingstabellen, hvorfra du har lavet en relation til hovedtabellen, kundedatabase.
Den relation kan godt oprettes selv om felterne er tomme og at de er tomme er også årsagen til at intet kommer frem når du klikker på krydset i tabellen "kundedatabase".

Det du mangler er at alle ID'er fra posterne i tabellen "kundedatabase" skal overføres til tabellen "afdelinger". Du kan faktisk gøres det ved at kopiere hele kolonnen fra kundedatabase og sætte den ind i afdelinger.
Hvis du åbner kundedatabase OG noterer dig sorteringsrækkefølgen (den skal være den samme i "afdelinger" om et øjeblik). Så markerer du hele kolonnen "id" som indeholder de unikke id'er i kundedatabase. Gå så ind i "afdelinger" OG SØRG FOR AT SIKRE DIG at "afdelinger" er sorteret på samme måde (det er den formentlig da du lavede den med en forespørgsel).
Marker dit id-felt i "afdelinger" som udgør relationsfeltet til "kundedatabase" og som er tomt i øjeblikket, højreklik og sæt ind. Så skulle du kunne kopiere en hel kolonne fra kundedatabase til afdelinger.
Som jeg har forstået problemet skulle dette løse det og relationen skulle være der og noget skal vise sig når du trykker på krydset i "kundedatabase".
Avatar billede pdom Nybegynder
04. maj 2005 - 12:25 #13
jesperfjoelner > Det var jo lige det der skulle til ;-D

Jeg opdagede, at jeg havde glemt at tage Id feltet med over, og først oprettet det bagefter - og så sker der selvfølgelig ikke noget.

Lige et lille spørgsmål (og så er der points): Mine ja/nej felter, der før var Afkrydsningsfelter, er nu lavet om til felter med 0 og -1.
Kan man nemt lave det tilbage til afkrydsningsfelter, eller skal jeg lave nye i mine formularer??
Avatar billede jesperfjoelner Nybegynder
04. maj 2005 - 12:51 #14
Det skulle kunne konverteres frem og tilbage uden problemer.
Hvis du f.eks. har en række 0 og -1 i en tabelkolonne og konverterer den tilbage til et ja/nej-felt volder det ingen problemer. True/False eller Ja/Nej-værdier håndteres internt af Access som 0 og -1.
Du kan også lade tabellen være som den er med 0/-1 og så lave afkrydsningsfelter på din formular. Hvis du krydser af i et afkrydsningsfelt på en formular vil der stå -1 i tabellen, da -1 er lig med True/Ja i Access.
Afkrydsningsfelter (ja/nej-felter) i tabellerne er mest for syns skyld. I virkeligheden lagres 0 og -1.
Hvis du i tabeldesign går ind på dit ja/nej felt og nederst i egenskaberne går ind på fanen "opslag/lookup" kan du selv vælge om feltet skal vises som et afkrydsningsfelt eller et tekstfelt (med 0 og -1).
Håber det virker.
Avatar billede pdom Nybegynder
04. maj 2005 - 13:58 #15
Jamen det gjorde det da! Perfekt og tak
Avatar billede jesperfjoelner Nybegynder
04. maj 2005 - 14:05 #16
Jeg siger også tak. Held og lykke med det.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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