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

Relevanta dokument
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.

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

Andra relationella språk

Relationell databasdesign

Databasdesign. E-R-modellen

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

Karlstads Universitet, Datavetenskap 1

Frågeoptimering. Frågeoptimering kapitel 14

Reducering till relationsscheman

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

Grunderna för relationsmodellen!

Lösningsförslag, tentamen i Databaser

Sample exam questions. Database exam TIG058

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

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Tentamen DATABASTEKNIK - 1DL116

Tentamen i Databasteknik

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

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

TENTAMEN DATABASKUNSKAP ITEK12

Structured query language (SQL)

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

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

Classes och Interfaces, Objects och References, Initialization

Innehåll Programability Del 2

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

För att XCOPY i SQL Server Express ska fungera måste data och logg ligga i samma mapp, vilket naturligtvis inte är så bra.

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

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

Övningar i SQL. SQLAccess.doc Ove Lundgren

Lösningar till tentamen i EDAF75

1. PLSQL 2 2. Select into

Vyer, Prepared Statements, Triggers

Skapa exempeldatabasen

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

Lösningsförslag till fiktiv tentamen för DD1370 Databasteknik och informationssystem

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

ÖVNING 10 2NF Hästnamn, KursId, StartDatum, SlutDatum KursId NY! 3NF Hästnamn, Art, NY! NY! NY! NY! KursId, StartDatum, SlutDatum KursId NY!

Databaser och Datamodellering Foreläsning IV

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

WCMS-15, Webbutvecklare CMS

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Genomgång av tentamen. Databasteknik ITHS 4/3 2016

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Föreläsning 6: Introduktion av listor

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

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

ÖVERVAKNING AV SQL SERVER

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Disposition. 1. Kopplingen mellan Processanalys (DFDdiagram) 2. Treskikts Client-Server arkitektur (Fig 1.8) 3. Data layer

Design och underhåll av databaser

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Starta MySQL Query Browser

Frågespråk och SQL. nikos dimitrakas rum 2423

Structured Query Language (SQL)

Klientprogrammering mot databaser

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

1.Lär känna MS SQL Observera. Tips. Förberedelse

Informa5onsmodellering

Exempel-Tentamen III

Typkonvertering. Java versus C

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Tentamen i Databasteknik

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

NORMALISERING. Mahmud Al Hakim

Parameteröverföring. Exempel. Exempel. Metodkropp

Viktigt! Glöm inte att skriva Tentamenskod på alla blad du lämnar in.

Klassdeklaration. Metoddeklaration. Parameteröverföring

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen. TDDB38 - Databasteknik

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Skapa en databas. Skapa en tabell. Gör man antingen genom kommandot

Introduktion till Jasmine 1.2 ODQL

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

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Normalisering. Christer Stuxberg Institutionen för Informatik och Media

Databaser - Design och programmering

Föreläsning 2: Översikt över ett databassystem

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

TDDE44 Programmering, grundkurs

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Informationssystem och Databasteknik

Databasspråket SQL - online.

732G16: Databaser - Design och programmering

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

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

Transkript:

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

Avancerad SQL, datatyper 4-1 Datatyper i SQL En datatyp, dvs. domän av möjliga värden måste associeras med varje attribut i en relation. I SQL ingår en mängd inbyggda datatyper, t.ex. integer, char, osv. (se kap 3). Dessutom finns det mera avancerade inbyggda typer, t.ex.: date datum date 2007-2-15 time klockslag time 10:15:00, time 10:15:10.45 timestamp tidsstämpel timestamp 2007-2-15 10:15:10.45 interval tidsperiod resultatet av en subtraktion av ett date-, time- eller timestamp-värde från ett annat får typen interval I uttryck måste typerna vara kompatibla cast a as b där a är en teckenstäng eller ett uttryck vars värde är en teckensträng och b är date, time eller timestamp. Funktioner, t.ex.: current_time returnerar aktuell tid extract ( fält from d ) där fält är year, month, hour, minute eller second och d är av typ date eller time returnerar innehållet i angivet fält i r.a SQL understöder två former av användardefinierade typer och domäntyper, distinkta typer och strukturerade datatyper (behandlas ej här). En typ skapas med create type-klausulen och en domän med create domain-klausulen, t.ex. create type Dollars as numeric(12,2) final create type Euros as numeric(12,2) final create domain person_name char(20) Ett datum ingå i ett attribut (Attriutvärden måste vara atomiska) SQL har stark typechecking

Avancerad SQL, datatyper 4-2 Stora Objekt-typer Stora objekt (foton, videon,...) lagras som stora objekt: blob (binary large object) är en stor samling av otolkad binär data (vars tolkning lämnas till en tillämpning utanför databassystemet) clob (character large object) är en stor samling av teckendata När en fråga returnerar ett stort objekt, returneras en pekare snarare än det stora objektet självt.

