gnav Skrevet 26. november 2014 Del Skrevet 26. november 2014 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
terjeelde Skrevet 26. november 2014 Del Skrevet 26. november 2014 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
gnav Skrevet 26. november 2014 Forfatter Del Skrevet 26. november 2014 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
terjeelde Skrevet 26. november 2014 Del Skrevet 26. november 2014 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
gnav Skrevet 26. november 2014 Forfatter Del Skrevet 26. november 2014 (endret) 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 27. november 2014 av gnav Lenke til kommentar
quantum Skrevet 26. november 2014 Del Skrevet 26. november 2014 Hva er problemet? Du har jo en ForesattPersonId og en BarnPersonId i relasjonstabellen, som refererer til hhv Foresatt og Barn. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå