Gå til innhold

Spørsmål ang. relasjonsdatabase


Anbefalte innlegg

Jeg skal koble sammen disse tre tabellene. Hvordan kan jeg henvise til personenes identitet i relasjons-tabellen?

 

Foresatt(*PersonID, E-post, TelefonPrivat)

Relasjon(*PersonID, *PersonID, Relasjon)

Barn(*PersonID, Fødselsdato, Kjønn)

Lenke til kommentar
Videoannonse
Annonse

Jeg ville navngitt ting litt annerledes:

 

Foresatt( id, epost, telefon )

Barn( id, fodselsdato, kjonn )

Relasjon( id, foresatt_id, barn_id )

 

Dvs, alle rader er unikt addresserbare med et eget ID-felt, og hvis du vil ha f.eks foresatt-ID fra en relasjon, så heter den ganske enkelt foresatt_id, slik at den er enkel å nå.

 

Så lenge du har et klart relasjonsforhold gitt av separasjon mellom foresatt-tabell og barne-tabell, så burde ikke det være noe problem.

 

Ordlagt annerledes; Så lenge du klart separerer på foresatt/barn, så virker du ikke å trenge relasjons-kolonne på relasjons-tabellen.

 

Alternativt kan du "snu" det, og ha en generell Person-tabell slik:

 

Person( id, type, epost, telefon, fodselsdato, kjonn )

Relasjon( id, person_a, person_b, relasjon )

 

Slik at du kan ha personer av type F (Foresatt) eller B (Barn), og så bruke relasjons-feltet av Relasjons-tabellen for å spesifisere relasjonsforholdet.

Lenke til kommentar

Takk for svar!

 

Jeg likte alternativet med en generell Person-tabell. Jeg har allerede en Person-tabell, men med egne tabeller for ulike typer personer (barn, foresatte, ansatt) koblet sammen med denne.

 

Det jeg ikke helt har forstått er hvordan man kan vite (eller få frem) at man skal bruke id (person-id) i f.eks. person_a når det ikke fremgår av selve navnet (person_a). PersonID er i utgangspunktet en fremmednøkkel hentet fra en Person-tabell.

Lenke til kommentar

Hvilke muligheter du har avhenger litt av hvilke database du bruker. Selv bruker jeg vanligvis PostgreSQL, og pleier da å legge opp en løsning i retning av f.eks:

 

Person - Hovedtabell, inneholder alle

Barn - Er en "undertabell" av Person-tabellen, og legger til barne-spesifikke kolonner.

Foresatte - Er også en "undertabell", og legger til foresatt-spesifikke kolonner.

 

Det spesielle her er at hvis jeg legger til en forelder, så legger jeg den inn i foresatt-tabellen, men den vil også være i person-tabellen.

 

Hvis jeg henter ut alle data fra Person-tabellen, så vil jeg finne alle folkene, uansett om de er i barne- eller foresattetabellen, men bare med fellesfeltene. Hvis jeg henter ut fra Foresatte-tabellen, så får jeg med foresatte-spesifikke felter.

 

Dvs, "undertabellene" fungerer nesten som en del av Person-tabellen, men de kan ha egne felter i tillegg. Alt som er i undertabellene, er også i hovedtabellen, eller ser ut som om de er ihvetfall.

 

Gir mening så langt?

 

En fordel med dette, er at når du linker mot person_a og person_b, så kan du koble direkte mot Person-tabellen, og du trenger ikke egentlig (akkurat der) ha noe forhold til om det er et barn eller en foresatt.

 

Hvis du vil ha med all informasjon, så kan du (i spørringen) linke Relasjon-tabellen mot både Barn og Foresatte, istedet for Person.

Lenke til kommentar

Jeg skal egentlig bare sette opp et OR-diagram for en tenkt database. Vi har blitt opplært i Microsoft Access og Powepivot, så det er funksjonaliteten til disse verktøyene jeg forholder meg til. Så vidt jeg vet har vi aldri vært borti undertabeller.

 

Problemet er altså hvordan jeg skiller mellom foresatt og barn i relasjonstabellen, samtidig som relasjonen mellom dem er basert på fremmednøkkelen PersonID.

 

 

 

 

Endret av gnav
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...