Högskolan Dalarna Anders Forsman tel: 023-778956 email: afm@blg.du.se Kompendium till databaser och informationssystem 10p för SY2 2000 2000-09-04
Innehållsförteckning INNEHÅLLSFÖRTECKNING... 2 1 DATAMODELLERING... 3 1.1 OBJEKT MODELL... 4 1.2 DATAMODELL... 8 1.2.1 Övning datamodell... 11 1.3 NORMALISERING... 12 1 NF... 13 2 NF... 13 3 NF... 13 1.3.1 Övning normalisering... 15 2 DATABAS CONSTRAINTS... 16 3 DATABAS TRIGGER... 17 4 SEQUENCE... 19 5 PROCEDURE... 20 6 ORACLE PRODUKTER... 21 7 INFORMATION TILL LABORATIONERNA... 23 7.1 INLOGGNING I ORACLE... 23 7.2 DOKUMENTATION... 23 3.3 REDOVISNING... 23 BILAGA 1 LABORATIONER... 24 LABORATION 1... 24 LABORATION 2... 27 LABORATION 3... 31 LABORATION 4... 34 LABORATION 5... 36-2 -
1 Datamodellering Syfte: Dokumentera en modell av organisationens framtida databas, oberoende av teknik och programvara Hur: Göra en ritning av nutida och framtida databas inom organisationen. Metod: Teknik: Objekt som ska lagras, samband, bildar objektmodell som normaliseras till datamodell. Normalisering Resultat: Dokumenterad - Objektmodell - Datamodell Fördelar datamodellering: - Minska underhåll - Lättare att utv. beslutsstödjande system - Förenklad databasdesign / databasunderhåll - Användning av frågespråk utvecklas - 3 -
1.1 Objekt modell Arbetsgång 1. Identifiera objekt - Primära objekt Kund, Order - Undertyper Anställd, Säljare - Nya objekt Kund + Artikel! Beställning 2. Identifiera samband Visar hur objekten hänger ihop - Uttryck samband Kund tecknar order - Kvatifiera En order kan innehålla flera artiklar En artikel kan ingå i flera ordrar M : M - 4 -
3. Rita modell 4. Dokumentera Beskriv: - Objekt - Samband - Grafisk - Förekomstmängd - 5 -
Kolla objekten - Entydigt identifieras ( Nyckel ) - Kan objektet beskrivas ( Namn i verksamheten) - Finns tillhörande data ( Egenskaper) - Mera än en förekomst Gör exempel Objektnamn Identifierare Exempel Mängd Kund Kundnr 2112 Alla kunder som tecknar order Artikel Artikelnr 12222 Alla artikler som ftg säljer * Problem att göra exempel (ompröva objektet) - 6 -
Resultat objektmodell - Beskrivning av varje objekt självförklarande namn, ev. kort beskrivning - Beskrivning av varje samband Kort beskrivning - Grafisk bild över objekt med nyckel - Antal objektförekomster Objekt modell - 7 -
1.2 Datamodell 1. Rita om modellen - objekt blir tabell i datamodellen - M : M ger nya relationer - 1 : M inför främmande nyckel 2. Placera ut attribut (egenskap som tillhör relationen) - Intervjuva, kolla dokumentation - Placera ut attributen - Attributlista 3. Normalisera - 3 normalformen - 8 -
4. Justera och stäm av - Kvantifieringen - Objekt utan attribut 5. Dokumentera Datamodell - 9 -
Attribut lista Tabell: kund Kolumn namn Datatyp Nyckel Regler Förklaring kundnr Numeriskt PN Hanteras med sekvens kundnamn adress tel Tabell: order Kolumn namn Datatyp Nyckel Regler Förklaring ordernr Numeriskt PN Hanteras med sekvens kundnr Numeriskt FN Delete restricted datum date Datum när ordern registreras Tabell: orderrad Kolumn namn Datatyp Nyckel Regler Förklaring ordernr Numeriskt PN, FN Delete cascade artnr Numeriskt PN, FN Delete cascade antal Numeriskt Antal bestälda Tabell: Artikel Kolumn namn Datatyp Nyckel Regler Förklaring artnr Numeriskt PN Hanteras med sekvens antal Numeriskt PN, FN Delete cascade Antal artiklar i lager pris Numeriskt Aktuellt pris - 10 -
1.2.1 Övning datamodell Övningsuppgift Fack-bokklubben Plugghästarna vill lagra den information som är intressant för deras verksamhet i en relationsdatabas. Fack-bokklubben plugghästarna säljer och distribuerar böcker till sina medlemmar. De titlar som bokklubben saluför till sina medlemmar ligger inom ett antal ämnesområden, den information som är intressant att lagra om ämnesområdena är ämneskod och ämnestext. En medlem kan anmäla ett antal ämnesområden som sina intresseområden för att ibland få specialinformation och erbjudanden inom sitt/sina intresseområden. En medlem kan anmäla flera intresseområden och ett intresseområde kan delas av flera medlemmar. Bokklubben håller också reda på vilka böcker som finns inom de olika ämnesområdena, en bok tillhör bara ett ämnesområde, men det kan finnas flera böcker inom ett ämnesområde. De uppgifter som man behöver hålla reda på om böckerna är titel, författare och pris. För att kunna serva sina medlemmar måste bokklubben naturligtvis hålla reda på medlemmarnas namn och adress. Dessutom måste man veta vilka böcker en medlem har beställt, antal beställda av varje bok samt när beställningen gjordes. Er uppgift blir att: a) Bestämma vilka objekt som finns med utgångspunkt från beskrivningen ovan. Bestäm vilka primärnycklar som identifierar respektive objekt. Observera att primärnycklar till alla objekt inte är nämnda i texten ovan. I de fall då ni inte hittar vettiga primärnycklar till objekten i texten måste ni själv hitta på vettiga primärnycklar. Rita en objektmodell b) Skapa tabeller i 3:e Normalformen med utgångspunkt från objektmodellen och beskrivningen ovan. - 11 -
1.3 Normalisering Normaliseringen används för att eliminera viss typ av redundans. Vi kommer att gå igenom 1NF, 2NF, 3NF. * 1 Normalformen: En Relation befinner sig i 1NF om: * Varje domän innehåller "atomiskt" värde. * Varje rad (tuple) i tabellen är unik Namn ===== > Förnamn och Efternamn * 2 Normalformen: En relation är i 2NF om: * Den är i 1NF * Varje attribut i tabellen är fullständigt funktionellt beroende av den primära nyckeln. * 3 Normalformen: En relation är i 3NF om: * Den befinner sig i 2NF * Ingen kolumn, som inte ingår i den primära nyckel (eller någon annan kandidat nyckel), är funktionellt beroende av någon annan kolumn eller kolumnkombination, som inte heller ingår i den primära nyckel. - 12 -
Student Exempel normalisering * pnr namn tele prognr prognamn Progpoäng pklar pkvar 670610-1111 Bo ek 0243-11111 IT2 Informationstkn. 120 20 100 1 NF Student * pnr Fnamn Enamn Riktnr Lokal prognr prognamn Progpoäng pklar pkvar nr 670610-1111 Bo Ek 0243 11111 IT2 Informationstkn. 120 20 100 2 NF Student * pnr Fnamn Enamn Riktnr Lokalnr prognr pklar pkvar 670610-1111 Bo Ek 0243 11111 IT2 20 100 Linje * prognr prognamn progpoäng IT2 Informationstkn. 120 3 NF Student * pnr Fnamn Enamn Riktnr Lokalnr prognr pklar 670610-1111 Bo Ek 0243 11111 IT2 20 Linje * prognr prognamn progpoäng IT2 Informationstkn. 120-13 -
- 14 -
1.3.1 Övning normalisering Övning 1 Tabell 1 Hotellnr hotellnamn Period Rumstyp Pris 12 Stadshotellet HS S 700 12 Stadshotellet HS D 1300 12 Stadshotellet LS S 400 12 Stadshotellet LS D 1000 15 Sheraton HS S 1000 15 Sheraton LS S 800 15 Sheraton HS D 1900 15 Sheraton LS D 1700 1. Försök rita ut det funktionella beroendet i tabellen ovan 2. I vilken normalform befinner sig tabellen. 3. Normalisera tabellen till 3 NF. - 15 -
2 Databas Constraints Genom att använda sig av constraints kan man efter skapande av tabeller införa integritetsregler i databasen. Dessa regler gäller för: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK Constraints kan även implemetera i samband med att skapandet av tabeller. En annan fördel är att man kan tillfälligt göra den disable för att lite senare åter göra den tillgänglig (enable), detta är default vid skapande Exempel: CREATE TABLE KUND (KUND_ID VARCHAR2(40) NOT NULL,KUNDNAMN VARCHAR2(40) ); CREATE TABLE ORD (ORDNR VARCHAR2(40),ORDER_ID VARCHAR2(40) NOT NULL,ORDDATUM VARCHAR2(40),ANSVARIG VARCHAR2(40),KUND_ID VARCHAR2(40) NOT NULL ); ALTER TABLE KUND ADD CONSTRAINT KUND_PK PRIMARY KEY (KUND_ID) ; ALTER TABLE ORD ADD CONSTRAINT ORDER_PK PRIMARY KEY (ORDER_ID) ; ALTER TABLE ORD ADD CONSTRAINT KUND_FK FOREIGN KEY (KUND_ID) REFERENCES KUND (KUND_ID); Exempel koppla bort constraint Alter table ord disable constraint kund_fk; - 16 -
3 Databas trigger Syntax: Skapa: Create [or Replace] Trigger <schema.trigg-namn> /* trigger event */ 1. After delete or insert or update of <kolumn, kolumn, > on <tabell> For each row /* trigger constraint */ 2. When (<villkor>) Declare Begin 3. /* Trigger action */ End; Ta bort: Drop Trigger <trigg-namn> Trigger skapas/tas bort i SQL/Plus Trigg-namn: Trigger event (1): Namnet måste vara unikt (ej unikt utanför egna schemat) Händelse som anger när trigger skall aktiveras. Två typer: Before: Trigg utförs före påverkan av tabell After: Trigg utförs efter påverkan av tabell For each row: innebär att triggern aktiveras för varje rad som påverkas i tabellen. trigger constraint (2): Man kan sätt villkor kolumner för att triggern ska aktiveras. Ex. When (new.<kolumn> = 45) När man refererar till kolumnvärden kan man ange om det är det ny (new) eller gamla (old) värdet (dvs värdet för eller efter påverkan av tabellen). - 17 -
Trigger action (3): Innehåller PL/SQL kod Här kan man utföra SQL kommandon (DML, dvs insert, update och select) mot övriga tabeller men inte update mot tabellraden som aktiverat triggern. Man kan ej hantera tabeller med kopplingar (PN, FN) mot trigger tabellen, detta kallas att triggern mutterar. Program exempel: Exempel 1 Create Trigger scott.emp_permit_changes /* trigger event */ Before delete or insert or update on scott.emp Declare dummy integer; Begin /* Trigger action */ /* Kontroll om det är lördag eller söndag */ If (to_char(sysdate, DU ) = SAT or (to_char(sysdate, DU ) = SUN ) Then raise_application_error (-20501, Inga förändringar på lör /sön); End if; End; Exempel 2 Create Trigger scott.salary_check /* trigger event */ Before insert or update of sal, job on scott.emp for each row when (new.job <> PRESIDENT ) Declare maxlon number; minlon number; Begin /* Trigger action */ /* Ta fram max- och minlön för jobbet från sal_guide tabellen */ Select minsal, maxsal into minlon, maxlon from sal_guide Where job = :new.job; If (:new.sal < minlon or new.sal > maxlon ) Then raise_application_error (-20601, Felaktig lön för detta arbete); End if; End; - 18 -
4 Sequence Syntax: Create sequence [schema.seqnamn] < Increment by [integer]> < Start with [integer]> < Maxvalue [integer] / Nomaxvalue> < Minvalue [integer] / Nominvalue > < Cycle / Nocycle > < Cache [integer] / Nocache > < Order / Noorder > * Understrukna värden är default. Drop sequence [schema.seqnamn] Förklaring: Increment by [integer] Ökning per steg (default 1) Start with [integer] Start värde Maxvalue [integer] Max värde (max =10 27) Minvalue [integer] Minsta värde Cycle När max/minvärde nås startar seq om Cache [integer] Antal värden lagrade i PM (default 2) Order Garanterar ordningsföljde för sequence Exempel Create sequence orderseq Nollställning För att nollställa en sequence måste den först tas bort och sedan återskapas. Hantering CURRVAL NEXTVAL Exempel orderseq.nextval Anger aktuellt värde för sequence Anger nästa värde för sequence returnerar nästa värdet för sequence orderseq - 19 -
5 Procedure I vissa Dbsystem (t ex Oracle, SQL server, mm) har man möjlighet att använda sig av lagrade procedurer (stored procedure). Dessa procedurer kommer att lagras i och exekveras av DBsystemet. Fördelen med dessa är att de blir centralt lagrade som medför att många kan använda dessa och det blir lättare att underhålla generell kod som gäller för just detta DBsystem. Det finns även mera fördelar och dessa kommer att behandlas under kursen. Syntax: Skapa: Create [or Replace] Procedure <[schema.]procedure-namn> (argument in /out/in out datatyp,..) IS / AS /* PL/SQL program*/ Tabort: Drop Procedure <[schema.]procedure-namn> Exekvering: En DBprocedur kan anropas från olika typer applikationsprogram och det gäller då att man tar reda på hur man kan anropa Dbprocedurer från detta program. Vi kommer att anropa procedurerna via SQL plus. När man ska exekvera en procedur från SQL plus gör man detta på följande sätt: SQL > EXECUTE procedurnamn (<argument>) Procedurnamn = namnet på den procedur som ska exekveras Argument = de parametrar (in / out / in out) som fodras för den aktuella procedurer - 20 -
6 Oracle produkter Nedan följer en kort beskrivning av de utvecklingsprodukter som vi kommer att använda oss av under kursen. SQL plus är en Oracles interaktiv produkt (jobbar direkt i databasen) som ligger på clienten. Med denna produkt kan du bla utföra följande: Använda SQL (DDL, DML, quering och DCL) Skapa triggers, procedurer och funktioner Skapa/administrera användare Exekvering av ESQL, procedurer mm Detta är textbaserat miljö utan möjlighet till att En produkt med ett grafiskt gränssnitt som ger möjlighet att arbeta med sitt eget databasschema. Med denna produkt kan du bla utföra följande: Skapa DBobjekt (tabeller,views, snapshot och synonym) Sätta rättigheter på DBobjekt. En produkt liknande schema builder som med ett grafiskt gränssnitt ger möjlighet att arbeta med sitt eget databasschema. Med denna produkt kan du bla utföra följande: Inreda databasen (tabeller,views, snapshot och synonym) Sätta rättigheter på DBobjekt. Skapa triggers, sequence - 21 -
En slutanvändarprodukt som ger möjlighet att hämta och bearbeta data. Det som skiljer sig från SQL Plus är att man här jobbar med en grafisk miljö och kan till stora delar bara klicka på det man önskar ska sökas fram i databasen. Ett program som ger stöd för att skapa: Använda SQL (DDL, DML, quering och DCL) Procedurer Funktioner Package Triggers Här kan man kompilera koden och få meddelande om eventuella fel. Denna produkt har till skillnad från SQL plus ett grafiskt användargränssnitt. Till de flesta av dessa produkter finns någon typ av Quick tour(demo). Jag rekommenderar att ni börjar med att ägna några minuter åt dessa innan ni börjar använda produkterna. - 22 -
7 Information till laborationerna 7.1 Inloggning i Oracle Den databas som ni kommer att använda under kursen heter db1. För att kunna logga in i Oracle måste man också ha en användar med lösenord. Dessa är uppbyggda på följande sätt: Användare: <klassbokstav>pc<nr på er pc> Klassbokstav: Första bokstaven i utbildningsnamnet (exempel data!d, system.! sy osv ) Nr på er pc: Det nummer som står på dator (ex pc 317-01! 01) lösenord: (= användare) värddatorsträng: databasnamn Om ni sitter vid dator nr 317-01 och går på IT skall ni göra på följande sätt: Användare: itpc01 lösenord: itpc01 värddatorsträng: db1 Avsluta SQL*Plus Man avslutar SQL*Plus med hjälp av kommandot exit Exempel: SQL> exit 7.2 Dokumentation Ni kan dokumentera det ni gör på två olika sätt när ni jobbar i SQL Plus: Alt 1 Alt 2 Öppna anteckningar/word och klipp och klistra mellan SQL*plus och anteckningar/word. Använd er av spolfunktion som innebär att allt som ni gör i SQL*plus kommer att lagras i en fil som ni sedan kan bearbeta i ett ordbehandlings program. Denna funktion finns under spola i arkivmenyn i SQL*plus. 3.3 Redovisning Redovisning kan ske vid laboration eller genom inlämning av laborations -resultat. - 23 -
Bilaga 1 Laborationer Laboration 1 Databaser Material för SQL (Quering) - laboration Under denna laboration skall ni använda er av Procedure builder Försök besvara följande SQL - frågor 1. Ta fram leverantörsnummer (SNR) och stat(stat) för alla leverantörer i Paris 2. Visa artikelnummer(pnr) på alla artiklar som finns i leveranstabellen(sp) 3. Visa artikelnummer(pnr) på alla artiklar som finns i leveranstabellen(sp), men inga dubletter 4. Ta fram leverantörsnummer (SNR) och stat(stat) för alla leverantörer i Paris som har stat(stat) > 20. 5. Ta fram leverantörsnummer (SNR) och stat(stat) för alla leverantörer i Paris sorterat på stat(stat) i fallande ordning 6. Ta fram samtliga kolumner från leveratörer och artiklar som har samma stad (CITY) 7. Ta fram samtliga kolumner från leveratörer och artiklar som har samma stad (CITY) och leveransstat (STAT) frånskillt 20 8. Ta fram leverantörsnummer (SNR) och artikelnummer(pnr) där leverantören och artikeln finns i samma stad 9. Ta fram hur många leverantörer som finns 10. Ta fram hur många leverantörer som har leveranser i tabellen(sp) 11. Ta fram antalet leveranser av artikel med artikelnummer P2 12. Ta fram den totala kvantiteten som artikln P2 har levererats i 13. Ta fram total kvantitet och artikelnummer för varje levererad artikel 14. Ta fram artikelnummer(pnr) på alla artiklar som levereras av fler än 1 leverantör - 24 -
15. Ta fram samtliga kolumner på alla artiklar där namnet börjar på bokstaven C 16. Ta fram leverantörsnummer (SNR) där stat(stat) > 25 17. Ta fram leverantörsnummer (SNR) på alla leverantörer som har en stat som är satt till värdet NULL 18. Ta fram leverantörsnamn (SNAME) på alla de leverantörer som levererar artikel P2 19. Ta fram leverantörsnamn (SNAME) på alla de leverantörer som levererar artiklar där färg = röd (COLOR = red) 20. Ta fram leverantörsnummer (SNR) på alla leverantörer som har en stat som är mindre än den, för tillfället, maximala staten 21. Ta fram leverantörsnamn (SNAME) på alla de leverantörer som levererar artikel P2 (rad nivå) 22. Ta fram leverantörsnamn (SNAME) på alla de leverantörer som inte levererar artikel P2 (rad nivå) 23. Ta fram artikelnummer(pnr) på alla artiklar somväger mer än 16 pounds och/eller för alla artiklar som levereras av leverantören S2-25 -
Databasen Tabellerna S (Suppliers) Leverantörer *SNR SNAME STAT CITY s1 smith 20 london s2 jones 10 paris.......... P (Parts) Artiklar * PNR PNAME COLOR WEIGHT CITY p1 nut red 12 london p2 bolt green 17 paris............. SP (Shipment) Leveranser *SNR *PNR QTY s1 p1 300 s1 p2 200....... * = pn Dessa tabeller finns på sista sidan i boken (An introduktion to database system), där kan ni se data som ligger i tabellerna. Det går också bra att ta fram en beskrivning genom SQL: describe s; (visar en beskrivning på tabellen s) - 26 -
Laboration 2 Del 1 (SQL) SQL(DDL) ESQL(PL/SQL) 1. Skapa tabeller Namn: student Fält Datatyp studnr number(4) pn fnamn varchar2 (15) enamn varchar2 (15) Tabellen skall innehålla fälten ovan och studnr får bara innehålla värden mellan 0 1000. Namn: betyg Fält Datatyp kurskod varchar2 (10) pn studnr number(7) pn, fn betyg number datum date ex. YYYY-MM-DD Tabellen skall innehålla fälten ovan. Fältet betyg får ej innehålla null-värden, datum skall defualt vara system datum och För fn gäller det att tas pn bort kommer tillhörande fn-fält att tas *Under del 1 av denna laboration skall ni använda er av SQL Plus Bra att veta! För att se vilka tabeller som man skapat, gör en select * på tabellen tab. För beskrivning av en tabell, gör desc [tabellnamn]. Prova!!! 2. Utöka tabellen student med kolumnen tel som har datatypen varchar2 (15). 3. Ändra datatypen på betyg till varchar (2). 4. Registrera tre studenter (studnr 1, 25 och 75) och lägg in två betyg för någon av de registrerade studenterna. Prova att lägga in betyg för en student som ej finns registrerad. Vad händer och varför? - 27 -
5. Uppdatera ett betyg som finns registrerat. 6. Ta bort ett av betygen för studenten. Prova sedan att ta bort studenten som har något betyg registrerat. Vad händer och varför? 7. Skapa tabellen tempstudent a) Tabellen ska innehålla fälten studnr och enamn som ska vara deklarerade på samma sätt som i uppgift 1. b) Lägg in alla studenter som finns i tabellen student och har ett studnr som ligger mellan 1 och 50. 8. Ta bort tabellen Student. 9. Ta bort övriga tabeller som ni skapat (betyg, tempstudent). - 28 -
Del 2 (PL/SQL) * Skapa tabellen med hjälp av Schema builder, övrigt utförs i SQL Plus Skapa tabellen temp med fälten nedan: Tabell: temp Fältnamn Null? Datatyp col1 number(9,4) col2 number(9,4) message varchar2(55) Som editor ska ni använda anteckningar. Man kan om man vill använda valfri text-editor. Filerna ska sparas som textfiler (<filnamn>.txt). Välj sedan Nytt under Arkiv och skriv sedan din PL/SQL kod. Programmen exekveras i SQL*Plus och sker på följande sätt: Exempel: SQL> start < filnamn >.txt - 29 -
1. Skriv ett PL/SQL program som lägger in värderna (1, 2, uppgift1 ) i tabellen temp. (insert into temp values(1,..)) Lägg in en select efter end i programmet (Se nedan ) som visar vad som finns i tabellen temp (visar resultat av inserten). Exempel(PL/SQL): Declare Begin PL/SQL -kod End; / Select.. /*visning av värden*/ 2. Deklarera följande variabler i programmet: Namn c1 c2 mess Datatyp number(9,4) number(9,4) varchar2(55) Tilldela sedan variablerna (c1,c2,mess)följande värden (10, 20, uppgift2 ) och gör sedan en insert där ni utnyttjar er av variablerna. OBS!! För att tömma tabellen kan ni lägga in delete from temp före deklarationsdelen. 3. Deklarera variablerna ovan så att de är av samma typ som fälten i tabellen i databasen (%type). På detta sätt kan man minska sitt databeroende. Tilldela sedan variablerna följande värden (100,200, uppgift3 ) 4. Med hjälp av ESQL ska ni från tabellen emp hämta empno (anställningsnr), deptno (avdnr) och job (yrke) för SMITH (ename = SMITH ); - 30 -
Laboration 3 "#ESQL(PL/SQL) "#Felhantering "#View. PL/SQL Skapa tabellen temp som i laboration 2 Programmen exekveras i SQL*Plus och sker på följande sätt: Exempel: SQL> start < filnamn >.txt delete from temp; /* tömmer tabellen temp */ Declare /* Variabel dek.*/ Begin /*PL/SQL -kod*/ End; / Select.. /*visning av värden*/ ESQL 1. Ta med hjälp av ESQL fram empno, sal(månadslön) och ename på den anställde som har empno = 7369, Resultatet läggs i tabellen temp. 2. Ta fram samma data som i uppgift 1 (empno, sal, ename) empno =7369, sedan ska ni räkna ut årslönen (arlon) och sedan läggs värderna(empno,arlon,ename) in i tabellen temp. 3. a) Ta fram samma data som i uppgift 1 på de som jobbar på avdelning(deptno) 20. Lägg dessa i tabellen temp. b) Ta fram samma data som i uppgift 1 på de som jobbar på avdelning(deptno) 20. De som har en lön som ligger över medellön läggs i temp tabellen. Felhantering - 31 -
4. Skriv ett program som försöker ta fram data på en anställd (emp) som inte finns i tabellen, tex empno = 11111; a) Skapa en felhanteringsdel som hanterar om ingen data hittas. Om ingen data hittas ska följande värden läggas in i tabellen temp: (111,null, Inga data ) b) Skapa en felhanteringsdel som hanterar others. Här ska ni lägga in värdet i SQLCODE och SQLERRM i tabellen temp. View (Skapa tabellkopior av s, p och sp med data under dit schema) 5. a) 1. Skapa vy n vy1 som visar leverantörsnam och stad (sname, city ) på de leverantörer som har stat > 10. Kolumn rubrikerna ska vara (namn, stad). SQL> select * from vy1; NAMN STAD --------------- ------------ smith london balke paris clark london adams athens 2. Ta fram namnet på de leverantörer som finns i vy1 och finns i london. b) 1. Skapa vy n vy2 som visar leverantörsnr, namn och stad (snr,sname,city) på de leverantörer som levererar artikel p2. SQL> select * from vy2; SN SNAME CITY ----------------- ------------------ s1 smith london s2 jones paris s3 balke paris s4 clark london Visa de leverantörer(snr) som finns i london och levererar artikel p2 1. Andvänd tabellerna s och sp. 2. Använd vy2. Blir det någon skillnad på SQL-satserna(1och2)? c) Skapa vy n tempvy med with check options som visar alla col1, col2 och - 32 -
message där col1 större än 100. 1. lägg in följande värde (111, 50, värde1) i tabellen temp. Kontrollera att värdet finns med i vy n. 2. Försök att genom vy n ändra på col1 så att det får värdet 56 Vad händer och varför? d) Ta bort vy1, vy2 och tempvy Ta bort gjorda tabeller - 33 -
Laboration 4 Skapa constraints Skapa sekvenser (sequence) Skapa användare + Rättigheter Skapa DB triggers Använd Schema builder och SQL Plus 1. Skapa tabellerna nedan Tabell namn: Artikel Namn Typ Nyckel Förklaring -------------------- -------- --------- ---------------------- ARTNR NUMBER PN Artikelnr NAMN VARCHAR2(15) Artikelnamn ANTAL NUMBER Antal i lager BESTPUNKT NUMBER När beställning ska ske BESTANTAL NUMBER Antal som ska beställas Tabell namn: bestall Namn Typ Nyckel Förklaring ---------------- ------------- -------- ---------------------- BESTNR NUMBER PN Beställnings nr ARTNR NUMBER Artikelnr DATUM DATE Beställnings datum BEANT NUMBER Antal beställda * OBS!! Artnr skall ej vara fn för att undvika att triggern mutterar 2. Skapa en sequence (seqartnr) som hanterar att ge unikt nummer för PN artnr i tabellen artiklar. Sequence skall börja på 1 och öka med 1 för varje gång som det används. Lägg in några artiklar och utnyttja den skapade sequence (seqartnr) Skapa en liknade för bestnr (seqbestnr)i tabellen bestall. 3. Skapa användare a) USER = Ertanvändarnamn + kalle. Ex Användare pc01, namn = pc01kalle IDENTIFIED BY = användarnamn DEFAULT TABLESPACE = tools TEMPORARY TABLESPACE = temp QUOTA = unlimited ON tools PROFILE = default b) Prova att logga på som den nya användaren. - 34 -
Vad händer och varför? Vidtag åtgärder så att ni kan logga på med den nya användare. c) Ge användaren rättighet att söka i tabellerna bestall och artikel och kunna uppdatera fältet antal i artikel. Prova så att det fungerar. För att se vilka rättigheter som man skapat kan ni söka i följande tabeller: user_tab_privs_made user_col_privs_made rättigheter på tabell satta av användare rättigheter på kolumner satta av användare 3. Skapa databas trigger. a) Skapa trigger upart Trigger skall aktiveras när artikel antal understiger bestpunkt. Då skall tigger skapa en beställning i tabellen bestall på den artikel som blivit uppdaterad och med det antal som ska beställas. Triggern för bara skapa en beställning när de går under beställningspunkten,dvs den ska inte göra beställningar om antalet är under bestpunkt före man gör uppdateringen 4. Ta bort Tabellerna: Användaren: Trigger: Sekvens: Artiklar, bestall Den ni skapat upart seqartnr, seqbestnr - 35 -
Laboration 5 En kort beskrivning av en del av en administrativ verksamhet (lön-personaldel). Den här delen av den administrativa verksamheten hantera bla följande funktioner anställer, avskedar och förändrar löner för personal på företaget. Den information som man lagra om personalen skall vara tillräcklig för att kunna utföra funktionerna ovan plus att man vill vet när de blivit anställda (dvs registrerade i systemet). När det gäller löner så finns det en referenstabell (se nedan) som visar inom vilket löneintervall som de anställdas lön kan ligga inom, dvs vilken max/min lön som får ges. Tittel Max Min. Vd 75000 50000 Avdchef 50000 40000 Utvecklare 35000 25000 Sekreterare 25000 15000 Naturligtvis får man räkna med att max och min värden kommer att förändras i framtiden. Viktigt är att det nya systemet inte tillåter att anställda får löner som inte ligger inom löneintervallet. Man vill också ha tillgång till information om de avdelningar som finns på företaget (produktion, försäljning, administration, underhåll, mm), alla dessa består av en avdelningschef. För att underlätta administrativa hanteringen vill man införa unika nummer för varje avdelning. Varje avdelning har även tilldelats en telefon i fikarummet för att öka tillgängligheten till personalen. Uppgift Er uppgift blir att skapa en databas som hanterar personalfunktionerna beskrivna ovan och lagrar information som behövs för verksamheten ovan. Allt som ni skapar skall finnas i databasen och kunna hanteras från SQL Plus (Ej SQL kommandon). När databasen utvecklas använder ni de verktyg som ni tycker är lämpliga. - 36 -