Institutiionen för informatik, Umeå universitetUmeå universitetUmeå universitet

hem | för våra studenter | kurser vt 2009 | databasdesign | uppgifter

Hem Sök

Uppgifter

  Till detta kursmoment finns tre stycken uppgifter som skall lösas i grupp. Gruppindelning kommer att ske vid kursstart. Den första uppgiften gäller skapande av en databas samt övningar i SQL. Den andra uppgiften gäller anrop av SQL via Java. Den tredje uppgiften gäller ritande av ett ERdiagram samt normalisering av tabeller.

Uppgift 1 - Charterflyg

Ett flygbolag tillsammans med ett flertal resebyåer använder en gemensam databas för att registrera bokningar av platser på charterflyg. Vid ett visst tillfälle har en del av databasen följande innehåll;

AVGANG

FLYG FRAN TILL DATUM PLATS PRIS KVAR
SK14 GOTBG KRETA 080613 150 2000 30
SK19 GOTBG PARIS 080613 230 1500 20
SK20 STKHM PARIS 080613 210 1800 50
SK21 STKHM KAIRO 080712 100 2500 40
SK23 GOTBG PARIS 080712 250 2000 30
SK25 STKHM KRETA 080712 140 2100 40

BOKNING

FLYG PERSNR BYRA ANTAL BOKAD BETALT
SK14 8003168707 ALWAYS 2 080412 080426
SK19 7303097473 ROYAL 1 080512  
SK19 7411211918 ALWAYS 3 080420 080515
SK19 7411211918 ATLAS 3 080604 080609
SK20 8409134151 ROYAL 5 080425  
SK23 6706138191 ROYAL 4 080525 080530
SK23 7411211918 ATLAS 3 080612  

SKULDER

BYRA SUMMA KREDIT
ALWAYS 946740 1500000
ATLAS 405678 2500000
ROYAL 1460534 2500000
DATA TYP
FLYG char 4
FRAN char 10
TILL char 10
DATUM char 6
PLATS integer2
PRIS integer2
KVAR integer2
PERSNR char 10
BYRA char 6
ANTAL integer1
BOKAD char 6
BETALT char 6
SUMMA integer
KREDIT integer

Relationen AVGANG innehåller uppgifter om bl.a. antalet platser (PLATS) på respektive plan (FLYG), priset per plats (PRIS) samt antalet lediga platser (KVAR) vid detta tillfälle.

Relationen BOKNING innehåller uppgifter om bl.a. antalet platser (ANTAL) som bokats av kunder (PERSNR) hos respektive resebyrå (BYRA), datum då bokningen gjordes (BOKAD) samt datum då flygbolaget erhållit betalt (BETALT).

1. När en kund hos en resebyrå bokar ett antal platser på ett visst plan (FLYG) utförs en transaktion som ;
a) minskar antalet lediga platser (KVAR) med gällande antal,
b) infogar en lämplig tippel i relationen BOKNING, och
c) debiterar attribut SUMMA i relationen SKULDER med priset för dessa platser (ANTAL*PRIS).

Samma kund skall ej kunna boka samma resa mer än en gång.

2. När flygbolaget erhållit betalt för bokningen utförs en transaktion som;
a) inför datum för detta vid gällande tippel i relationen BOKNING, och
b) krediterar attribut SUMMA i relationen SKULDER med gällande belopp (ANTAL*PRIS).

Samma kund skall ej kunna betala för samma resa mer än en gång.

3. Självklart får ingen bokning göras om inte det finns tillräklig med platser (KVAR får ej vara mindre än 0). Även om det finns tillräkligt med platser får ingen bokning göras om resebyrån kommer att överskrida sin kreditgräns (SUMMA får ej vara större än KREDIT). Det antalet platser (ANTAL) som bokningen avser skall vara större än noll. Betalningsdatum (BETALT) skall antingen saknas (null) eller vara större än bokningsdatum (BOKAD).

4. Databasen skall vara korrekt på följande sätt;
a) de enda tillåtna namn på resebyråer är 'ALWAYS', 'ATLAS' och 'ROYAL',
b) varje rad i AVGANG skall vara unik på FLYG,
c) varje rad i BOKNING skall vara unik på FLYG, PERSNR och BYRA,
d) varje rad i SKULDER skall vara unik på BYRA,
e) varje plan (FLYG) i relationen BOKNING måste referera till någon plan (FLYG) i relationen AVGANG.

5. För att möjliggör snabb acess till databasen används
a) hashing på attribut FLYG i relationen AVGANG,
b) sekundär index på attribut TILL i relationen AVGANG,
c) btree på attribut BYRA, FLYG och PERSNR i relationen BOKNING.

6. Visa hur flygbolaget kan utföra följande sökningar;
a) ta fram i bokstavsording utan duplikat uppgifter om vilka orter respektive resebyrå har bokningar till (SELECT ... BYRA, TILL ... WHERE ...)
b) ta fram uppgifter om kunder som ännu inte betalt för flygen till Paris den 13/6 (SELECT PERSNR, BYRA, PRIS*ANTAL ... WHERE ... IS NULL)
c) ta fram uppgifter om vilka plan för vilka det saknas uppgifter om kunder (SELECT FLYG, TILL, FRAN, DATUM ... WHERE ... NOT IN ...)

