Relationsalgebra Relationsalgebra Relationsalgebran r ett formellt sprâk fˆr att extrahera data ur relationer. SprÂket r uppbyggt av ett litet antal operatorer. Tar en eller två tabeller De primitiva operatorerna r som argument (indata). Producerar en ny tabell ï Selektion som resultat! ï Projektion ï Union ï Differens ï Kartesisk produkt Med hjälp av dessa operatorer kan andra operatorer som t ex division och snitt definieras. 1 av 50
UNION INTERSECT(= SNITT) DIFFERENCE A B A B A B A UNION B A INTERSECT B A DIFFERENCE B (A MINUS B) Alla rader som förekommer i A eller B PROJECTION Alla rader som förekommer i både A och B De rader som förekommer i A men inte i B SELECTION 2 av 50
Selektion ANSTƒLLD Selektion inneb r att man v ljer ut ett antal tupler ur en relation baserat pâ nâgot villkor. σ Avd =Parfym ANSTƒLLD Namn Lˆn Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Namn Lˆn Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Eva Berg 35000 Eva Berg Parfym 3 av 50
Projektion ANSTƒLLD Projektion inneb r att v lja ut ett antal attribut ur en relation. Namn Lˆn Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Namn Lˆn π Namn,Lˆn ANSTƒLLD Per Kvist 15000 Bo Gren 20000 Sten Rot 22000 Nils Hed 30000 Eva Berg 35000 4 av 50
Kartesisk product A X B (eller ibland A * B) ska tolkas som alla rader i A kombinerade med alla rader i B A a b c B x y A X B a x a y b x b y c x c y 5 av 50
Kartesisk produkt ett exempel till ANSTÄLLD AVDELNING Namn Lˆn Chef Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 ANSTÄLLD X AVDELNING Namn Lön Chef Avd Anamn Våning Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Och så vidare på samma sätt... Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Leksaker Livsmedel Parfym Skor Trädgård Leksaker Livsmedel Parfym Skor Trädgård 2 3 3 2 1 2 3 3 2 1 Totalt har ANSTÄLLD X AVDELNING 25 st rader! (ANSTÄLLD har 5 rader och AVDELNING har 5 rader = totalt 5*5 st rader). 6 av 50
JOIN ANSTÄLLD Namn Avd Avd ANamn Pia Mia Ken 5 3 3 AVDELNING 5 1 3 Bröd Ost Vin ANSTÄLLD X AVDELNING Anställd.Avd = Avdelning.Avd Namn Anst. Avd. Avd Avd Anamn Pia Mia Ken 5 3 3 5 3 3 Bröd Vin Vin Här bildas den nya tabellen genom att matcha kolumnvärden (här kolumen Avd) från två tabeller. I en JOIN kan jämförelsevillkoret var > >= < <= <> =. Om jämförelsevillkoret är = talar man om en equi-join. 7 av 50
NATURAL JOIN ANSTÄLLD AVDELNING Namn Avd Avd ANamn ANSTÄLLD X AVDELNING Namn Avd Anamn Pia 5 5 Bröd Pia 5 Bröd Mia 3 1 Ost Mia 3 Vin Ken 3 3 Vin Ken 3 Vin En NATURAL JOIN är en EQUI-JOIN där man projicerat bort ett av de ingående JOIN-attributen (här tar vi bort dupliceringen av JOIN-attributet Avd ). En NATURAL JOIN förutsätter att JOIN-attributet (attributen) heter likadant i de två tabeller som ska joinas. 8 av 50
vning i relationsalgebra ANSTƒLLD( Namn, Lˆn, Chef, Avd ) Vad inneb r fˆljande uttryck i naturligt sprâk? π Namn (σ Lˆn > 20000 (ANSTƒLLD)) Skriv ett relationsalgebraiskt uttryck som ger namnen pâ cheferna fˆr de anst llda som tj narmer n25000 pâ skoavdelningen. ANSTÄLLD AVDELNING Namn Lˆn Chef Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 9 av 50
Relationsalgebra övning : Ta fram namnen på alla chefer över anställda på skoavdelningen som tjänar mer än 20000: π Chef (σ Lön>20000 AND Avd= Sko (ANSTÄLLD)) alternativt: π Namn (ANSTÄLLD) X π Chef (σ Lön>20000 AND Avd= Sko (ANSTÄLLD) 10 av 50
vning i relationsalgebra ANSTƒLLD( Namn, Lˆn, Chef, Avd ) AVDELNING( Anamn, VÂning) Skriv ett relationsalgebraiskt uttryck som ger namn och lˆn fˆr de anst llda som arbetar pâ andra vâningen. π Namn, Lön (ANSTÄLLD X σ Våning=2 (AVDELNING)) ANSTÄLLD.Avd=AVDELNING.Anamn 11 av 50
Union compatibility Somliga av de relationsalgebraiska operatorerna kräver att de tabeller som de opererar på ska vara unionskompatibla. Detta betyder att de två tabellerna måste ha lika många kolumner och där de par av kolumner som motsvarar varandra har samma domän. UNION, SNITT och DIFFERENS är unionskompatibla operatorer. Ska man ta unionen av två tabeller måste tabellerna ha lika många kolumner och de par av kolumner som svarar mot varandra måste vara av samma typ (ha samma domän). A A.a A.b a 1 a 2 b 2 A UNION B? B B.a B.b a x a y b x A A UNION B? A.a A.b a 1 a 2 b 2 B B.a B.b B.c a 1 m a 2 n b 2 o A UNION B! A A.a A.b a x a y b x B B.a B.b b x a m b x 12 av 50
UNION A Namn Fido Karo Mindy Ossi Ras Tax Tax Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Tax Tax Schäfer Welsh Corgie A UNION B Namn Fido Karo Mindy Ossi Emir Lady Morris Ras Tax Tax Pudel Dvärgtax Tax Schäfer Welsh Corgie 13 av 50
SNITT (INTERSECT) A Namn Fido Karo Mindy Ossi Ras Tax Tax Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Tax Tax Schäfer Welsh Corgie A SNITT B Namn Ras Fido Tax 14 av 50
DIFFERENCE (MINUS) A Namn Fido Karo Mindy Ossi Ras Tax Tax Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Tax Tax Schäfer Welsh Corgie A MINUS B Namn Karo Mindy Ossi Ras Tax Pudel Dvärgtax 15 av 50
A B x m x n x o y m y n z m z n z o B m n o Kvot R S Vi har två relationer R och S. R KVOT S A x z För att förstå vad R KVOT S är kan man tänka på ungefär följande sätt: Vilka kolumner kommer resultatet att innehålla: Jo R - S dvs de kolumner som förekommer i R men inte i S. I vårt fall blir det kolumnen A i R. Vilka kolumn-värden kommer med i kolumnen A? Jo alla de A-värden i R som är relaterade till ALLA B- värden i S. I vårt fall är detta sant för A-värden x och z. Dvs x har ett B-värde för både m,n och o. Det samma gäller z. A-värdet y kommer inte med eftersom det saknar ett B-värde. 16 av 50
Kvot fortsättning... Kvot är användbart för frågor av typ: Ta fram alla personer som ätit av alla glassorterna ÄTANDE Namn Glass Maria Maria Maria Pelle Pelle Stina Stina Stina Päronsplitt Vaniljpuck Storstrut Vaniljpuck Storstrut Vaniljpuck Storstrut Päronsplit GLASS Glass Päronsplit Storstrut Vaniljpuck ÄTANDE KVOT GLASS Namn Maria Stina KVOT kallas även DIVISION 17 av 50
SQL - Structured Query Language SQL har funktioner för att hantera: databeskrivning, SQL-DDL (Data Definition Language) databearbetning, SQL-DML (Data Manipulation Language) behörighet, SQL-DCL (Data Control Language) 1986 antogs en internationell standard för data sub-language för relations-dbms (SQL). 1992 publicerade ISO en standard som kallas SQL2 (eller SQL92). Denna standard överensstämde med aktuella SQL-dialekter för de vanligaste DBMS. En ny standard SQL3 är på väg. 18 av 50
SQL - Structured Query Language SELECT Namn, Lˆn π FROM ANSTƒLLD X WHERE Lˆn > 17000 σ SQL kan uttrycka allt som går att uttrycka i relationsalgebran - språket är relationally complete 19 av 50
SQL-DML SELECT, utsökning INSERT, lägga in (vanligen rader i en tabell) UPDATE, ändra DELETE, ta bort 20 av 50
SELECT SELECT Namn, Avd FROM ANSTÄLLD WHERE Lön > 25000 ANSTÄLLD Namn Lˆn Chef Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym AVDELNING Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 Resultat: Namn Nils Hed Eva Berg Avd Skor Parfym 21 av 50
WHERE predikatet kan innehålla: jämförelseoperatorerna =, <>, > >=, <, =< logiska operatorerna AND, OR och NOT paranteser kan användas för att styra utvärderingen BETWEEN för att testa intervall ANSTÄLLD AVDELNING Namn Lˆn Chef Avd Anamn VÂning SELECT Namn, Våning FROM ANSTÄLLD, AVDELNING WHERE Avd = Anamn AND Lön BETWEEN 22000 AND 30000 Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 Resultat: Namn Våning Sten Rot Nils Hed 3 1 22 av 50
Kvalificerade attributnamn Om ett attributnamn förekommer i flera av de berörda tabellerna måste det kvalificeras med tabellnamnet: ANSTÄLLD AVDELNING Namn Lˆn Chef Anamn Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 SELECT Namn, Våning FROM ANSTÄLLD, AVDELNING WHERE ANSTÄLLD.Anamn = AVDELNING.Anamn AND Lön BETWEEN 22000 AND 30000 23 av 50
Alias Om tabellnamnen är långa kan aliasnamn införas genom att ge en tabell ett alias utan att kommatecken skrivs i tabellistan: SELECT A1.Namn, A2.Våning FROM ANSTÄLLD A1, AVDELNING A2 WHERE A1.Anamn = A2.Anamn AND Lön > 25000 24 av 50
Alias fortsättning Alias är även användbart när man vill joina en tabell med sig själv: Ta fram namn och lön på alla anställda som har en chef som tjänar mer än 30000 kr: SELECT A1.Namn, A1.Lön FROM ANSTÄLLD A1, ANSTÄLLD A2 WHERE A1.Chef = A2.Namn AND A2.Lön > 30000 ANSTÄLLD Namn Lˆn Chef Anamn Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym AVDELNING Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 Resultat: Namn Per Kvist Bo Gren Nils Hed Eva Berg Lön 15000 20000 30000 35000 25 av 50
Nästlade frågor Ta fram namn och lön på alla anställda som har en chef som tjänar mer än 30000 kr: SELECT Namn, Lön FROM ANSTÄLLD WHERE Chef IN (SELECT Namn FROM ANSTÄLLD WHERE Lön > 30000) Här använde vi nästling som ett alternativ till att joina en tabell med sig själv! (se föregående fråga) 26 av 50
Nästlade frågor med NOT EXISTS Ta fram namn på alla som ätit av alla glasstyperna: SELECT Ä.Namn FROM ÄTANDE Ä WHERE NOT EXISTS (SELECT Glass FROM GLASS WHERE Glass NOT IN (SELECT Glass FORM ÄTANDE WHERE Namn = Ä.Namn)) Det får inte existera någon glass i GLASS som inte ätits av Ä.Namn ÄTANDE Namn Glass Maria Maria Maria Pelle Pelle Stina Stina Stina Resultat: Päronsplitt Vaniljpuck Storstrut Vaniljpuck Storstrut Vaniljpuck Storstrut Päronsplit Namn Maria Stina GLASS Glass Päronsplit Storstrut Vaniljpuck 27 av 50
Nästlade frågor forts. Ta fram namn på alla som ätit samma glassar som Pelle: SELECT Ä.Namn FROM ÄTANDE Ä WHERE NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle AND Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn)) ÄTANDE Namn Glass Maria Maria Maria Pelle Pelle Stina Stina Stina Päronsplitt Vaniljpuck Storstrut Vaniljpuck Storstrut Vaniljpuck Storstrut Päronsplit GLASS Glass Päronsplit Storstrut Vaniljpuck Det får inte existera någon glass som Pelle ätit som inte den vi söker ätit. Hmm... Räcker detta? 28 av 50
SELECT Ä.Namn FROM ÄTANDE Ä WHERE NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle AND Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn)) AND NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn AND Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle)) Nästlade frågor forts. Ta fram namnen på de som ätit samma glassar som Pelle ätit: Det får inte existerar någon glass som Pelle ätit som inte de vi söker ätit. Det får heller inte existera någon glass som de vi söker ätit som inte Pelle ätit. Resultat: Namn Pelle Ingen hade ätit precis de glassar Pelle ätit (utom Pelle). 29 av 50
Vyer kan göra det lite enklare CREATE VIEW Pelles_glassar AS (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle) SELECT Ä.Namn FROM ÄTANDE WHERE NOT EXISTS (SELECT Glass FROM Pelles_glassar WHERE Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn)) AND NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn AND Glass NOT IN Pelles_glassar) 30 av 50
DISTINCT SQL rensar inte duplikat automatiskt (vilket ju operatorerna i relationsalgebra gjorde). För att eliminera dubletter anges DISTINCT. Ta fram alla som ätit minst en glass som även Pelle ätit: SELECT DISTINCT Namn From ÄTANDE WHERE Glass IN Pelles_glassar SELECT Namn From ÄTANDE WHERE Glass IN Pelles_glassar Resultat: Namn Maria Stina Resultat: Namn Maria Maria Maria Stina Stina Stina 31 av 50
Inbyggda funktioner, aggregatfunktioner COUNT(*), räknar antalet rader i en tabell COUNT(kolumnnamn), räknar antalet värden i en kolumn SUM(kolumnnamn), summerar värdena i en kolumn AVG(kolumnnamn), tar genomsnittet av värdena i en kolumn MAX(kolumnnamn), ger största värdet i en kolumn MIN(kolumnnamn, ger minsta värdet i en kolumn 32 av 50
Exempel på aggregat-funktioner SELECT COUNT(*) FROM ÄTANDE Ger antalet rader i tabellen ÄTANDE Resultat: 8 SELECT COUNT(DISTINCT Namn) FROM ÄTANDE Ger antalet (unika) personer i tabellen ÄTANDE Resultat: 3 33 av 50
ORDER BY En relation (tabell) saknar ju ordning, men man kan sortera resultatet (vanligen presenteras resultatet i primärnyckelordning om man läser från en tabell). SELECT DISTINCT Namn FROM ÄTANDE ORDER BY Namn Ger alla namnen sorterade i bokstavsordning Resultat: Namn Maria Pelle Stina 34 av 50
GROUP BY Grupperar rader efter det värde som anges. Ta fram alla personer och hur mycket glass de ätit per person: SELECT Namn, count(glass) FROM ÄTANDE GROUP BY Namn Resultat: Namn Maria Pelle Stina 3 2 3 35 av 50
Ge ny kolumnrubrik till resultat Grupperar rader efter det värde som anges. Ta fram alla personer och hur mycket glass de ätit per person: SELECT Namn, count(glass) AS Glass_antal FROM ÄTANDE GROUP BY Namn Resultat: Namn Glass_antal Maria 3 Pelle 2 Stina 3 36 av 50
GROUP BY OCH HAVING HAVING fungerar på grupper som WHERE fungerar på rader, dvs elimenerar grupper Ta fram alla personer som ätit mer än 2 glassar: SELECT Namn, count(glass) FROM ÄTANDE GROUP BY Namn HAVING COUNT(Glass) > 2 Resultat: Namn Maria Stina 3 3 37 av 50
Mer om nästlade frågor (subselect) Vissa frågor kräver att man beräknar ett värde i databasen för att använda det i en WHERE-klausul. Detta kan endast lösas med en subselect (nåja en vy skulle också fungera). Ta fram alla personer som ätit mer glassar än Pelle ätit SELECT Namn, count(glass) FROM ÄTANDE Resultat: GROUP BY Namn Namn HAVING COUNT(Glass) > (SELECT count(glass) Maria 3 FROM ÄTANDE Stina 3 WHERE NAMN = Pelle GROUP BY Namn) 38 av 50
UNION Ta fram alla avdelningar som ligger på plan 1 eller avelningar där personer är antällda som tjänar mer än 20000 eller båda delar: Alternativ SELECT Anamn FROM AVDELNING WHERE Våning = 1 UNION SELECT Anamn FROM ANSTÄLLD WHERE Lön > 20000 SELECT AVDELNING.Anamn FROM AVDELNING, ANSTÄLLD WHERE AVDELNING.Anamn = ANSTÄLLD.Anamn AND Våning = 1 OR Lön > 20000 39 av 50
INTERSECT(SNITT) Ta fram alla avdelningar som ligger på plan 1 OCH där alla personer som arbetar där tjänar mer än 20000: Alternativ SELECT Anamn FROM AVDELNING WHERE Våning = 1 INTERSECT SELECT Anamn FROM ANSTÄLLD WHERE Lön > 20000 SELECT AVDELNING.Anamn FROM AVDELNING, ANSTÄLLD WHERE AVDELNING.Anamn = ANSTÄLLD.Anamn AND Våning = 1 AND Lön > 20000 40 av 50 A
EXCEPT(MINUS) Ta fram alla avdelningar som inte har några personer som tjänar mer än 30000: Alternativ SELECT Anamn FROM AVDELNING EXCEPT SELECT Anamn FROM ANSTÄLLD WHERE Lön > 30000 SELECT Anamn FROM AVDELNING WHERE Anamn NOT IN (SELECT Anamn FROM ANSTÄLLD WHERE Lön > 30000) 41 av 50
Textsträngsmatchning Ta fram alla anställda vars namn börjar på bokstaven n: SELECT Namn FROM ANSTÄLLD WHERE Namn LIKE n% Kolumnnamn LIKE textkonstant, där textkonstant kan utgöras av % (svarar mot 0 eller flera tecken) och/eller _ (svarar mot ett godtyckligt tecken) och/eller övriga tecken (som motsvarar sig själva). Mari- K%sson svarar mot en textsträng som börjar på Mari och följs av minst ett godtyckligt tecken, ett blanktecken, ett K, samt ett godtyckligt antal valfria tecken avslutat med bokstäverna sson. Exempel: Maria Karlsson, Marie Klasson men också Mari Ksson. I t ex Access svarar % mot * och - mot? 42 av 50
INSERT Används för att lägga till rader i redan existerande tabeller: Två sätt: antingen med specificerade värden eller via SELECT: INSERT INTO GLASS(Glass) VALUES( Dajmstrut ) INSERT INTO ÄTANDE(Namn, Glass) VALUES(Maria, Dajmstrut ) Vad händer om de två INSERT-satserna anropas i omvänd ordning? Om man tänker sig att man har en annan tabell (benämnd statistik) som innehåller Namn på personer och deras genomsnittliga ätande kan man skapa INSERT via SELECT INSERT INTO statistik(namn, snittkvant) SELECT Namn, avg(glass) FROM ÄTANDE GROUP BY Namn 43 av 50
DELETE Används för att ta bort rader i redan existerande tabeller: Ta bort glassen Dajmstrut : DELETE FROM GLASS WHERE Glass = Dajmstrut Vad händer om de med de rader i ÄTANDE som refererar till Dajmstrut? Ta bort alla rader i tabellen ÄTANDE: DELETE FROM ÄTANDE 44 av 50
UPDATE Används för att ändra innehållet i ett eller flera attribut i rader i redan existerande tabeller: Betraka tabellan GLASS_I_LAGER till nedan. Om en leverans med 200 päron- split anländer samtidigt som man vill rea just päronsplit kan följande UPDATEsats exekveras. UPDATE GLASS_I_LAGER SET Antal_i_lager = Antal_i_lager + 200, Pris = 6.00 WHERE Glass = Päronsplit GLASS_I_LAGER (före UPDATE) Glass Päronsplit Storstrut Vaniljpuck Antal_i_lager 250 300 700 Pris 7.00 15.00 11.00 GLASS_I_LAGER (efter UPDATE) Glass Päronsplit Storstrut Vaniljpuck Antal_i_lager 450 300 700 Pris 6.00 15.00 11.00 45 av 50
Några slutord om vyer (VIEWS) En vy är en mall genom vilken man ser en databas. En vy är dynamisk, dvs varje gång man gör SELECT på en vy ser man aktuella värden. En vy är inte en ny tabell och dess innehåll kommer inte att lagras på sekundärminne. Det som lagras är definitionen av vyn. Kurs Student Resultat Grupp IS:4 IS:4 IS:4 IS:4 GKD GKD GKD GKD GKD Kalle Pelle Olle Stina Kalle Olle Maria Eva Knut VG G U VG VG G G G G GruppA GruppA GruppB GruppB Grupp1 Grupp2 Grupp2 Grupp1 Grupp2 Schemaläggaren vill bara kunna läsa Kurs och Student Studenterna får bara läsa Kurs, Student och Grupp Lärarna och studierektor behöver både kunna läsa och skriva hela tabellen 46 av 50
Några slutord om vyer (VIEWS) Vyer kan definieras på en eller flera bastabeller och eller andra vyer. CREATE VIEW Student_vy AS (SELECT Kurs, Student, Grupp FROM KURSTILLFÄLLE) CREATE VIEW Lärar_vy AS (SELECT * FROM KURSTILLFÄLLE) CREATE VIEW Schemaplanerings_vy AS (SELECT Kurs, Student FROM KURSTILLFÄLLE) Schemaläggaren vill bara kunna läsa Kurs och Student Studenterna får bara läsa Kurs, Student och Grupp Lärarna och studierektor behöver både kunna läsa och skriva hela tabellen 47 av 50
Fördelar med vyer visst logiskt dataoberoende samma data kan betraktas av olika användare på olika sätt (på samma gång) Användaren kan få en förenklad bild av databasen - mindre komplex DML flexibel behörighetskontroll 48 av 50
Mera schema-ddl CREATE TABLE EMPLOYEE (EID VARCHAR(11) NOT NULL UNIQUE, BID CHAR(7) NOT NULL, PRIMARY KEY(EID), FOREIGN KEY(BID) REFERENCES BUSINESS ON DELETE CASCADE ON UPDATE CASCADE) DDL: DML: DCL: CREATE SCHEMA CREATE TABLE CREATE VIEW CREATE INDEX DROP TABLE DROP VIEW DROP INDEX ALTER TABLE SELECT INSERT UPDATE DELETE GRANT REVOKE Förelsäsning 5! 49 av 50
DDL: DROP TABLE Ta bort tabell med angivet namn samt alla rader samt alla referenser (rader med främmande nycklar i annan tabell) till denna tabell. Ta bort GLASS-tabellen och alla referenser till denna tabell (i detta fall tas alltså alla rader i GLASS bort men även själva tabellen GLASS och alla rader i tabellen ÄTANDE. Tabellen ÄTANDE finns dock kvar (tom)). DROP TABLE Glass CASCADE; Ta bort GLASS-tabellen samt alla rader OM det inte finns referenser (främmande nycklar i annan tabell) till GLASS DROP TABLE Glass RESTRICT; 50 av 50