webForumDet fria alternativet

Databasdesign

5 svar · 340 visningar · startad av clarkbones

clarkbonesMedlem sedan feb. 20013 023 inlägg
#1

Databasdesign...

Skissar på en databas för flygbokning. Det finns förstås resenärer. Det finns förstås också anställda (piloter, flygvärdinnor). En anställd finns det lite fler uppgifter om jämfört med en resenär (titel,utbildning, bonus mm). En poäng vore då förstås att ha en tabell kallad Resenärer och en Anställda. Och en anställd kan förstås ibland vara en resenär. Ändrar jag adressen för en resenär som också är en anställd vill jag slippa ändra adressen på två ställen.

Så jag gjorde en tabell kallad Person. I denna tabell finns alla fält för gemensamma egenskaper/fält för Anställda och Resenärer (adress, telefon, email). Slutligen finns ett fält i Person (Anställningsnummer) som är länkad till en tabell Kallad Anställda. I tabellen anställda har jag lagt fältnamn som titel, utbildning osv.

Om det är någon som orkat sätta sig in i detta så här långt undrar jag om det är vettigt? (Det blir knepigt vid frågekonstruktion)

Om det inte är det, hur skall jag då principiellt göra för att slippa ändra adressuppgifter på två ställen?

SPiNMedlem sedan mars 20007 896 inlägg
#2

Låter bra, men jag tror inte att du behöver ha det där extra-fältet med anställningsnummer i tabellen Person. Du skulle istället kunna sätta en sekundär nyckel ( :q Eng. foreign key ) i tabellen Anställda med Person's unika ID, och alla de extrafält som en anställd behöver.

Frågorna behöver väl inte bli så krångliga? Lite nästade frågor är bara kul. ;)

clarkbonesMedlem sedan feb. 20013 023 inlägg
#3

Som det är nu är det väldigt svårt för mig att svar på frågan "Vilka piloter (vad heter de) har passageraren Dan flugit med" eftersom jag måste ha ett WHERE villkor med 'Dan'. Problemet är ju att piloterna finns i samma tabell så i och med att jag filtrerar på Dan så kan jag inte visa piloternas namn...

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Du får använda flera instanser av persontabellen

select e.name 
  from person e join flight on e.id = f.crewid 
    join passenger p on f.flightid = p.flightid 
  join person r on p.flyer = r.id
 where r.name = 'Dan'
LaspMedlem sedan juli 200012 980 inlägg
#5

Du är på rätt spår! Person är helt rätt, det är vilken "roll" en person har som är knytet till ett visst tillfälle (dagTid) TS.

Om du gör det hela seriös skall du även lägga undan adressändringen, så du kanske skall ha en adresstabell med giltigt from-tom.

ToonsterMedlem sedan feb. 20001 590 inlägg
#6

Jag är lite osäker på om det är rätt att ha samma tabell för passagerare och anställda.

Det beror lite på vad som är grunden i systemet, personerna eller platserna i ett flygplan. Eller är det flighterna?

Är det flighterna så bör man utgå från flightnr och sedan dess passagerare och personal. osv.

Eftersom personal har mer information än passagerare, så bör det vara skilda tabeller.

/T

251 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
117 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)