Andra relationella språk



Relevanta dokument
Relationsmodellen. Relations modellen är idag den mest änvända datamodellen för kommersiella

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

Relationell databasdesign

Frågeoptimering. Frågeoptimering kapitel 14

Uppdelning. Relationell databasdesign, FB Teori Låt R vara ett relationsschema. R 1, R 2,..., R n är en uppdelning av

Databasdesign. E-R-modellen

Reducering till relationsscheman

Relationskalkyl (RK)

Avancerad SQL Kapitel 4. Databaser: Avancerad SQL. sid SQL datatyper 1 Integritetsbegränsningar 3 Auktorisering 7 Inbäddad SQL 10 Dynamisk SQL 10

Grunderna för relationsmodellen!

E-R-modellen, E-R-diagram E-R-diagram. representerar entitetsmängder

Relationsalgebra. Relationsalgebra består av en mängd operatorer som tar en eller två relationer som input och producerar en ny relation som resultat.

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Innehåll. Föreläsning 7. Satslogiken är för grov. Samma sak i predikatlogik: Första ordningens predikatlogik. Logik med tillämpningar

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

Relationsalgebra. Varför behöver jag lära mig relationsalgebra?!

Filosofisk Logik (FTEA21:4) föreläsningsanteckningar/kompendium. v. 2.0, den 29/ III. Metalogik 17-19

Sanningsvärdet av ett sammansatt påstående (sats, utsaga) beror av bindeord och sanningsvärden för ingående påståenden.

Ett databashanteringssystem (DBHS) skiljer sig från andra programmeringssystem bl.a.

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Deklarativt programmeringsparadigm

Filosofisk logik Kapitel 15. Robin Stenwall Lunds universitet

Föreläsning 5. Deduktion

Filosofisk logik Kapitel 19. Robin Stenwall Lunds universitet

Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

Grundläggande logik och modellteori (5DV102)

Grundläggande logik och modellteori

EMPS(NAME, SALARY, DEPT)

Databaser - Design och programmering. Operationer i relationsalgebra. Att söka ut data. Exempel DBschema. Att plocka ut data, forts

Design av en klass BankAccount som representerar ett bankkonto

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Induktion, mängder och bevis för Introduktionskursen på I

Programdesign, databasdesign. Databaser - Design och programmering. Funktioner. Relationsmodellen. Relation = generaliserad funktion.

MATEMATIKENS SPRÅK. Syftet med denna övning är att med hjälp av logik lära oss att uttrycka matematik mer exakt, lära oss

Karlstads Universitet, Datavetenskap 1

Tommy Färnqvist, IDA, Linköpings universitet. 2 Strukturer Domäner Tolkningar... 3

Grundläggande logik och modellteori

Att öva på och förstå ett program med flera samverkande klasser.

Logik och kontrollstrukturer

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

Normalisering av meningar inför resolution 3. Steg 1: Eliminera alla och. Steg 2: Flytta alla negationer framför atomära formler

Vad är det? Översikt. Innehåll. Vi behöver modeller!!! Kontinuerlig/diskret. Varför modeller??? Exempel. Statiska system

Varför är logik viktig för datavetare?

Skriftlig tentamen i kurserna TDDD12 och TDDB48 Databasteknik kl

MATEMATIKENS SPRÅK. Avsnitt 1

p /\ q r DD1350 Logik för dataloger Kort repetition Fö 3 Satslogikens semantik

Sats. Om t är en rätvinklig triangel så är summan av kvadraterna på kateterna i t lika med kvadraten på hypotenusan.

Objekt och klasser - Introduktion

Grundläggande logik och modellteori

DD1350 Logik för dataloger. Fö 7 Predikatlogikens semantik

Databaser - Design och programmering. Relationsmodellen. Relationer - som tabeller. Relationer som tabeller. Alternativa notationer: Relationsschema

D. x 2 + y 2 ; E. Stockholm ligger i Sverige; F. Månen är en gul ost; G. 3 2 = 6; H. x 2 + y 2 = r 2.