Avancerad SQL, Integritetsbegränsningar 4-3 Integritetsbegränsningar Integritetsbegränsningar vaktar mot fel i databasen p.g.a. misstag, genom att försäkra att auktoriserade förändringar i databasen ej resulterar i förlust av datakonsistens. En integritetsbegränsning specifiseras som en assertation, ett predikat som uttrycker ett villkor som databasen alltid skall satisfiera. Ex.: Ett checkkonto måste alltid ha en balans större än 10,000 En lön för en bankanställd måste vara åtminstone 10 euro i timmen En kund måste ha en (icke-null) adress. En assertation kan vara vilket predikat på databasen som helst. Databassystemet testar en assertation för giltighet då den görs samt varje gång en förändring av databasens innehåll görs som kan bryta mot assertationen. Dessa tester kan introducera en avsevärd mängd overhead Bör användas med försiktighet. Många databassystem tillåter bara speciella former av assertationer. Speciella former av assertationer som är enkla att testa är domänbegränsningar, begränsningar som berör en enda relation och s.k. referentiell integritet. Allmänt tar en assertation i SQL formen: create assertion <assertations namn> check <predikat> Eftersom SQL ej har en konstruktion för för alla X, P(X) omskrivs detta med det ekvivalenta existerar inte X så att inte P(X)

Avancerad SQL, Integritetsbegränsningar 4-4 Begränsningar på en enda relation Domänbegränsningar är den elementäraste formen av integritetsbegränsning. De testar värden insatta i databasen, och testar frågor för att frågorna skall vara förnuftiga. Klausuler: not null deklarerar att ett attribut ej kan anta värdet null Ex.: branch_name char(15) not null create domain Dollars numeric(12,2) not null primary key (A 1, A 2,..., A m ) anger att attributen bildar primärnyckeln för relationen, dvs. två tupler tillåts ej ha samma värden på alla attribut i nyckeln och ej heller värdet null unique (A 1, A 2,..., A m ) anger att attributen bildar en kandidatnyckel för relationen, dvs. två tupler tillåts ej ha samma värden på alla attribut men värdet null är tillåtet. constrain <testnamn> check (P) tillåter att domänen inskränks, dvs. försäkrar att värden i domänen uppfyller predikatet P constrain-klausulen kan bortlämnas men är nyttig för att ange vilken begränsning en uppdatering bryter mot Ex.: create table branch ( branch_name char(15) branch_city char(30) not null assets Euros primary key (branch_name) constrain asset_check check (assets >= 0) ) null tillhör varje domän create domain person_name char(20) not null create table student ( name person_name student_id char(10) degree_level char(15) primary key (student_id) check (degree_level in ( Bachelors, Masters, Doctorate )) )

Avancerad SQL, Integritetsbegränsningar 4-5 Referentiell integritet Försäkrar att ett värde, för en given mängd attribut, som förekommer i en relation även förekommer i en annan relation för en given mängd attribut. Dvs. account account_number branch_name balance......... A-101 Downtown 500........ branch branch_name branch_city assets......... Downtown Brooklyn 9000000......... Primär-, kandidat- och främmande nycklar för en relation specifiseras i SQL i create table-satsen: primary key (A 1, A 2,..., A m ) listar de attribut som bildar primärnyckeln unique key (A 1, A 2,..., A m ) listar attribut som bildar en kandidatnyckel foreign key (A 1, A 2,..., A m ) references <relationsnamn> listar attribut som bildar en främmande nyckel som refererar till relationen <relationsnamn> s primärnyckel. Låt r 1 (R 1 ) och r 2 (R 2 ) vara relationer med primärnycklarna K 1 resp. K 2. Då är en delmängd α i R 2 en främmande nyckel som refererar till K 1 i relation r 1 om det krävs att det för varje tupel t 2 i r 2 existerar en tupel t 1 i r 1 sådan att t 1 [K 1 ] = t 2 [α]. Dvs. foreign key-klausulen försäkrar att Π α (r 2 ) Π (r 1 ) K 1 create table account ( account_number char(15) branch_name char(15) balance Euros primary key (account_number) foreign key (branch_name) references branch... )

