Overzicht informatie- vergaring conceptueel ontwerp logisch ontwerp domeinanalyse functionele analyse behoefteanalyse conceptueel ontwerp conceptueel model (bijvoorbeeld EER-diagram) functionele beschrijving databasemodel- onafhankelijk logisch ontwerp dbms- onafhankelijk logisch databaseschema (bijvoorbeeld relationeel) gedragspecificaties fysieke ontwerp DDL-scripts implementatie van gedrag
Relationele databases: het relationeel databasemodel Principes van databases Relationele databases: het relationeel databasemodel Hoofdstuk 4
Overzicht Structurele aspecten Integriteitaspecten Gedragsaspecten
Structurele aspecten Integriteitaspecten Gedragsaspecten Basisrelaties Overzicht Structurele aspecten Basisrelaties Metadata Views Werken met indexen Behandelen van ontbrekende informatie Integriteitaspecten Gedragsaspecten
Basisrelaties Atomaire datatypes Structurele aspecten Domein Operatoren voorbeeld: Boolean domein = {waar, onwaar} verzameling van operatoren = {=, , , , } Typecompatibiliteit waar onwaar waar onwaar waar waar onwaar waar waar waar waar onwaar onwaar onwaar onwaar onwaar waar onwaar onwaar waar
Basisrelaties Structurele aspecten Relatieschema Het schema R(A1:T1, A2:T2, …,An:Tn) van een relatie is opgebouwd uit een relatienaam R en een eindige verzameling van attributen {A1:T1, A2:T2, …,An:Tn}. Elk attribuut Ai:Ti, 1in is op zijn beurt opgebouwd uit een attribuut- naam Ai en een geassocieerd atomair datatype Ti.
Structurele aspecten Visualisatie Tabel Artiest Naam: varchar Voornaam: Geboren: integer Da Vinci Leonardo 1452 Degas Edgar 1834 Ensor James 1860 Monet Claude 1840 Gestorven: 1519 1917 1949 1926 A_ID: char(3) A01 A02 A03 A04
Structurele aspecten Terminologie graad attributen relatienaam Tabel Artiest Naam: varchar Voornaam: Geboren: integer Da Vinci Leonardo 1452 Degas Edgar 1834 Ensor James 1860 Monet Claude 1840 Gestorven: 1519 1917 1949 1926 A_ID: char(3) A01 A02 A03 A04 graad relatienaam attributen intentie extentie tuples kardinaliteit relatie cel met attribuutwaarde
Structurele aspecten Eigenschappen Interpretatie Binnen een relatie kunnen geen dubbele tuples voorkomen. De tuples van een relatie zijn niet geordend. De attributen van een relatie zijn niet geordend. Alle attributen van een relatie zijn atomair. Interpretatie Schema = declaratie van een veronderstelling Tuple = feit of particuliere instantie van deze veronderstelling
relationele database = verzameling van basisrelaties Structurele aspecten Metadata: de catalogus Gebruikersgedefinieerde relaties Systeemgedefinieerde relaties Werken met de catalogus relationele database = verzameling van basisrelaties data metadata gebruikers en toepassingen dbms
relationele database = verzameling van basisrelaties Structurele aspecten Views of afgeleide relaties Een view is een benoemde, virtuele relatie die is afgeleid van gebruikersgedefinieerde en/of systeemgedefinieerde basisrelaties en/of andere views. relationele database = verzameling van basisrelaties data metadata view
Structurele aspecten basisrelatie + definiërende expressie view Tabel Artiest Naam: varchar Voornaam: Geboren: integer Da Vinci Leonardo 1452 Degas Edgar 1834 Ensor James 1860 Monet Claude 1840 Gestorven: 1519 1917 1949 1926 A_ID: char(3) A01 A02 A03 A04 basisrelatie + definiërende expressie SELECT Naam, Voornaam, Geboren FROM Artiest WHERE Geboren >= 1800 AND Geboren < 1900 view Tabel Artiesten_uit_19de_eeuw
Structurele aspecten basisrelatie + definiërende expressie view Tabel Artiest Naam: varchar Voornaam: Geboren: integer Da Vinci Leonardo 1452 Degas Edgar 1834 Ensor James 1860 Monet Claude 1840 Gestorven: 1519 1917 1949 1926 A_ID: char(3) A01 A02 A03 A04 basisrelatie + definiërende expressie SELECT Naam, Voornaam, Gestorven – Geboren AS Leeftijd FROM Artiest view Tabel Artiesten_info Leeftijd: 67 83 89 86
Structurele aspecten Nut van views Logische data-onafhankelijkheid (Lenigen van individuele gebruikersnoden) Afleiden van nieuwe data Inkorten van bevragingsinstructies Afschermen van data
Structurele aspecten Aanpassen, toevoegen en verwijderen De view moet expliciet als aanpasbaar zijn gedefinieerd ‘with check option’ De manipulatie mag niet conflicterend zijn met de definiërende expressie van de view Er mogen geen manipulaties worden uitgevoerd op afgeleide data Toegelaten aanpassingen worden gepropageerd naar de onderliggende basisrelaties
Indexen Structurele aspecten Een index over n attributen van een basisrelatie R kan worden omschreven als een geordende lijst van (n+1)-tuples. Voor elk tuple t uit de extentie van R is er één (n+1)-tuple opgenomen in de lijst. Dit (n+1)-tuple is opgebouwd uit de n beschouwde attribuutwaarden van t en een referentie naar t. De (n+1)-tuples zijn geordend op basis van de n attribuutwaarden, volgens een opgegeven volgorde.
Structurele aspecten Opmerking: uniciteitindex CREATE INDEX ID_Naam Tabel Artiest Naam: varchar Voornaam: Geboren: integer Van Gogh Vincent 1853 Degas Edgar 1834 Ensor James 1860 Monet Claude 1840 Gestorven: 1890 1917 1949 1926 A_ID: char(3) A05 A02 A03 A04 Da Vinci Leonardo 1452 1519 A01 Index ID_Naam Index ID_Sterfdata CREATE INDEX ID_Naam ON Artiest(Naam ASC); CREATE INDEX ID_Sterfdata ON Artiest(Gestorven DESC); Opmerking: uniciteitindex
Ontbrekende informatie Structurele aspecten Ontbrekende informatie Onderscheid Onbekende informatie Niet-gedefinieerde informatie Null-waarden Null 0 Operatoren waar onwaar null waar onwaar null waar waar onwaar null waar waar waar waar onwaar onwaar onwaar onwaar onwaar waar onwaar null null null onwaar null null waar null null
Structurele aspecten MAYBE waar onwaar waar onwaar onwaar waar onwaar onwaar null null null waar Uitbreiding van andere operatoren: resultaat is ‘null’ als één van de argumenten ‘null’ is Gebruik: Tabel Artiest Naam: varchar Voornaam: Geboren: integer Van Gogh Vincent 1853 Degas Edgar 1834 Ensor James null Monet Claude Gestorven: 1890 1917 1949 1926 A_ID: char(3) A05 A02 A03 A04 Da Vinci Leonardo 1452 A01
Structurele aspecten Defaultwaarden Problemen met defaultwaarden Geboren integer DEFAULT 0 versus Geboren integer NOT NULL
Structurele aspecten Integriteitaspecten Gedragsaspecten Sleutels Overzicht Structurele aspecten Integriteitaspecten Sleutels Integriteitrestricties Stored procedures Triggers Gedragsaspecten
Sleutels Kandidaatsleutels Integriteitaspecten Als K een deelverzameling is van de verzameling van alle attributen van een gegeven basisrelatie R, dan is K een kandidaatsleutel voor R als en slechts als voldaan is aan: 1. De uniciteiteigenschap: Geen enkele legale extentie van R bevat twee tuples met dezelfde waarden voor alle attributen uit K. 2. De irreducibiliteiteigenschap: Wanneer uit K attributen worden weggelaten, mag niet meer voldaan zijn aan de uniciteiteigenschap. Opmerking: Enkelvoudig versus samengesteld
Integriteitaspecten Primaire sleutels Eén van de kandidaatsleutels wordt gekozen als primaire sleutel, alle overige worden alternatieve sleutels genoemd.
Vreemde sleutels Integriteitaspecten Een vreemde sleutel F van een basisrelatie R2 is een verzameling van attributen van R2, waarvoor geldt dat: 1. Er bestaat een basisrelatie R1 (R1 niet noodzakelijk verschillend van R2) met een kandidaatsleutel K, die evenveel attributen bevat als F en waarbij er een één- op-ééncorrespondentie is tussen de attributen van K en de attributen van F, zodat corresponderende attributen dezelfde geassocieerde datatypes hebben. 2. Op elk tijdstip komt elke reguliere waarde van F in R2 eveneens voor als waarde van in K in een tuple van R1.
Integriteitaspecten Tabel Schilderij primaire sleutel = {S_ID} vreemde sleutels = {Artiest} en {Eigenaar} S_ID: char(3) Naam: varchar Artiest: char(3) Periode: integer Waarde: real Eigenaar: varchar S01 Vissershuis A04 1882 16.000.000 Boijmans S02 De balletles A02 1872 8.500.000 Louvre S03 Mona Lisa A01 1499 75.000.000 Louvre S05 Na het bad A02 1883 1.500.000 Louvre Tabel Artiest primaire sleutel = {A_ID} A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer Gestorven: integer A01 Da Vinci Leonardo 1452 1519 A02 Degas Edgar 1834 1917 A03 Ensor James 1860 1949 A04 Monet Claude 1840 1926
Integriteitaspecten Zelfreferentie Tabel Artiest primaire sleutel = {A_ID} vreemde sleutel = {Geïnspireerd_door} null A04 A02 Naam: varchar Voornaam: Geboren: integer Da Vinci Leonardo 1452 Degas Edgar 1834 Ensor James 1860 Monet Claude 1840 Gestorven: 1519 1917 1949 1926 A_ID: char(3) A01 A03 Geïnspireerd_door:
Integriteitsrestricties Integriteitaspecten Integriteitsrestricties Een integriteitsrestrictie is een voorwaarde waaraan alle data uit een database op elk moment moeten voldoen. CREATE ASSERTION sterftejaarrestrictie CHECK ( Artiest.Gestorven >= Artiest.Geboren ); DROP ASSERTION sterftejaarrestrictie
Toestandsrestricties versus transitierestricties Integriteitaspecten Toestandsrestricties versus transitierestricties Relatierestrictie versus databaserestrictie (typerestricties en attribuutrestricties) De waarde van een schilderij moet een positief getal zijn (toestandsrestrictie en relatierestrictie): CREATE ASSERTION waarderestrictie CHECK ( Schilderij.Waarde > 0 ); De periode van een schilderij moet binnen de leefperiode van de artiest vallen (toestandsrestrictie en databaserestrictie): CREATE ASSERTION perioderestrictie CHECK ( NOT EXISTS ( SELECT * FROM Schilderij, Artiest WHERE Schilderij.Artiest = Artiest.A_ID AND ( Schilderij.Periode < Artiest.Geboren OR Schilderij.Periode > Artiest.Gestorven ) ) );
Integriteitaspecten Het loon van een werknemer mag niet afnemen (transitierestrictie en relatierestrictie): CREATE ASSERTION loonrestrictie CHECK ( Old.Werknemer.Loon <= New.Werknemer.Loon ); Hierbij zijn Old en New systeemfuncties die respectievelijk de oude en potentiële nieuwe waarde van het attribuut weergeven. De burgerlijke stand van een persoon moet correct worden aangepast (transitierestrictie en relatierestrictie): CREATE ASSERTION burgerlijke_standrestrictie CHECK ( NOT(Old.Persoon.Burg_Stand= ‘ongehuwd’ AND New.Persoon.Burg_Stand= ‘gescheiden’) ); KMSK bezit geen schilderijen van Da Vinci (toestandsrestrictie en databaserestrictie): CREATE ASSERTION DaVinci_restrictie CHECK ( NOT EXISTS ( SELECT * FROM Schilderij, Artiest WHERE Schilderij.Artiest = Artiest.A_ID AND Schilderij.Eigenaar = KMSK AND Artiest.Naam = ‘Da Vinci’ ) );
Structurele aspecten Integriteitaspecten Gedragsaspecten Overzicht Structurele aspecten Integriteitaspecten Gedragsaspecten Relationele algebra
Relationele algebra Gedragsaspecten Aangepaste versies van traditionele verzamelingoperatoren vereniging of unie doorsnede verschil cartesisch product Speciale relationele operatoren selectie projectie join deling
Gedragsaspecten Twee relatieschema’s zijn van hetzelfde type indien ze evenveel attributen bevatten en er een één-op-ééncorrespondentie is tussen hun attributen, zodat corresponderende attributen dezelfde geassocieerde datatypes hebben. Als R een relatie is met attribuut A:T, dan resulteert de ‘rename’-operatie R RENAME A AS Anew in een nieuwe relatie met een schema dat bekomen wordt uit het schema van R door het attribuut A:T is te vervangen door het attribuut Anew:T en met dezelfde extentie als R.
De verenigingoperator Gedragsaspecten De verenigingoperator Als R1 en R2 twee relaties zijn met schema’s van hetzelfde type, dan is de vereniging, R1 UNION R2 van deze relaties een relatie met een schema van hetzelfde type en een extentie die bestaat uit alle tuples die ofwel voorkomen in R1, ofwel voorkomen in R2, ofwel voorkomen in R1 en R2.
Gedragsaspecten vereniging Tabel Artiest_A Tabel Artiest_B A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer A01 Da Vinci Leonardo 1452 A01 Da Vinci Leonardo 1452 A02 Degas Edgar 1834 A04 Monet Claude 1840 Tabel (Artiest_A UNION Artiest_B) A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer vereniging A01 Da Vinci Leonardo 1452 A02 Degas Edgar 1834 A04 Monet Claude 1840
De doorsnede-operator Gedragsaspecten De doorsnede-operator Als R1 en R2 twee relaties zijn met schema’s van hetzelfde type, dan is de doorsnede, R1 INTERSECT R2 van deze relaties een relatie met een schema van hetzelfde type en een extentie die bestaat uit alle tuples die zowel voorkomen in R1 als in R2.
Gedragsaspecten doorsnede Tabel Artiest_A Tabel Artiest_B A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer A01 Da Vinci Leonardo 1452 A01 Da Vinci Leonardo 1452 A02 Degas Edgar 1834 A04 Monet Claude 1840 Tabel (Artiest_A INTERSECT Artiest_B) A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer doorsnede A01 Da Vinci Leonardo 1452
De verschiloperator Gedragsaspecten Als R1 en R2 twee relaties zijn met schema’s van hetzelfde type, dan is het verschil, R1 MINUS R2 van deze relaties een relatie met een schema van hetzelfde type en een extentie die bestaat uit alle tuples die wel voorkomen in R1 en niet in R2.
Gedragsaspecten verschil Tabel Artiest_A Tabel Artiest_B A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer A01 Da Vinci Leonardo 1452 A01 Da Vinci Leonardo 1452 A02 Degas Edgar 1834 A04 Monet Claude 1840 Tabel (Artiest_A MINUS Artiest_B) verschil A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer A02 Degas Edgar 1834
De cartesische productoperator Gedragsaspecten De cartesische productoperator Als R1 en R2 twee relaties zijn die geen gemeenschappelijke attributen hebben, dan is het cartesisch product, R1 TIMES R2 van deze relaties een nieuwe relatie waarvan de attributen uit het relatieschema worden bekomen door de unie te nemen van de verzameling van de attributen van R1 en de verzameling van de attributen van R2. De extentie van de resulterende relatie bestaat uit alle tuples die worden bekomen door een tuple dat voorkomt in R1 samen te voegen met een tuple dat voorkomt in R2.
Gedragsaspecten cartesisch product Tabel Schilderij Tabel Artiest S_ID: char(3) SNaam: varchar Artiest: Periode: integer S01 Vissershuis null 1882 S02 De balletles A02 1872 S03 Mona Lisa A01 1499 Naam: Voornaam: Da Vinci Leonardo Degas Edgar A_ID: Tabel (Schilderij TIMES Artiest) cartesisch product
De selectieoperator Gedragsaspecten Als R een relatie is en e een logische expressie is waarvan de parameters alle attributen zijn van R dan resulteert de selectie, R WHERE e in een nieuwe relatie die dezelfde attributen heeft als R en waarvan de extentie bestaat uit alle tuples van R waarvoor de expressie e evalueert naar de waarheidswaarde ‘waar’.
Gedragsaspecten selectie Tabel Artiest A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer Gestorven: integer A01 Da Vinci Leonardo 1452 1519 A02 Degas Edgar 1834 1917 A04 Monet Claude 1840 1926 Tabel (Artiest WHERE Geboren > 1800) A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer Gestorven: integer selectie A02 Degas Edgar 1834 1917 A04 Monet Claude 1840 1926
De projectieoperator Gedragsaspecten Als R een relatie is en {A1:T1, A2:T2, …, Ap:Tp} een deelverza- meling is van de attributen van R dan resulteert de projectie, R {A1, A2, …, Ap} in een nieuwe relatie waarvan het schema bekomen wordt uit het schema van R door enkel de attributen uit {A1:T1, A2:T2, …, Ap:Tp} te behouden en waarbij de extentie bestaat uit alle tuples t=(A1:w1, A2:w2, …, Ap:wp) waarvoor een tuple voorkomt in R met attribuutwaarde w1 voor A1, w2 voor A2, …, en wp voor Ap.
Gedragsaspecten projectie Tabel Artiest A_ID: char(3) Naam: varchar Voornaam: varchar Geboren: integer Gestorven: integer A01 Da Vinci Leonardo 1452 1519 A02 Degas Edgar 1834 1917 A04 Monet Claude 1840 1926 Tabel (Artiest {A_ID, Naam, Voornaam}) A_ID: char(3) Naam: varchar Voornaam: varchar projectie A01 Da Vinci Leonardo A02 Degas Edgar A04 Monet Claude
De ‘join’-operator Gedragsaspecten De (natuurlijke) ‘inner join’-operator Als R1 een relatie is met attributen {X1:TX1, X2:TX2, …, Xm:TXm, Y1:TY1, Y2:TY2, …, Yn:TYn} en R2 een relatie is met attributen {Y1:TY1, Y2:TY2, …, Yn:TYn, Z1:TZ1, Z2:TZ2, …, Zp:TZp} dan resulteert de join, R1 JOIN R2 in een nieuwe relatie waarvan het schema bestaat uit de attributen {X1:TX1, X2:TX2, …, Xm:TXm, Y1:TY1, Y2:TY2, …, Yn:TYn, Z1:TZ1, Z2:TZ2, …, Zp:TZp} en waarvan de extentie bestaat uit alle tuples die worden bekomen door een tuple van R1 samen te voegen met een tuple van R2 onder de voorwaarde dat alle gemeenschappelijke attributen gelijke waarden moeten hebben.
Gedragsaspecten join Tabel Schilderij Tabel Artiest S_ID: char(3) SNaam: varchar A_ID: char(3) Periode: integer A_ID: char(3) Naam: varchar Voornaam: varchar S01 Vissershuis null 1882 A01 Da Vinci Leonardo S02 De balletles A02 1872 A02 Degas Edgar S03 Mona Lisa A01 1499 Tabel (Schilderij JOIN Artiest) S_ID: char(3) SNaam: varchar A_ID: char(3) Periode: integer Naam: varchar Voornaam: varchar join S02 De balletles A02 1872 Degas Edgar S03 Mona Lisa A01 1499 Da Vinci Leonardo
De ‘(left) outer join’-operator Gedragsaspecten De ‘(left) outer join’-operator Varianten: ‘right outer join’ en ‘full outer join’ Als R1 een relatie is met attributen {X1:TX1, X2:TX2, …, Xm:TXm, Y1:TY1, Y2:TY2, …, Yn:TYn} en R2 een relatie is met attributen {Y1:TY1, Y2:TY2, …, Yn:TYn, Z1:TZ1, Z2:TZ2, …, Zp:TZp} dan resulteert de (left) outer join, R1 OUTER JOIN R2 in een nieuwe relatie die bekomen wordt door het resultaat van de ‘join’-operatie R1 JOIN R2 uit te breiden met alle tuples uit R1 waarvoor minstens één van de gemeenschappelijke attributen een null-waarde bevat en daarbij de ontbrekende p attribuut- waarden van R2 te modelleren met extra null-waarden.
Gedragsaspecten outer join Tabel Schilderij Tabel Artiest S_ID: char(3) SNaam: varchar A_ID: char(3) Periode: integer A_ID: char(3) Naam: varchar Voornaam: varchar S01 Vissershuis null 1882 A01 Da Vinci Leonardo S02 De balletles A02 1872 A02 Degas Edgar S03 Mona Lisa A01 1499 Tabel (Schilderij OUTER JOIN Artiest) S_ID: char(3) SNaam: varchar A_ID: char(3) Periode: integer Naam: varchar Voornaam: varchar outer join S01 Vissershuis null 1882 null null S02 De balletles A02 1872 Degas Edgar S03 Mona Lisa A01 1499 Da Vinci Leonardo
De delingoperator Gedragsaspecten Als R1 een relatie is met attributen {X1:TX1, X2:TX2, …, Xm:TXm, Y1:TY1, Y2:TY2, …, Yn:TYn} en R2 de relatie is met attributen {X1:TX1, X2:TX2, …, Xm:TXm} dan resulteert de deling, R1 DIVIDEBY R2 in een nieuwe relatie waarvan het schema bestaat uit de attributen {Y1:TY1, Y2:TY2, …, Yn:TYn} en de extentie bestaat uit alle tuples t(Y1:wY1, Y2:wY2, …, Yn:wYn) waarvoor alle mogelijke samenvoegingen met een tuple uit R2 voorkomen in R1.
Gedragsaspecten X Y XY XY DIVIDEBY X deling Tabel Tentoonstelling SNaam: varchar Periode: integer Vissershuis 1882 De balletles 1872 Mona Lisa 1499 Tabel (Tentoonstelling DIVIDEBY Schilderij) deling Naam: Da Vinci Degas Monet Thema: Vrouw Woning Tabel Schilderij date X Y XY XY DIVIDEBY X
Bijkomende operatoren Gedragsaspecten Bijkomende operatoren De uitbreidingsoperator De groepeeroperator Aggregatieoperatoren
De uitbreidingsoperator Gedragsaspecten De uitbreidingsoperator Als R een relatie is, {A1:T1, A2:T2, …, Ap:Tp} een deelverzameling is van de attributen van R en {B1:F1, B2:F2, …, Bq:Fq} een verza- meling is van afgeleide attributen Bi:Fi, i=1,2,…,q, met Bi een unieke attribuutnaam, die niet voorkomt in R en Fi een functie is over de attributen van R, die constanten kan bevatten en gebruikt wordt om de waarden van Bi te berekenen, dan resulteert de uitbreiding, EXTEND R {A1, A2, …, Ap} (B1:F1, B2:F2, …, Bq:Fq) in een nieuwe relatie waarvan het schema bekomen wordt door de afgeleide attributen uit {B1:F1, B2:F2, …, Bq:Fq} toe te voegen aan het schema van de projectie R {A1, A2, …, Ap} en waarvan de extentie wordt bekomen door elk tuple van R {A1, A2, …, Ap} uit te breiden met de waarden Bi:wi, i=1,2,…,q, met wi de waarde die bekomen wordt door Fi te evalueren met de attribuutwaarden van het corresponderende tuple uit R.
Gedragsaspecten uitbreiding Tabel (EXTEND Schilderij{S_ID, Naam} (Prijs:Waarde/1.000.000)) S_ID: char(3) Naam: varchar Prijs: Waarde/1.000.000 uitbreiding S01 Vissershuis 16 S02 De balletles 8,5 S03 Mona Lisa 75
Gedragsaspecten De groepeeroperator Als R een relatie is en {A1:T1, A2:T2, …, Ap:Tp} een deelverzame- ling is van de attributen van R dan resulteert de groepering, R GROUP (A1, A2, …, Ap) in een nieuwe relatie met hetzelfde schema als R, maar waarbij de tuples in de extentie gegroepeerd zijn in disjuncte deelverza- melingen zodat een deelverzameling enkel tuples bevat met een gelijke waarde voor elk van de attributen A1, A2, …, Ap.
Gedragsaspecten Gedragsaspecten Tabel (Schilderij GROUP (Eigenaar)) S_ID: char(3) Naam: varchar Gedragsaspecten Artiest: char(3) Periode: integer Waarde: real Eigenaar: varchar groepering groep1 S01 Vissershuis A04 1882 16.000.000 Boymans S02 De balletles A02 1872 8.500.000 Louvre groep2 S03 Mona Lisa A01 1499 75.000.000 Louvre
Aggregatieoperatoren Gedragsaspecten Aggregatieoperatoren Soorten COUNT MAX, MIN, AVG SUM Gebruik In combinatie met de uitbreidingsoperator Optioneel: in combinatie met de groepeeroperator
Gedragsaspecten Gedragsaspecten Tabel Schilderij S_ID: char(3) Naam: varchar Gedragsaspecten Artiest: char(3) Periode: integer Waarde: real Eigenaar: varchar S01 Vissershuis A04 1882 16.000.000 Boymans S02 De balletles A02 1872 8.500.000 Louvre S03 Mona Lisa A01 1499 75.000.000 Louvre Tabel (EXTEND Schilderij {} (Max_waarde:MAX(Waarde), Min_waarde:MIN(Waarde))) uitbreiding + aggregatie Max_waarde:MAX(Waarde) Min_waarde:MIN(Waarde) 75.000.000 8.500.000
Gedragsaspecten Gedragsaspecten Tabel (Schilderij GROUP (Eigenaar)) S_ID: char(3) Naam: varchar Gedragsaspecten Artiest: char(3) Periode: integer Waarde: real Eigenaar: varchar groepering groep1 S01 Vissershuis A04 1882 16.000.000 Boymans S02 De balletles A02 1872 8.500.000 Louvre groep2 S03 Mona Lisa A01 1499 75.000.000 Louvre Tabel (EXTEND Schilderij {Eigenaar} (Totaalwaarde:SUM(Waarde)) GROUP (Eigenaar)) groepering + uitbreiding + aggregatie Eigenaar:varchar Totaalwaarde:SUM(Waarde) Boymans 16.000.000 Louvre 83.500.000