PROV. 12 Egenskaper (provavsnitt)

Filosofisk logik Kapitel 15 (forts.) Robin Stenwall Lunds universitet

Övningshäfte 1: Logik och matematikens språk

FUZZY LOGIC. Christopher Palm chrpa087

Föreläsning 3: Ekvationer och olikheter

DD1361 Programmeringsparadigm HT15

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder

MATEMATIKENS SPRÅK. Syftet med denna övning är att med hjälp av logik lära oss att uttrycka matematik mer exakt,

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

DD1361 Programmeringsparadigm HT16

= 0 vara en given ekvation där F ( x,

DD1350 Logik för dataloger. Fö 2 Satslogik och Naturlig deduktion

DD1361 Programmeringsparadigm HT17

LULEÅ TEKNISKA UNIVERSITET Ämneskod S0002M, MAM801, IEK600,IEK309 Institutionen för matematik Datum Skrivtid

JavaScript del 3 If, Operatorer och Confirm

Chapter 4: Writing Classes/ Att skriva egna klasser.

FÖRELÄSNING 3 ANDERS MÄRAK LEFFLER IDA/HCS

Logik. Boolesk algebra. Logik. Operationer. Boolesk algebra

Lek$on 4: Kunskapsrepresenta$on. Robin Keskisärkkä och Jonas Rybing

Schema XMLSIE_1_0.xsd

Logik för datavetare DVK:Log Tisdagen 28 oktober Institutionen för dataoch systemvetenskap David Sundgren

Structured Query Language (SQL)

sanningsvärde, kallas utsagor. Exempel på utsagor från pass 1 är

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Filosofisk Logik (FTEA21:4) föreläsningsanteckningar I. v. 2.0, den 24/4 2013

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Predikatlogik: Normalformer. Klas Markström

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Språket Python - Del 1 Grundkurs i programmering med Python

Semantik och pragmatik

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Kapitel Ekvationsräkning

Förra gången: Primitiva data

SF1901 Sannolikhetsteori och statistik I

En introduktion till predikatlogik

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Tentamen i. TDDC67 Funktionell programmering och Lisp

Objektorienterad programmering Föreläsning 4

TDIU01 - Programmering i C++, grundkurs

MA2047 Algebra och diskret matematik

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående

Booleska variabler och översättning mellan programuttryck och booleska variabler

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Vardagssituationer och algebraiska formler

Modularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:

Logik och bevisteknik lite extra teori

Transkript:

Andra relationella språk Kapitel 5 Andra relationella språk sid Tupelrelationskalkyl 1 Domänrelationskalkyl 6 Query-by-Example (QBE) 8

Andra relationella språk, tupelrelationskalkyl 5-1 Tupelrelationskalkyl Tupelrelationskalkyl är ett icke-proceduralt frågespråk (dvs. en fråga beskriver vilken information som önskas).tupelrelationskalkyl (begränsad till säkra uttryck) är lika uttrycksfullt som relationsalgebra. Dvs. för varje relationsalgebraiskt uttryck där endast grundoperatorer ingår finns ett ekvivalent uttryck i tupelrelationskalkyl, och tvärtom. Varje fråga är av formen: { t P (t) } Dvs. mängden av alla tupler t så att predikatet P är sant för t. t är en tupel-variabel, t[a] betecknar värdet för tupel t på attribut A. t r betecknar att tupel t finns i relation r. P är en formel liksom en formel i predikatkalkylen. En predikatkalkylformel uppbyggs av Mängd av attribut och konstanter Mängd av jämförelseoperatorer: <, <, =,, >, > Mängd av konektiver: och, eller, icke Implikation : P 1 P 2 Kvantorer: t r (P(t)) det existerar en tupel t i relation r sådan att predikatet P(t) är sant t r (P(t)) P är sant för alla tupler t i relation r P 1 P 2 ( (P 1 ) (P 2 )) P 1 P 2 (P 1 ) P 2 t r (P(t)) t r ( P(t))

Andra relationella språk, tupelrelationskalkyl 5-2 Exempelfrågor Bestäm loan_number, branch_name, och amount för lån större än 1200. { t t loan t[amount] > 1200} σ amount >1200 (loan) dvs. alla attribut ingår i svaret Bestäm lånnumret för varje lån större än 1200 (dvs. samma som ovan men bara lånnumret önskas i svaret). Π loan_number (σ amount >1200 (loan)) { t s loan ( t[loan_number] = s[loan_number] s[amount] > 1200 ) } Svaret är en ett-attributig tabell på schemat (loan_number), vilket bara framgår implicit i frågan Bestäm lånnummer och lånebelopp för varje lån större än 1200. { t s loan ( t[loan_number] = s[loan_number] t[amount] = s[amount] s[amount] > 1200 ) } Svaret är en två-attributig tabell på schemat (loan_number, amount), eftersom t har värden specificerade för loan_number och amount. Π loan_number, amount (σ amount >1200 (loan)) customer (customer_name, customer_street, customer_city) branch(branch_name, branch_city, assets) account(account_number, branch_name, balance) loan(loan_number, branch_name, amount) depositor (customer_name, account_number) borrower (customer_name, loan_number)

Andra relationella språk, tupelrelationskalkyl 5-3 Bestäm namnen på alla kunder som har ett lån, ett konto, eller båda i banken. { t s depositor ( t[customer_name] = s[customer_name]) u borrower ( t[customer_name] = u[customer_name]) } Π customer_name (borrower) Π customer_name (depositor) Bestäm namnen på alla kunder som har ett lån och ett konto i banken. { t s depositor ( t[customer_name] = s[customer_name]) u borrower ( t[customer_name] = u[customer_name]) } Bestäm namnen på alla kunder som har ett lån i Perryridge-grenen. { t s borrower ( t[customer_name] = s[customer_name] u loan ( u[loan_number] = s[loan_number] u[branch_name] = Perryridge )) } Π customer_name (σ borrower.loan_number = loan.loan_number (borrower loan)) branch_name = Perryride customer (customer_name, customer_street, customer_city) branch(branch_name, branch_city, assets) account(account_number, branch_name, balance) loan(loan_number, branch_name, amount) depositor (customer_name, account_number) borrower (customer_name, loan_number)

Andra relationella språk, tupelrelationskalkyl 5-4 Bestäm namnen på alla kunder som har ett konto i banken men som inte har ett lån. alla kontoinnehavare { t s depositor ( t[customer_name] = s[customer_name] u borrower ( t[customer_name] = u[customer_name] )) } alla låntagare Π customer_name (depositor) Π customer_name (borrower) Bestäm namnen på alla kunder som har ett lån från Perryridge-grenen samt deras boningsort. { t s loan (s[branch_name] = Perryridge u borrower (s[loan_number] = u[loan_number] t[customer_name] = u[customer_name] ) v customer (u[customer_name] = v[customer_name] t[customer_city] = v[customer_city] )) } Π customer_name, customer_city (σ borrower.loan_number = loan.loan_number (loan borrower customer)) borrower.customer_name = customer.customer_name loan.branch_name = Perryride customer (customer_name, customer_street, customer_city) branch(branch_name, branch_city, assets) account(account_number, branch_name, balance) loan(loan_number, branch_name, amount) depositor (customer_name, account_number) borrower (customer_name, loan_number)

Andra relationella språk, tupelrelationskalkyl 5-5 Bestäm namnen på alla kunder som har ett konto i alla grenar belägna i Brooklyn. { t s customer (t[customer_name] = s[customer_name]) ( u branch (u[branch_city] = Brooklyn v depositor (t[customer_name] = v[customer_name] ) w account ( w[account_number] = v[account_number] w[branch_name] = u[branch_name] )))) } Mängden av alla kunder sådana att, för alla tupler u i branch-relationen, med värdet Brooklyn, kunden har ett konto i grenen vars namn är i branch_name attributet i u. Π customer_name, branch_name (depositor account) Π branch_name (σ branch_city = Brooklyn (branch)) Säkerhet av uttryck Det är möjligt att skriva tupelkalkyluttryck som genererar oändliga relationer. Ex.: { t t r } Resulterar i en oändlig relation om domänen för något attribut är oändlig För att skydda mot problemet, inskränker vi mängden av tillåtna uttryck till säkra uttryck: Ett uttryck { t P (t) } i tupelrelationskalkyl är säkert om alla värden i resultatet tillhör dom(p), där domänen dom(p) för P är mängden av alla värden som refereras av P (ingår i P eller i någon relation vars namn ingår i P). Dvs. varje komponent av t måste förekommer i en av de relationer, tupler, eller konstanter som förekommer i P. T.ex.: { t t[a] = 5 true } är ej säkert uttrycket genererar en oändlig mängd av attributvärden som inte förekommer i någon relation eller tupel eller konstant i P.

