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?
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. ;)
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...
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'