Avatar billede it-dyret Nybegynder
10. februar 2003 - 14:50 Der er 11 kommentarer og
2 løsninger

Afhængige poster i dynamisk database

Jeg arbejder i øjeblikket med et projekt, hvor jeg har brug for en meget dynamisk database, da der ikke er koncensus om, hvad der egentlig skal registreres i databasen. Ergo er det meget nødvendigt, at det bliver muligt at udvide db'en dynamisk - her har jeg dog et problem.

Det er ikke noget problem med "alm." dynamik. Jeg har f.eks. følgende tabeller:

Person
- id (primærnøgle)
- navn
- adresse
- postnr

PersonStamdataTyper
- id (primærnøgle)
- beskrivelse

PersonStamdata
- id
- typeId (fremmednøgle til PersonStamdataType)
- personId (fremmednøgle til Person)
- entry

Som det fremgår af de 3 tabeller, er det muligt at udvide tabellen med en vilkårlig PersonStamdataType (som f.eks. tlf.nr.). Samtidig med, at det ikke behøves at være samtlige personer, som man registrerer posten for.

MEN samtidig har jeg statisk sat postnr. ind i Person-tabellen. Denne refererer naturligvis over i en traditionel postnr/by tabel. Sådanne afhængige data ville jeg meget gerne også kunne registrere i en dynamisk db. Men hvordan skulle databasen strikkes sammen, så man kan registrere sådanne afhængige/ens data uden redundans?!?

Håber mit indlæg er forståeligt!
Avatar billede it-dyret Nybegynder
10. februar 2003 - 14:52 #1
Problemstillingen vedr. den statiske adresse attribut er lidt den samme... for denne kunne jeg også godt tænke mig, at man kunne presse ind i en dynamisk db struktur!

Jeg venter spændt på indlæg! :)
Avatar billede arnvig Nybegynder
10. februar 2003 - 14:58 #2
Du har fat i det rigtige.
Du skal have en stam tabel hvor hver overordnet enhed ar defineret unikt.
derefter skal du have en attribut tabel, hvor hver atribut f.eks. postnr er beskrevet, tilsidst skal du have en relationstabel mellem stamdata og attribut, med atributtens value som ekstra information
Avatar billede arnvig Nybegynder
10. februar 2003 - 15:01 #3
f.eks. således

Person
- ID (f.eks. cpr)

Attribut
- Kode  (pst,nvn,envn)
- Beskrivelse (postnummer,Navn,Efternavn)

Relation
(- id  (denne er måske ikke nødvendig))
- id-person
- id-atribut
- atribut-value
Avatar billede arnvig Nybegynder
10. februar 2003 - 15:08 #4
For hver atrribut jan du definere en valid-value tabel