Andra relationella språk, domänrelationskalkyl 5-6 Domänrelationskalkyl Domänrelationskalkyl är ett icke-proceduralt frågespråk ekvivalent i styrka med tupelrelationskalkyl. Varje fråga är ett uttryck av formen: { < x 1, x 2,..., x n > P(x 1, x 2,..., x n ) } där x 1, x 2,..., x n representerar en domän variabler och P representerar en formel liksom en formel i predikatkalkylenl Exempelfrågor Π loan_number (σ amount >1200 (loan))? Bestäm loan_number, branch_name, och amount för lån större än 1200. σ amount >1200 (loan) { < l, b, a > < l, b, a > loan a > 1200} { t t loan t[amount] > 1200} Bestäm namnen på alla kunder som har ett lån större än 1200. {<c > l, b, a (< c, l > borrower < l, b, a > loan a > 1200)} Bestäm namnet och lånebeloppet för alla kunder som har ett lån från Perryridge-grenen. alt.: {<c, a > l (< c, l > borrower b (< l, b, a > loan b= Perryridge ))} { < c, a > l (< c, l > borrower < l, Perryridge, a > loan )} customer (customer_name, customer_street, customer_city) branch(branch_name, branch_city, assets) account(account_number, branch_name, balance) loan(loan_number, branch_name, amount) depositor (customer_name, account_number) borrower (customer_name, loan_number)

