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 (NAME, SALARY, DEPT) ORDERS(O#, DATE, CUST) CUSTOMERS(NAME, ADDR, BALANCE) SUPPLIES(NAME, ITEM, PRICE) INCLUDES(O#, ITEM, QUANTITY) Att plocka 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)? Relation: Emps och Customers Operation: Union # - men bara på unionskompatibla relationer $ NAME (Emps) # $ NAME (Customers) Alla namn ur båda relationerna NAME (Emps) # NAME (Customers) CUSTOMERS NAME ADDR BALANCE Olle Olle Bgatan 22 +125 Zack Zebra Cgatan 33-200 Judy Giraffe Dgatan 44-50 Kalle Anka Ygatan 55 +43 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? Relation: Emps och Customers 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? Relation: Emps och Customers Operation: Snitt $ - men bara på unionskompatibla relationer $ NAME (Emps) $ $ NAME (Customers) Namn som finns i båda relationerna. NAME (Emps) # NAME (Customers) CUSTOMERS NAME ADDR BALANCE Olle Olle Bgatan 22 +125 Zack Zebra Cgatan 33-200 Judy Giraffe Dgatan 44-50 Kalle Anka Ygatan 55 +43 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 Relation: Emps och Customers Operation: Differens " - men bara på unionskompatibla relationer $ NAME (Customer) % $ NAME (Emps) Tar bort Emps ur Customers NAME (Customer) " NAME (Emps) CUSTOMERS NAME ADDR BALANCE Olle Olle Bgatan 22 +125 Zack Zebra Cgatan 33-200 Judy Giraffe Dgatan 44-50 Kalle Anka Ygatan 55 +43 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 Sammansättning (Join) 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)
Mer kombinationer 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 NAME ADDR BALANCE Olle Olle Bgatan 22 +125 Zack Zebra Cgatan 33-200 Judy Giraffe Dgatan 44-50 Kalle Anka Ygatan 55 +43 Mer kombinationer Customer NAME=CUST Order = NAME=CUST (Customer & Orders) NAME ADDR BALANCE O# DATE Zack Zebra Cgatan 33-200 1024 1 jan Kalle Anka Ygatan 55 +43 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 NAME ADDR BALANCE O# DATE Zack Zebra Cgatan 33-200 1024 1 jan Kalle Anka Ygatan 55 +43 1025 7 jan Olle Olle Bgatan 22 +125 null null Judy Giraffe Dgatan 44-50 null null Sammansättning 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)
Hitta alla som... 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 Division Operationer Formellt: R S 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. Urval $ Projektion # Union $ Snitt % Differens & Kartesisk produkt Sammansättning inre höger yttre vänster yttre full yttre Division
Övning 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.