Valid-Value
- id.attribut  (pst,
- Value-entry (4000,5000...
- Value-beskrivelse ("Roskilde","Odense",...
(- sort hvis værdierne skal præsenteres i en bestem rækkefølge)
(- defaultvalue hvis en af værdierne skal indsættes som default)

Valid-Value tbaellen kan bruges til at lave dropdown lister
og validere input
Avatar billede arnvig Nybegynder
10. februar 2003 - 15:08 #5
jan = kan
Avatar billede nih Novice
10. februar 2003 - 22:33 #6
Statisk/dynamisk er ikke lige ord jeg plejer at bruge om databaser :)

Jeg synes du skal kigge på brugen af null-værdier.

eks postnr i tabellen Person Hvis en person har postnr SKAL den være i tabellen postnr, ellers skal feltværdien være Null. På den måde kan bruger af din database registrere kunder i Tyskland og Australien.
Et notatfelt til at uddybe persondata kunne gøre databasen 'dynamisk'.

Det vil dog blive noget besværligt at udvikle en sådan database senere, især for en anden end dig.

Niels
Avatar billede nih Novice
10. februar 2003 - 22:34 #7
Du bestemmer disse forhold i tabelegenskaber under 'obligatorisk'
Avatar billede fynbohans Nybegynder
15. februar 2003 - 15:49 #8
Forstår vist ikke helt spørgsmålet, f.eks. som "nih" ordene
"dynamisk" og "statisk". For mig er en statisk database en base,
hvor brugeren ikke kan ændre data, f.eks. en varekatalog.

Til dit egentlige spørgsmål:
Hvis det du ønsker er et system, hvor forskelige databaser bruger
nogle fælles data (stamdata) er det meget nemt.
Du laver blot en database, som kun består af tabeller med dine
"stamdata". Databasen lægges centralt, så alle har adgang til den.

I de enkelte baser bruger du "Sammenkæde"  med tabellerne i
den centrale base. Kig under Filer/Hent externe data.
Avatar billede it-dyret Nybegynder
17. februar 2003 - 11:26 #9
Jeg har været væk fra projektet i nogle dage og har brugt noget af tiden på at tænke over indlæggene...

For det første virker det som om, at første mand på posten havde det bedste bud på min problemstilling. Jeg kan se, at vores tabelstruktur er stort set identisk - dog med den forskel, at jeg har adresse, navn og postnr i persontabellen. Jeg går ud fra, at du ville holde disse poster i PersonStamdataTyper (for at holde sig til min oprindelige navngivning).

Her vil du - som jeg forstår det - knytte en tabel, som kan bruges til validering. Dette tabel kunne se ud, som følgende

Validering
- postnr.
- by
- typeId (fremmednøgle til PersonStamdataTyper)

Man kunne evt. give nogle mere sigende navne såsom "validering", "kriterie1", "kriterie2" og bibeholde typeid. Således ville man evt. kunne bruge tabellen til validering af andre stamdatatyper end postnr/by (uden at jeg dog kan komme i tanke om noget sigende eksempel). Dermed ville man også komme udenom brugen af "by" som naturligvis er et reserveret ord i sql...

>> arnvig
Er denne "implementation" rigtigt forstået ud fra din oprindelige tankegang??

>> alle
Kommentarer udbedes - også forslag til den generiske navngivning af attributter i valideringstabellen

Med det nævnte design har jeg dermed afskåret mig fra at bruge null-værdier, som redskab til at styre, om der skal indtastes data eller ej. Dette kunne alternativt klares med en boolean attribut i PersonStamdataTyper, som i den ovenliggende applikation kan bruges til at gennemtrumfe indtastning vha. logik. Kommentarer udbedes!
Avatar billede it-dyret Nybegynder
17. februar 2003 - 11:30 #10
Vedr. dynamisk/statisk... Når jeg skriver dynamisk database, henviser jeg til strukturen på databasen og dermed mulighed for at opbygge et design, som kan håndtere et endnu ikke fastlagt mængde af data. Vel at mærke uden at skulle ændre i atributter eller tabeller (antal såvel som navne)...
Avatar billede arnvig Nybegynder
20. februar 2003 - 10:25 #11
It-dyret: Du har forstået konceptet.
Indtastet eller ej, kan implementeres med et indikator felt, en boolean, som indeholder "0" hvis værdien ikke er der eller "1" hvis den er. Men det er en performance tung løsning, hvis ikke din DBMS selv kan håndtere det.
Avatar billede it-dyret Nybegynder
20. februar 2003 - 14:00 #12
Takker for indsatsen! Point er fordelt efter brugbarhed! Nih fik en lille slant, da jeg nok ellers ikke havde tænkt over brugen af null...
Avatar billede nih Novice
20. februar 2003 - 18:02 #13
takker for pts.

Jeg kan tilføje at fra og med Access 2000 kan man omdøbe tabeller og felter uden at skulle lave foresp. formulare og rapporter om.

i VBA kan du henvise til dine feleter vha. indexet af feletet

rs.fields(1).value = xx

istedet for rs!feltnavn

mvh Niels
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