Andra relationella språk, domänrelationskalkyl 5-7 Bestäm namnen på alla kunder som har ett lån, ett konto, eller båda i Perryridge grenen. { < c > l (< c, l > borrower b, a (< l, b, a > loan b= Perryridge )) a (< c, a > depositor b, n (< a, b, n > account b= Perryridge )) } Bestäm namnen på alla kunder som har ett konto i alla grenar belägna i Brooklyn. { < c > s, n (< c, s, n > customer ) x, y, z (< x, y, z > branch y= Brooklyn ) a,b (< x, y, z > account < c, a > depositor ) } Säkerhet av uttryck Uttrycket { < l, b, a > (< l, b, a > loan ) } är ej säkert Ett uttryck är säkert om alla av följande gäller: { < x 1, x 2,..., x n > P(x 1, x 2,..., x n ) } Alla värden som förekommer i tupler av uttrycket är värden från dom(p) (dvs. värdena förekommer antingen i P eller en tupel av en relation nämnd i P). För varje det existerar delformel av formen x (P 1 (x)), är delformen sann omm det existerar ett värde på x i dom(p 1 ) så att P 1 (x) är sann. För varje för alla delformel av formen x (P 1 (x)), är delformen sann omm P 1 (x) är sann för alla värden x i dom(p 1 ). Dvs. de två sista kraven garanterar att för alla och det existerar kan testas utan att behöva testa oändligt många möjligheter. customer (customer_name, customer_street, customer_city) branch(branch_name, branch_city, assets) account(account_number, branch_name, balance) loan(loan_number, branch_name, amount) depositor (customer_name, account_number) borrower (customer_name, loan_number)