Avancerad SQL, Integritetsbegränsningar 4-6 Ex.: Summan av alla lånebelopp för varje gren måste vara mindre än eller lika med summan av alla kontobalanser vid grenen. create assertion summa_begränsning check ( not exists ( select * from branch where ( select sum(amount) from loan where loan.branch_name = branch.branch_name ) > ( select sum(balance) from account where account.branch_name = branch.branch_name ) ) för branch_name = Brighton 0 1650 Downtown 2500 500 Miamus 500 700 North Town 0 0 Perryridge 2800 400 Powal 0 0 Redwood 2000 700 Round Hill 900 350 tot.lånebelopp tot.konto inh. branch_name branch_city assets Downtown Brooklyn 9000000 Perryridge Horseneck 1700000 Redwood Palo Alto 2100000 Round Hill Horseneck 8000000 Resultatet av select-satsen innehåller tupler, dvs. resultatet är false loan loan_number branch_name amount L-11 Round Hill 900 L-14 Downtown 1500 L-15 Perryridge 1500 L-16 Perryridge 1300 L-17 Downtown 1000 L-23 Redwood 2000 L-93 Mianus 500 account account_number branch_name balance A-101 Downtown 500 A-102 Perryridge 400 A-201 Brighton 900 A-215 Mianus 700 A-217 Brighton 750 A-222 Redwood 700 A-305 Round Hill 350 branch branch_name branch_city assets Brighton Brooklyn 7100000 Downtown Brooklyn 9000000 Mianus Horseneck 400000 North Town Rye 3700000 Perryridge Horseneck 1700000 Pownal Bennington 300000 Redwood Palo Alto 2100000 Round Hill Horseneck 8000000

Avancerad SQL, Integritetsbegränsningar 4-7 Ex.: Varje lån har åtminstone en låntagare som har ett konto som innehåller minst 500. create assertion balans_begränsning check ( not exists ( select * from loan where not exists ( select * from borrower, depositor, account where loan.loan_number = borrower.loan_number and borrower.customer_name = depositor.customer_name and depositor.account_numer = account.account_numer and account.balance >= 500 ) ) ) Inget lån finns som inte har åtminstone en låntagare som har ett konto om minst 500. borrower customer_name loan_number Adams L-16 Curry L-93 Hayes L-15 Jackson L-14 Jones L-17 Smith L-11 Smith L-23 Williams L-17 depositor customer_name account_number Hayes A-102 Johnsson A-101 Johnsson A-201 Jones A-217 Lindsay A-222 Smith A-215 Turner A-305 loan loan_number branch_name amount L-11 Round Hill 900 L-14 Downtown 1500 L-15 Perryridge 1500 L-16 Perryridge 1300 L-17 Downtown 1000 L-23 Redwood 2000 L-93 Mianus 500 account account_number branch_name balance A-101 Downtown 500 A-102 Perryridge 400 A-201 Brighton 900 A-215 Mianus 700 A-217 Brighton 750 A-222 Redwood 700 A-305 Round Hill 350

Avancerad SQL, Auktorisering 4-8 Auktorisering En användare av ett databassystem måste vara auktoriserad, dvs. ha tillåtelse att accessera databasen. Användare kan ges tillåtelse att accessera och operera databasen på olika sätt - användare ges olika typer av privilegier: Auktoriseringsformer på delar av databasen: Read Insert Update Delete tillåter läsning tillåter insättning av ny data, men inte modifiering av data tillåter modifiering av data, men inte strykning av data tillåter strykning av data Auktoriseringsformer för att modifiera databasschemat (Kap. 8): Index tillåter skapande och strykning av index Resources tillåter skapande av nya relationer Alteration tillåter tillägg och strykning av attribut i en relation Drop tillåter strykning av relationer

Avancerad SQL, Auktorisering 4-9 Auktoriseringsspecifikation i SQL För att ge ett privilegium åt en användare används grant-klausulen. grant <privilegielista> on <relations- eller vynamn> to <användarlista> För att återkalla auktorisering finns revoke-klausulen: revoke <privilegielista> on <relations- eller vynamn> from <användarlista> där privilegierna är select insert read-access, dvs. möjlighet att ställa frågor möjlighet att insätta tupler update(<attributlista>) möjlighet att uppdatera m.h.a. SQL s update-sats delete all privileges, all användarna är en användar-id public roll Kap. 8 möjlighet att stryka tupler som tillåter alla giltiga användare privilegierna i privilegielistan Ex.: grant select, update(amount) on account to John, Mary Ett privilegium på en vy implicerar ej att privilegiet gäller för de underliggande relationerna. Givaren av ett privilegium måste själv hålla privilegiet på det angivna elementet i databasen (eller vara databasens administratör).

Avancerad SQL, Auktorisering 4-10 Om frågelistan inkluderar public i revoke-satsen, förlorar alla användare privilegiet utom de som givits det explicit. Om samma privilegium gavs två gånger åt samma användare av olika givare, så kan användaren fortfarande behålla privilegiet. Alla privilegier som är beroende av det fråntagna privilegiet fråntages också.

Avancerad SQL, inbäddad SQL 4-11 Inbäddad SQL SQL fördelar - nackdelar + SQL är ett kraftfullt deklarativt språk: ett SQL-program är en beskrivning av vilka data som skall framtas, snarare än en procedur som beskriver hur data skall framtas. + När man skriver en SQL select-fråga, gör man inte några antaganden om evalueringsordningen. Den kan optimeras automatiskt! Optimeraren har resurser att göra sofistikerade beslut. SQL är ej tillräckligt flexibel för vissa tillämpningar vissa frågor kan ej uttryckas i SQL Mängdfunktionerna är bara sum, avg, max, min och count icke-deklarativa aktioner (t.ex. skriva rapporter) kan ej göras från SQL SQL-frågor är ofta bara en liten del av en komplex tillämpning SQL-kommandon anropas inifrån ett kraftfullt värdspråksprogram. Två huvudsakliga angreppssätt för integrationen: Inbäddad SQL - SQL inbäddas i ett värdspråk t.ex. Java, C, Fortran och Cobol En preprocessor konverterar de inbäddade SQL-satserna till deklarationer och API-anrop för att accessera databasen vid exekvering. En vanlig kompilator används sedan för att kompilera koden. Skapa speciell API att anropa SQL-kommandon (JDBC) Dynamisk SQL - tillåter program att konstruera och ge SQL-frågor (som teckensträngar ) vid exekvering. Frågeprocesseringen utförs av databasen. API = Application Program Interface

Avancerad SQL, inbäddad SQL 4-12 SQL-satser kan referera till värdvariabler (inklusive speciella variabler som returnerar status): input: variabel som skall användas i en fråga och givits ett värde av värdprogrammet, output: variabel som används för att hämta ett värde från databasen Språkkonstruktioner (varierar från språk till språk): Koppling till databasen: EXEC SQL connect to <server> user <namn> END_EXEC Deklaration av variabler: EXEC SQL BEGIN <variabeldeklarationer> END DECLARE SECTION Satser: EXEC SQL< inbäddad SQL-sats> END_EXEC Alla variabler använda i satser måste deklareras Ex.: EXEC SQL BEGIN DECLARE SECTION char c_sname[20]; long c_sid; short c_rating; float c_age; EXEC SQL END DECLARE SECTION EXEC SQL insert into sailors(sname,sid,rating,age) values (:c_name, :c_sid, :c_rating, :c_age) END_EXEC värdspråks variabel

Avancerad SQL, inbäddad SQL 4-13 Fel / status-rapportering Varje utförd SQL-sats returnerar en statuskod + extra information i en SQL kommunikationsarea (SQLCA). Två speciella felvariabler i SQLCA: SQLCODE - SQLSTATE - 0 anger normal exekvering negativt värde anger att ett fel har skett positivt värde anger varning eller speciella villkor, t.ex. data hittades ej (definierad i SQL92-standarden) Felklass, t.ex. syntaxfel Felsubklass - implementeringsberoende Anpassningsöverensstämmelse Uppdateringar (update, insert och delete) är enkla att inbädda - de utförs, modifierar innehållet i databasen och returnerar statusinformation i SQLCA. Frågor returnerar data: SQL-relationer är multimängder av poster med ingen a priori gräns på antalet poster. Ingen sådan datastruktur existerar traditionellt i procedurala programmeringsspråk. SQL understöder en mekanism som kallas kursor (cursor) för att hantera detta problem: En kursor kan deklareras på en relation (declare-klausul) eller frågesats som genererar en relation. En kursor öppnas (open) varefter tupler, en tupel i taget, hämtas (fetch) tills alla tupler har hämtats, varefter kursorn kan stängas (close)

Avancerad SQL, inbäddad SQL 4-14 Ex.: Inifrån ett värdspråk, bestäm namnen och städerna på kunder med mera än belopp i något konto EXEC SQL declare c cursor for select customer_name, customer_city from depositor, customer, account where depositor.customer_name = customer.customer_name and depositor.account_number = account.account_number and account.balance > :belopp END_EXEC EXEC SQL open c END_EXEC orsakar att frågan evalueras loop until <SQLSTATE i SQLCA innehåller värdet 02000> EXEC SQL fetch c into :cn, :cc orsakar att värdena för en tupel END_EXEC frågeresultatet placeras... i värdspråksvariabler endloop EXEC SQL close c END_EXEC orsakar datasystemet att stryka den temporära relation som håller resultatet av frågan Obs! detaljerna varierar med värdspråket. En kursor kan användas vid uppdatering med update: declare c cursor for select * from account where branch_name = Perryridge for update update account set balance = balance + 100 where current of c