Uppgiften innebär att varje grupp skall
a) skapa databasen, deklarera lämpliga access metoder (deluppgift 5) och ladda tabellerna med data enligt ovan.

När ni deklarerar era relationer var snälla och använd små bokstäver och gör inga förkortningar. Detta för att göra det enklare för vi andra som ska komma åt er databas. Saknade värde är NULL. Primära nycklar är understrukna.

b) bevisa att databasen är korrekt (deluppgift 3 och 4) genom att köra sql satserna i filen ~john/b.3/nogoflyg. Ingen sql sats skall lyckas!

c) köra deluppgift 6.

Redovisning sker genom att varje grupp skall logga in med egen användaridentitet och utför punkt b, och c ovan. Lyckas någon sql sats i nogoflyg måste databasen korrigeras!

Uppgift 2 - Anrop av SQL via Java

Denna uppgift handlar om att skriva program i Java som bearbetar databasen ovan. Att utföra transaktioner mot en databas är alltid riskabel eftersom det är lätt att ange felvärde. SQL satser som ändrar innehållet i en databas (INSERT, UPDATE, DELETE) måste kontrolleras nogranna innan de utförs. När en kund bokar en resa skall inte personalen i en resebyrå behöver räkna ut hur många platser blir kvar på planet och vilket belopp det gäller. När flygbolaget får betalt för en resa skall personalen inte behöva ange beloppet. Alla sådana räkningar skall göras i program som eventuellt hämta gällande uppgifter från databasen (SELECT).

Två program skall skrivas motsvarande deluppgift 1 och 2 ovan. Det ena programmet skall användas av resebyråer och möjliggöra bokning av resor. Det andra programmet skall användas av flygbolaget för att registrera betalning av resor. Programmen skall efterfråga lämpliga uppgifter för att kunna utföra transaktioner.

Uppgift 3 - Butikskedja

Jompa äger en butikskedja av radio & TV-affärer. Det finns filialer i de flesta städer i Norrland. I affärerna säljer man radio, TV, stereo, video, TV-spel samt olika typer av tillbehör. Alla produkter i sortimentet är indelade i olika produktgrupper, t.ex. TV, video, spel, skivor. Jompa önskar skaffa sig ett orderhanteringssystem. Systemet skall lagra uppgifter om kunder, filialer, artiklar, försäljning samt vilka artiklar och antalet artiklar som finns i de olika filialernas lager.

Efter diskussioner med Jompa har det framkommit att i databasen ska följande information finnas lagrad: (visas som ett 'rotten record')

Attribut Datatyp Null Anmärkning
kundnr integer nej Kundnummer. Tillåtna värden 1000 - 4999
knamn char 40 nej kundens namn
kgatuadress char 20   kundens gatuadress
postnr char 6   kundens postnummer
postadress char 20   kundens påstadress
ktelefon char 14   kundens telefonnummer
kkredit char 15 nej anger kundens kredittid t.ex. kontant, 8 dagar
filialid char 2 nej filialbeteckning. tillåtna värden 1 - 99
fgatuadress char 20 nej filialens gatuadress
postnr char 6 nej filialens postnummer
postadress char 20   filialens postadress
ftelefon char 14 nej filialens telefonnummer
artikelnr integer nej artikelbeteckning. tillåtna värden 5000 - 9999
artbenamning char 30 nej artikelbenämning i klartext
artpris money nej artikelns pris
artgrupp char 10   tillhör artikelgrupp t.ex. T.V, CD, etc.
ordernr integer nej ordernummer
orderdatum date nej datum då ordern placerades
faktdatum date   datum då ordern fakturerades. fältet är tomt till dess att alla artiklar i ordern har levererats.
antal integer nej antal såld av en viss artikel vid ett visst ordertillfälle
levererat char 1 nej anger om försåld artikeln är levererad. tillåtna värden är 'J' och 'N'.
antalilager integer nej antal artiklar i lager hos en viss filial
bestpunkt integer   beställningspunkt för en viss artikel hos en viss filial.

Värdet Nej i kolumnen Null anger att det inte får förekomma null-värden, utan värde måste alltid anges.

När en kund placerar en order hämtas artiklarna från olika filialer. Hos varje filial finns ett artikellager. En och samma artikel kan finnas vid flera filialer. Varje order omfattar uppgifter om bl.a. från vilken filial respektive artikeln har hämtats. Ett exempel på en order som en viss kund placerat visas nedan;

Artikelnr Artikelbenämning Artikelpris Antal Filial Totalpris Levererat
5042 Parabol de Luxe 1,80m 1046.00 1 1 10460.00 J
5045 Video Hitachi 210 5623.00 1 2 05623.00 N
5066 Videoband BASF 240 59.00 3 2 00354.00 N
5066 Videoband BASF 240 59.00 3 3 00354.00 J
5102 TV Nokia 60" 14295.00 1 4 14295.00 J

Ordern omfattar artiklar från olika filialer till ett totalt värde av 31086.00 kronor.

1. Använd Entity-Relationship modellering för att skapa en konceptuell modell över datan som skall finnas i databasen. Ge attributen exakt de namn som anges. Rita diagrammet på en A4 sida med hjälp av ett lämpligt ritverktyg (t.ex. Power Point).

2. Normalisera den konceptuella modellen till ett antal tabeller i tredje normalformen. Skriv gällande SQL' create table' satser för dessa tabeller.