Andra relationella språk, QBE 5-8 QBE - Query by Example Ett grafiskt språk som är baserat på domänrelationskalkyl. Syntaxen är två-dimensionell - systemet skapar mallar av de relationer som begärs av användare och frågorna uttrycks som exempel. QBE skelettabeller för bankexemplet: customer customer-name customer-street customer-city branch branch-name branch-city assets borrower customer-name loan-number loan loan-number branch-name amount depositor customer-name account-number account account-number branch-name balance

Andra relationella språk, QBE 5-9 Frågor på en relation Bestäm alla lånenummer vid Perryridge-grenen: loan loan-number branch-name amount Perryridge _x är en variabel (kan utelämnas i frågan ovan) P. betyder print (display) Duplikat avlägsnas per default, för att behålla duplikat används P.ALL Visa fulla detaljer för alla lån: loan loan-number branch-name amount P._y P._z alt.: förkortad notation loan loan-number branch-name amount P. Bestäm lånenummer för alla lån med ett lånebelopp större än 700: loan loan-number branch-name amount P. > 700

Andra relationella språk,qbe 5-10 Bestäm namnen på alla grenar som inte är belägna i Brooklyn: branch branch-name branch-city assets P. Brooklyn Bestäm lånenummer för alla lån givna gemensamt åt Smith och Jones: borrower customer-name loan-number Smith Jones _x Bestäm alla kunder som bor i samma stad som Jones customer customer-name customer-street customer-city Jones _y _y

Andra relationella språk,qbe 5-11 Frågor på flera relationer Bestäm namnen på alla kunder som har ett lån från Perryridge-grenen: loan loan-number branch-name amount _x Perryridge borrower customer-name loan-number P._y _x Bestäm namnen på alla kunder som har både ett konto och ett lån i banken: depositor customer-name account-number borrower customer-name loan-number _x Bestäm namnen på alla kunder som har ett konto i banken, men inte har ett lån från banken: Negation depositor customer-name account-number borrower customer-name loan-number _x Bestäm namnen på alla kunder som har åtminståne två konton: depositor customer-name account-number _x _y _y

Andra relationella språk, QBE 5-12 Villkorsboxen Tillåter uttryck av begränsningar på domänvariabler som är antingen obekväma eller omöjliga att yttrycka inom skelettabeller. Komplicerade villkor kan användas i villkorsboxar Bestäm lånenummer för alla lån givna åt Smith, åt Jones eller åt båda gemensamt: borrower customer-name loan-number _n conditions _n = Smith or _n = Jones QBE understöder följande intressanta syntax för att uttrycka alternativa värden: branch branch-name branch-city assets P. _x conditions _x = (Brooklyn or Queens) Bestäm alla kontonummer med en balans större än 1300 och mindre än 1500: account account-number branch-name balance P. _x conditions _x > 1300 _x < 1500

Andra relationella språk, QBE 5-13 Bestäm alla kontonummer med en balans större än 1300 och mindre än 1500 men inte exakt 1400: account account-number branch-name balance P. _x conditions _x = (> 1300 and < 1500 and 1400 Bestäm alla grenar som har tillgångar större än åtminstone en gren belägen i Brooklyn: branch branch-name branch-city assets Brooklyn _y _z conditions _y > _z

5-14 Sammanfattning En realtidsdatamodell är baserad på en samling tabeller. Användaren kan ställa frågor mot dessa tabeller, insätta nya tupler, stryka tupler och modifiera tupler. Det finns flera språk för att utföra dessa operationer. Tupel relationskalkylen och domän relationskalkylen är icke-procedurala språk som representerar den grundläggande styrka som krävs i ett frågespråk. Relationsalgebra är ett proceduralt språk som är ekvivalent i styrka med båda formerna av rel.kalkyl när de begränsas till säkra uttryck. Relationsalgebra och relationskalkylerna är klara, formella språk som inte lämpar sig för den tillfällige användaren av databassystem. Kommersiella DBS har därför använt språk med mera "syntaktiskt socker". De vanligaste sådana språk är SQL, QBE och Quel, och kanske Datalog.