Databaser Design och programmering Relationsalgebra den matematiska grunden för att bearbeta data representerad i relationsmodellen Operationer i relationsalgebra Två typer av operationer: Operationer från mängteori: Union, Snitt (Intersection), Differens, Kartesisk produkt. Operationer införda för relationsdatabaser: Urval, Projektion, Division, Sammansättning (Join). Exempel DBschema Ett varuhus som har anställda, kunder, leverantörer som man kan beställa från EMPLOYEE(key,name,salary,manager) SALE(debit,item,quantity) ITEM(key,name,price,qoh) DEBIT(key,sdate,employee,account) INCLUDES(O#, ITEM, QUANTITY) ORDER (O#, DATE, CUST) Att söka ut data Ex: Lista alla anställda som tjänar över 30000kr Relationen Emps Operation: Urval Villkor: attributet SALARY>30000. SALARY>30000 (Emps) Resultat: alla tupler som matchar villkoret. SALARY>30000 (Emps) Max Macka 31000 Mat Att plocka ut data, forts Resultatet av en relationsalgebraoperation är en ny relation. Kombinationer möjliga Ex: Alla som tjänar mer än 30000 och ändå inte jobbar på kansliet. DEPT <> Kansli ( SALARY>30000 (Emps) ) SALARY>30000 DEPT <> Kansli (Emps)
Formellt: V(R) Urval, Där V är ett villkor (logiskt uttryck) uppbyggt av attributnamn och värden aritmetiska operatorer < > " = # logiska operatorer " Resultatet är den mängd tupler i R som uppfyller villkoret V. Att plocka ut data, forts. Ex: Vad heter våra anställda Relationen Emps, attributet NAME från alla tupler. Operation: Projektion " Attribut: NAME $ NAME (Emps) Resultatet är en relation med bara en kolumn " NAME (Items) Max Macka 31000 Mat Mer kombinationer Var jobbar folk som tjänar mer än 30000? Relation: Operation: först urval, sedan projektion $ DEPT ( SALARY>30000 (Emps)) " DEPT ( SALARY>30000 (Emps)) Max Macka 31000 Mat Formellt: " A ( R) Projektion Där A är en mängd av attribut i relationen R Attribut som finns i A måste finnas i relationen. Resultat: en relation vars schema har exakt de attribut som finns i A där varje tupel har de värden på attributen som motsvarande tupel i R.
Jobba på mer data Ex: Om vi vill veta vilka människor som finns i våra register (både anställda och kunder)? Operation: Union # - men bara på unionskompatibla relationer $ NAME (Emps) # $ NAME (Customers) Alla namn ur båda relationerna " NAME (Emps) # " NAME (Customers) CUSTOMERS Max Macka 31000 Mat Formellt: R # S Union Där R och S är två unionskompatibla relationer. Dvs de måste bestå av samma attribut (mer formellt: attributvärdena måste vara ur samma domäner). Resultat: En relation av alla deras tupler. Inga dubletter Jobba på mer data Ex: Om vi vill ha all information om de människor som finns i våra register? Operation: Yttre Union - om partiellt unionskompatibla relationer Emps Yttre union Customers Alla attribut ur båda relationerna Emps Yttre Union Customers ADDR BALANCE Bgatan +125 null null null null null null Max Macka 31000 Mat null null Zack Zebra null null Cgatan 33-200 Judy Giraffe null null Dgatan 44-50 Kalle Anka null null Ygatan 55 +43 Jobba på mer data Ex: Om vi vill veta om vi har anställda som också finns i kundregistret? Operation: Snitt $ - men bara på unionskompatibla relationer $ NAME (Emps) $ $ NAME (Customers) Namn som finns i båda relationerna.
" NAME (Emps) $ " NAME (Customers) CUSTOMERS Olle Olle Max Macka 31000 Mat Formellt: R $ S Snitt, $ Där R och S är två unionskompatibla relationer. Resultat: En relation av bara tupler som finns i båda relationerna. Eller en tom mängd. Jobba på mer data Ex: Sök alla kunder som INTE är anställda Operation: Differens # - men bara på unionskompatibla relationer $ NAME (Customer) % $ NAME (Emps) Tar bort Emps ur Customers " NAME (Customer) # " NAME (Emps) CUSTOMERS Zack Zebra Judy Giraffe Kalle Anka Max Macka 31000 Mat Formellt: R # S Differens Där R och S är två unionskompatibla relationer. Resultat: en relation med alla tupler som finns i R men inte i S Eller en tom mängd. OBS: R%S # S%R Kombinera data Ex: Vem har beställt vad? Relation: Orders och Includes Operation: först Kartesisk produkt & Orders & Includes Sätter ihop varje tupel i Orders med varje tupel i Includes.
Orders O# DATE CUST 1024 1 jan Zack Zebra 1025 7 jan Kalle Anka Includes O# ITEM QUANTITY 1024 Oxfilé 1.5 1024 Lök 5 1025 Lök 2 1025 Banan 3 1025 Ost 500 Orders $ Includes O# DATE CUST O# ITEM QUAN TITY 1024 1 jan Zack Zebra 1024 Oxfilé 1.5 1024 1 jan Zack Zebra 1024 Lök 5 1024 1 jan Zack Zebra 1025 Lök 2 1024 1 jan Zack Zebra 1025 Banan 3 1024 1 jan Zack Zebra 1025 Ost 500 1025 7 jan Kalle Anka 1024 Oxfilé 1.5 1025 7 jan Kalle Anka 1024 Lök 5 1025 7 jan Kalle Anka 1025 Lök 2 1025 7 jan Kalle Anka 1025 Banan 3 1025 7 jan Kalle Anka 1025 Ost 500 Urval ur kombination Tupler där O# är lika Orders.O#=Includes.O#(Orders&Includes) O# DATE CUST O# ITEM QUANTITY 1024 1 jan Zack Zebra 1024 Oxfilé 1.5 1024 1 jan Zack Zebra 1024 Lök 5 1025 7 jan Kalle Anka 1025 Lök 2 1025 7 jan Kalle Anka 1025 Banan 3 1025 7 jan Kalle Anka 1025 Ost 500 Formellt: R $ S Kartesisk produkt Resultat: En relation med alla attribut ur både R och S, och alla kombinationer av tupler ur S med tupler ur R Naturlig sammansättning Natural join Formellt R*S = V (R&S) Där V är villkoret att de attribut som heter lika ska ha lika värde på i de utvalda tuplerna. Sammansättning (Join) Mer kombinationer Formellt R VS = V (R&S) Dvs Orders.O#=Includes.O#(Orders&Includes) = Orders Orders.O#=Includes.O#Includes Kallas också Inre Join (Inre sammansättning) Om man vill titta på alla kunder, och, om de har någon aktuell order, även ordernumret och datumet? Operation: Join? Orders O# DATE CUST 1024 1 jan Zack Zebra 1025 7 jan Kalle Anka Customer
Mer kombinationer Customer NAME=CUST Order = NAME=CUST (Customer & Orders) O# DATE 1024 1 jan 1025 7 jan Men det är inte alla kunder Mer kombinationer Operation: Yttre Sammansättning Tar med även tupler ur endera relationen som inte villkoret är uppfyllt för. Customers NAME=CUST Orders O# DATE 1024 1 jan 1025 7 jan null null null null Sammansättning Hitta alla som... Formellt: R V S (inre sammansättning) R V S (vänster yttre s.) R V S (Höger yttre s.) R V S (Full yttre s.) Resultat: alla sammansättningar av tupler ur R med tupler ur S sådana att villkoret V är uppfyllt, plus alla tupler ur R (Vänster yttre) eller S (Höger yttre) eller båda (Full yttre) Ex: Hitta alla som tänker laga fläsk med löksås (som har beställt både stekfläsk och lök) Operation: division Includes Includes (modifierad) O# ITEM 1024 Oxfilé 1024 Lök 1025 Lök 1025 Banan 1025 Ost 1025 Stekfläsk 1026 Lök 1026 Stekfläsk FläskMedLök ITEM Stekfläsk Lök Hitta alla order som innehåller alla saker i FläskMedLök Formellt: R S Division Där alla attribut i S måste finnas i R Resultat: första halvan av de tupler i R där andra halvan motsvarar ALLA tupler i S. (Dvs för alla tupler i S finns motsvarande grupp tupler i R som har samma värde på de attribut som inte finns med i S.
Operationer Övning Urval $ Projektion # Union $ Snitt % Differens & Kartesisk produkt Sammansättning inre höger yttre vänster yttre full yttre Division Vilka av de följande ekvationerna gäller, gäller de alltid eller bara under vissa förutsättningar? 1. V1( V2(R)) = V1 V2(R) 2. V(R&S) = V(R) &S 3. V($ A (R)) = $ A( V(R)) V, V1 och V2 är villkor, A en attributmängd.