Avatar billede dehdar Nybegynder
07. februar 2009 - 00:43 Der er 6 kommentarer og
1 løsning

Design spørgsmål

Hvis vi har to tabeller.

Tabel 1: Person (columns: CPR NR (primary key))
Tabel 2: Telefon (columns: telefonnummer (primary key))

Der skal være en forbindelse mellem de to tabeller. I min klasse valgte min underviser en 1:M forbindelse, hvor Telefon har en foreign key, som peger på CPR NR.

Efter nærmere omtanke vil dette dog være problematisk for hvad sker der, hvis to personer deler én telefon?

Lad os sige det så var omvendt. Altså så Person har en foreign key til telefonnummer, så vil vi skulle ændre i databasen, hvis en person har flere telefonnumrer.

Hvad skal jeg gøre, hvis jeg vil have, at flere personer skal kunne dele samme telefonnummer og samtidig eje mere end én telefon? Jeg har prøvet at tænke frem og tilbage, men jeg synes ikke rigtigt at det kan lade sig gøre. Man kan selvfølgelig lave én fælles tabel, hvor CPR nummer en Primary key og telefonnummer er en column under Person, hvor man så har 10 columns af telefonumrer. Det vil jo være usædvanligt hvis en person ejer mere end 10 numrer...
Avatar billede arne_v Ekspert
07. februar 2009 - 00:50 #1
Hvis relationen er "bruger", så skal du have en M:M relation og dermed en tredie tabel.

Hvis relationen er "ejer", så tror jeg at din underviser har ret.
Avatar billede dehdar Nybegynder
07. februar 2009 - 01:08 #2
Det tænkte jeg slet ikke på. Tak for hjælpen. Smid et svar :)
Avatar billede dehdar Nybegynder
07. februar 2009 - 01:15 #3
Hmm man skal altså bestemme sig for om det skal være ejer eller bruger relation? Kan man ikke have en ER model (database), som både viser hvem der bruger og ejer et bestemt telefonummer?
Avatar billede arne_v Ekspert
07. februar 2009 - 01:36 #4
Det kan man sagtens.

person
------
cpr,PK
...

telefon
-------
nr,PK
ejer,FK->person.cpr
...

persontelefon
-------------
personref,FK->person.cpr
telefonref,FK->telefon.nr
Avatar billede arne_v Ekspert
07. februar 2009 - 01:36 #5
Og et svar
Avatar billede dehdar Nybegynder
07. februar 2009 - 01:46 #6
Ahh, hvis man har en tredje klasse (pure fabrication), så vil denne jo have en composite primary key, som består af CPR og Telefonnummer og to foreign keys (CPR og Telefonnumer). Dvs, hvis man vil finde ud af, hvor mange personer der deler et bestemt tlf nummer, så filtrer man sine søgninger i den tredje tabel efter det pågældende tlf nummer. Og omvendt, hvis man vil finde ud af hvem der eger et bestemt tlf nummer, så skal man blot tilføje en 1:M relation mellem Person og Telefon.

Tusind tak. Du gør det nemt at forstå "simple ting" :)
Avatar billede arne_v Ekspert
07. februar 2009 - 01:48 #7
Ja.

Nogen gange skal man dog joine alle 3 tabeller, fordi man skal bruge info fra den ene rigtige og have en where betingelse på noget i den anden rigtige og stadig skal have mellem tabellen med.
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