Databasteknik
Download
Report
Transcript Databasteknik
DAV B04 Databasteknik
Föreläsningsmaterial
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
1
DAV B04 Databasteknik
Introduktion
(kap 1, 2)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
2
Databaser och
databashanteringssystem
En databas (DB) är en samling av relaterad data
representerar någon aspekt av verkligheten; minivärlden
eller University of Discourse (UoD)
Databashanteringssystem (DBHS)
programvarusystem som används för att skapa och
underhålla databaser
”Ett filhanteringssystem som kan hantera komplexa
relationer mellan data och hämta och uppdatera data
enkelt och effektivt”
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
3
Databas-system
Ett databas-system (DBS) består av DBHSmjukvaran tillsammans med själva databasen
(applikationer, användare)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
4
Egenskaper hos databassystem
Data är integrerad och delad
I DBHS lagras en beskrivning av databasen
struktur, integritetsregler mm
Visst mått av dataoberoende
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
5
Datamodell
Används för att
gömma implementationsdetaljer
ge användarna en konceptuell vy av databasen
Stödjer många olika vyer av databasen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
6
(Andra) fördelar med
databas-system
Redundansen kan minskas
Säkerheten kan förbättras
Flera olika användargränssnitt
Integriteten kan upprätthållas
Stöd för återhämtning av data
Tiden för applikationsutveckling kan minskas
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
7
Nackdelar med databassystem
Ofta höga kostnader för hårdvara, mjukvara
och utbildning
Komplexiteten hos ett DBHS kan ibland
vara onödig eller ge för låg prestanda
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
8
Användare av databassystem
Databasadministratörer (DBA)
Applikationsprogrammerare
Slutanvändare
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
9
Olika typer av databassystem
1965-1980
Från ca 1980
främst hierarkiska databaser och
nätverksdatabaser
de flesta nya databas-system varit
relationsdatabaser
Från ca 1990
2015-07-16
objektorienterade och objektrelationella databaser
KaU - Datavetenskap - DAV B04 - MGö
10
Datamodeller
En samling koncept för att beskriva
databasens struktur
De integritetsregler den måste följa
Oftast också de operationer som går att
göra på databasen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
11
Högnivå-modeller
Använder koncept som ligger nära hur
användare förstår data.
Används ofta vid databasdesign.
2015-07-16
Exempel E/R-modellen
KaU - Datavetenskap - DAV B04 - MGö
12
Logiska modeller
Använder koncept som kan förstås av
användare
Ligger inte alltför långt ifrån hur data
organiseras i databasen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
13
Lågnivå-modeller
Använder koncept som beskriver i detalj hur
data är lagrad rent fysiskt
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
14
Databasens schema
Beskrivningen av databasen
Kan visas i ett schemadiagram
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
15
Exempel på schemadiagram
Extern nivå 1
Extern nivå 2
SALARIES
Eno
Pay
EMPLOYEES
Empnr
Depnr
Konceptuell nivå
EMPLOYEES
Employee_number
Department_number
salary
Intern nivå
STORED_EMP
PREFIX
EMP#
DEPT#
PAY
-
-
2015-07-16
LENGTH = 20
TYPE
TYPE
TYPE
TYPE
=
=
=
=
BYTE(6), OFFSET = 20
BYTE(6), OFFSET = 6, INDEX = EMPX
BYTE(4), OFFSET = 12
WORD, OFFSET = 16
Systemet lagrar information om samma post i tre olika nivåer.
Systemet måste också känna till att t ex empnr i den externa nivån motsvarar
employee_number på den konceptuella nivån.
Dessa motsvarigheter eller mappningar är också lagrade i
systemet.
KaU - Datavetenskap - DAV B04 - MGö
16
Databasens gränssnitt
Varje användare kommunicerar med
databasen m h a ett språk
Programmerare: konventionellt programspråk (C eller Pascal)
Slutanvändare: något frågespråk (SQL), eller kommunicerar med
databasen genom något specialdesignat menysystem
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
17
Språk
Varje språk inkluderar
ett underspråk (data sublanguage eller DSL)
som sägs vara inbäddat i värdspråket (host
language)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
18
Dataoberoende
Logiskt dataoberoende
Det går att göra ändringar i det konceptuella
schemat utan att det påverkar de externa
schemana eller applikationsprogrammen
Fysiskt dataoberoende
2015-07-16
Det går att göra ändringar i det interna schemat
utan att det påverkar det konceptuella schemat
KaU - Datavetenskap - DAV B04 - MGö
19
Beståndsdelar DSL
Data Definition Language (DDL)
den del av språket som används för att definiera
de olika objekten som databasen består av
Data Manipulation Language (DML)
2015-07-16
den del av språket som används för att
manipulera eller utföra operationer på sådana
objekt
KaU - Datavetenskap - DAV B04 - MGö
20
Applikationer skrivna av
användaren
Skrivna i något programspråk (t ex C) med
inbäddad SQL eller applikationer skrivna i
SQL
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
21
Applikationer skrivna av
någon leverantör (tools)
Kompilatorer för något frågespråk,
rapportgeneratorer, grafiska
användargränssnitt, kalkylprogram,
statistikprogram, 4GL-kompilatorer, CASEverktyg
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
22
Program som används för
att administrera databasen
Laddningsprogram, backup-program,
reorganisationsprogram, statistik- och
analysprogram
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
23
Katalogen (Data Dictionary)
Ett DBHS måste innehålla en katalog eller ett
data dictionary, där detaljerad information om
systemets olika delar lagras
information om tabeller, index, användare,
integritets- och säkerhetsregler
lagras också som tabeller, så att det går att ställa
frågor till katalogen på samma sätt som till
databasen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
24
Översikt av kursen
Genomgång av relationsmodellen
Genomgång av SQL + praktiska övningar
Konceptuell databasdesign
Fysisk databasdesign
Transaktionshantering
Databassäkerhet
Web-databaser och distribuerade databaser
Laborationer: teori, design, implementation och
användargränssnitt
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
25
DAV B04 Databasteknik
Relationsmodellen
(kap 7)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
26
Relationsmodellen
En formell teori som baserar sig på (främst)
mängdlära
predikatlogik
Föreslogs av E.F Codd 1970 i artikeln ”A
relational model for large shared data banks”
i Communications of the ACM, juni 1970
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
27
Relationsmodellen
Relation är den matematiska termen för tabell
En databas ses som en mängd relationer
2015-07-16
DB = {R1, R2,…Rn}
KaU - Datavetenskap - DAV B04 - MGö
28
Relationsmodellen
Beskriver ett sätt att se på data från en logisk
synvinkel
Tre aspekter av data
datastrukturer (eller objekt)
datamanipulation (eller operationer)
operationer är bl. a SELECT, PROJECT och JOIN
dataintegritet
2015-07-16
huvudsakligen tabeller
de viktigaste reglerna är de om entitetsintegritet och
referensintegritet
KaU - Datavetenskap - DAV B04 - MGö
29
Domäner
En domän är en namngiven mängd av skalära värden, alla av
samma typ
Varje attributs värden måste tas från exakt en underliggande
domän
En domän är vad man i moderna programspråk kallar en
datatyp
De flesta av dagens relationsdatabaser stödjer dock bara
primitiva datatyper som CHARACTER, INTEGER och FLOAT
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
30
Exempel på domäner
typedef enum{London, Paris, Athens, New
York, Stockholm, Rome} City;
2015-07-16
Detta skapar en datatyp City i ett C-program. Alla
variabler av typen City måste ha som värde en av
de uppräknade städerna
KaU - Datavetenskap - DAV B04 - MGö
31
Exempel på domäner
CREATE DOMAIN City Char(9) DEFAULT
’???’
CHECK (VALUE IN (’London’, ’Paris’,
’Athens’, ’New York’, ’Stockholm’, ’Rome’,
’???’ ) )
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
32
Relationer
En relations schema består av en mängd attribut
R = {A1, A2, …An}
Varje attribut är definierat på exakt en underliggande
domän
Attributnamnen i en relation måste vara unika
Flera attribut kan dock vara definierade på samma
domän
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
33
Relationer
En relations tillstånd eller värde vid en viss
tidpunkt benämns r och består av en mängd
tupler t (0 eller flera)
r = {t1,t2,…tn}
Varje tuple t består av en mängd värden v där
varje värde är hämtat från motsvarande
domän
2015-07-16
t = {v1,v2,…vn}
KaU - Datavetenskap - DAV B04 - MGö
34
Relationer
Antalet tupler i en relation kallas relationens
kardinalitet
Antalet attribut i en relation kallas relationens
grad
En eller flera attribut som unikt identifierar en
tuple kallas för relationens primärnyckel
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
35
Egenskaper hos en relation
Det finns inga duplicerade tupler
Tuplerna är oordnade
Attributen är oordnaded
det finns ingen ”första” eller ”sista ”tuple”
det finns inget ”första” eller ”sista” attribut
Alla värden är atomära (skalära)
2015-07-16
(detta betyder att en relation alltid är i första
normalformen)
KaU - Datavetenskap - DAV B04 - MGö
36
Olika sorters relationer
En namngiven relation är en relation som
har definierats i databasen
En basrelation är en relation som inte är en
härledd relation, utan existerar ”på riktigt”
En härledd relation är en relation som är
definierad i termer av andra relationer
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
37
Olika sorters relationer
En vy är en namngiven härledd relation som
är virtuell – den existerar bara som ett uttryck
Ett frågeresultat är en icke namngiven
härledd relation som är resultatet av att en
specifik fråga exekveras
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
38
Vyer (virtuella relationer)
En vy är en härledd relation som är
namngiven
relationen finns bara som ett uttryck och brukar
därför kallas en virtuell relation
Vyer har flera användningsområden, men det
viktigaste är att de kan användas för att
skapa logiskt dataoberoende
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
39
Logiskt dataoberoende
Ett system har logiskt dataoberoende om
användare och applikationer inte påverkas av
ändringar i databasens logiska struktur
Logiskt dataoberoende kan bara uppnås om
systemet stödjer operationer på vyer på ett
korrekt sätt!
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
40
Logiskt dataoberoende
Två aspekter
Om databasen växer, d v s om t ex ett attribut läggs till en
relation eller en relation läggs till databasen, kan dessa
ändringar gömmas med hjälp av vyer
Om databasen omstruktureras, t ex om en relation bryts
ner i två stycken, kan vyer användas för skapa illusionen
om att det fortfarande är en enda relation
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
41
Andra fördelar med vyer
Vyer tillåter att samma data kan ses av olika
användare på olika sätt samtidigt
Vyer kan användas som "macron”
Vyer kan användas för att gömma data (av
säkerhetsskäl)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
42
Integritet
Integritet handlar om att se till att data i databasen är korrekt
Vid varje tillfälle innehåller en databas en mängd datavärden som
skall representera en viss del av "verkligheten”
Vissa värden kan inte tillåtas eftersom de inte representerar
något som finns i verkligheten (t ex negativa löner)
När databasen definieras måste därför också vissa
integritetsregler läggas till. Dessa gör det möjligt för DBHS att
hindra att inkorrekta värden läggs in i databasen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
43
Exempel på integritetsregler
Integritetsregler i COMPANY-databasen
-
SALARY i relationen EMPLOYEE måste vara
större än noll
SEX i relationen EMPLOYEE måste ha värdet M
eller F
SSN i relationen EMPLOYEE måste bestå av nio
siffror
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
44
Integritetsregler
Reglerna i exemplet är databas-specifika
(eller semantiska), dvs. de gäller bara för en
specifik databas
Relationsmodellen innehåller också två
generella integritetsregler, dvs. regler som
gäller för alla databaser
2015-07-16
kandidatnycklar (och primärnycklar)
främmandenycklar
KaU - Datavetenskap - DAV B04 - MGö
45
Definition av en
kandidatnyckel
Låt R vara en relation. Då är en
kandidatnyckel för R en delmängd av Rs
mängd av attribut, säg K, så att
vid varje givet tillfälle, så har två olika tupler i R
inte samma värde på K (K är unik)
om K är sammansatt, så kan ingen del av K tas
bort och K fortfarande vara unik (K är ej
reducerbar)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
46
Enkla och sammansatta
kandidatnycklar
En kandidatnyckel som består av mer en ett
attribut sägs vara sammansatt
En kandidatnyckel som består av exakt ett
attribut sägs vara enkel
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
47
Kandidatnycklar
Kandidatnycklar definieras som mängder av attribut
Skälet till att kandidatnycklar är så viktiga är att det
enda sättet att adressera en speciell tuple är genom
att använda ett värde på en kandidatnyckel
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
48
Exempel kandidatnycklar
Ex i COMPANY:
Employee:
2015-07-16
K = {SSN}
Project:
K = {PNUMBER}
Works_on:
K = {ESSN,PNO}
KaU - Datavetenskap - DAV B04 - MGö
49
Primärnycklar och
alternativa nycklar
Primärnyckel
en nyckel som väljs från mängden
kandidatnycklar
Alternativ nyckel
2015-07-16
den återstående mängden kandidatnycklar när
primärnyckeln har tagits bort
KaU - Datavetenskap - DAV B04 - MGö
50
Sekundärnyckel
En sekundärnyckel är en nyckel som när den
används för sökning kan returnera en relation
med fler än en tuple
Ex.
SELECT SSN from EMPLOYEE
WHERE DNO = 5;
DNO är här en sekundärnyckel
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
51
Nycklar och saknad
information (nulls)
Nulls är något som används i databaser för
att handskas med saknad information
För varje attribut i en relation kan man
specificera NULLS ALLOWED eller NULLS
NOT ALLOWED
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
52
Tolkningar av NULL
Vissa logiska svårigheter
2015-07-16
värde okänt
egenskapen ej relevant
värde finns inte
värde odefinierat
KaU - Datavetenskap - DAV B04 - MGö
53
Regeln om entitetsintegritet
Ingen del av primärnyckeln i en basrelation får vara
null
I en relationsdatabas lagrar vi inte
information om någonting vi inte kan
identifiera!
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
54
Definition av
främmandenyckel (FK)
Låt R2 vara en basrelation. Då är en
främmandenyckel i R2 en delmängd av
mängden attribut i R2, säg FK, så att
det finns en basrelation R1 (R1 och R2 behöver ej
vara olika) med en kandidatnyckel CK, och
för varje tillfälle, så är varje värde på FK i
relationen R2 antingen helt och hållet null eller
identiskt med värdet på CK i någon tuple i R1
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
55
Främmandenycklar
Varje attribut i en främmandenyckel måste
definieras på samma domän som det
motsvarande attributet i den matchande
kandidatnyckeln
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
56
Främmandenycklar
Främmande-till-kandidatnyckel referenser
sägs ibland vara det "lim" som håller ihop
databasen. Dessa sägs representera
relationer mellan olika tupler
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
57
Regeln om referensintegritet
Databasen får inte innehålla några icke
matchande värden på främmandenycklar
2015-07-16
dvs. om B refererar till A, så måste A existera
KaU - Datavetenskap - DAV B04 - MGö
58
Regler för
främmandenycklar
Vad ska då systemet göra om en operation
försöker utföras som skulle bryta mot regeln
om referensintegritet ?
För varje främmandenyckel i databasen skall
databasdesignern specificera vad som skall
hända vid delete eller update av den
matchande kandidatnyckeln
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
59
Exempel på regler för
främmandenycklar
Vad skall t ex hända om någon försöker ta bort eller
uppdatera ’123456789’ i relationen EMPLOYEE?
Två möjligheter (åtminstone) finns för båda operationerna:
2015-07-16
RESTRICTED - operationerna är förbjudna om ’123456789’
också finns i WORKS_ON
CASCADES - operationerna utförs också på de tupler som
innehåller ’123456789’ i SHIPMENT
KaU - Datavetenskap - DAV B04 - MGö
60
Semantiska integritetsregler
Även kallade business rules
Gäller för en specifik databas
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
61
Exempel på semantiska
integritetsregler
Regler av typen ”Ingen kan ha en lön som är mindre
än 10000” kan specificeras med domänregler
Regler av typen ”Varje anställd måste tillhöra en
avdelning” specificeras genom att ange NOT NULL
för attributet DNO i EMPLOYEE
Regler av typen ”Ingen anställd får ha högre lön än
sin chef” kan specificeras genom triggers eller
assertions
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
62
DAV B04 Databasteknik
Relationsalgebra
(kap 7)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
63
Relationsalgebra
Operationer som görs på relationer för att
hämta data från en databas
Utdata från alla operationer är en ny relation
(algebran är sluten). Detta gör det möjligt att
skriva nästlade operationer
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
64
Operationer
De speciella relationsoperationerna
select, project, join och division
De traditionella mängdoperationerna
2015-07-16
union, intersection, difference och cartesian
product
KaU - Datavetenskap - DAV B04 - MGö
65
SELECT
SELECT returnerar en relation som består av
alla tupler från en relation som uppfyller ett
visst villkor
SELECT-operationen benämns
2015-07-16
<selection condition> (R)
KaU - Datavetenskap - DAV B04 - MGö
66
<selection condition> (R)
Den resulterande relationen har samma attribut som
R
Villkoret är av formen X <jämförelseoperator> Y, där
X är ett attributnamn och Y är ett attributnamn eller
en konstant. Flera villkor kan sättas samman med
hjälp av AND, OR och NOT
SELECT är unär, dvs indata är en relation
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
67
PROJECT
PROJECT returnerar en relation som består
av alla tupler i en relation sedan vissa attribut
har utelämnats
PROJECT-operationen benämns
2015-07-16
<attribute list> (R)
KaU - Datavetenskap - DAV B04 - MGö
68
<attribute list> (R)
Den resulterande relationen har bara de
attribut som specificeras i attributlistan
Duplicerade tupler tas bort av PROJECT
PROJECT är unär, dvs. indata är en relation
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
69
Sekvenser av operationer
Flera operationer kan kombineras för att bilda ett
algebraiskt uttryck (en fråga)
Exempel: Hämta namn och löner för anställda som
arbetar på avdelning 4:
FNAME,LNAME,SALARY ( DNO=4(EMPLOYEE) )
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
70
RENAME
Alternativt så kan man specificera temporära
relationer för varje steg:
DEPT4_EMPS DNO=4(EMPLOYEE)
R FNAME,LNAME,SALARY(DEPT4_EMPS)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
71
RENAME
Attribut i den resulterande relationen kan ges andra
namn om man så vill:
DEPT4_EMPS DNO=4(EMPLOYEE)
R(FIRSTNAME,LASTNAME,SALARY)
FNAME,LNAME,SALARY(DEPT4_EMPS)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
72
Traditionella
mängdoperationer
Dessa binära operationer fungerar som
motsvarande operationer i matematiken
En viktig skillnad
2015-07-16
operanderna måste vara typkompatibla, dvs.
bestå av samma slags tupler (gäller ej produkt)
KaU - Datavetenskap - DAV B04 - MGö
73
UNION: R1 R2
Unionen av två typkompatibla relationer R1
och R2 är
en relation med samma huvud som både R1 och
R2
med en kropp som består av mängden av alla
tupler t som finns i R1 eller i R2 eller i båda
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
74
INTERSECTION: R1 R2
Snittet av två typkompatibla relationer R1 och
R2 är
en relation med samma huvud som både R1 och
R2
med en kropp som består av mängden av alla
tupler t som finns i både R1 och R2
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
75
DIFFERENCE: R1 – R2
Differensen mellan två typkompatibla
relationer R1 och R2, i den ordningen, är
en relation med samma huvud som både R1 och
R2
och med en kropp som består av mängden av alla
tupler t som finns i R1 men inte i R2
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
76
CARTESIAN PRODUCT:
R1 X R2
Den kartesiska produkten av två relationer
R1 och R2 ger en relation med alla möjliga
kombinationer av tupler från R1 och R2
2015-07-16
är meningslös i sig själv
KaU - Datavetenskap - DAV B04 - MGö
77
THETA JOIN
Är det samma som en kartesisk produkt följt
av en SELECT-operation
THETA JOIN benämns
R1<join condition>R2
Oftast jämförs ett attribut i R1 med ett i R2 i
villkoret
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
78
EQUIJOIN
Kallas operationen om villkoret är ”=”
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
79
NATURAL JOIN
är det samma som EQUIJOIN, men där joinattributet i R2 är borttaget i resultatrelationen
NATURAL JOIN benämns
2015-07-16
R1 * R2
R1 * <join attribute1>, <join attribute2> R2
KaU - Datavetenskap - DAV B04 - MGö
80
DIVISION
tar två relationer, en binär och en unär, och
returnerar en relation som består av alla
värden som ett av den binära relationens
attribut har och där det andra attributet
matchar alla värden i den unära relationen
DIVISION benämns
2015-07-16
R1 R2
KaU - Datavetenskap - DAV B04 - MGö
81
DAV B04 Databasteknik
SQL
(kap 8)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
82
SQL - frågespråk för
relationsdatabaser
4GL, mycket kraftfullt jämfört med t ex
C/C++ och FORTRAN
SEQUEL
SQL (Structured Query Language)
SQL-86 SQL1 (ANSI-standard)
SQL-92 SQL2
SQL3
2015-07-16
kommer bl.a. att vara objektorienterat
KaU - Datavetenskap - DAV B04 - MGö
83
SQL i kursen
Olika dialekter, vi använder
Microsoft Jet SQL (separat kompendium)
MySQL
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
84
Beståndsdelar SQL
Data Definition Language (DDL)
med hjälp av kommandon i DDL skapar man och
kan modifiera scheman, tabeller, villkor och vyer
Manipulation Language (DML)
2015-07-16
kommandona i DML möjliggör läsning, skrivning,
insättning, radering och förändring av
tabellinnehåll
KaU - Datavetenskap - DAV B04 - MGö
85
SQL uttryck
Tabell = relation
Rad = tuple
Kolumn = attribut
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
86
DDL-operationer
CREATE
DROP
Skapa tabell, schema, vy, domän…
Radera tabell eller…
ALTER
2015-07-16
Lägg till eller ta bort i tabell
KaU - Datavetenskap - DAV B04 - MGö
87
DML-operationer
SELECT
INSERT
Skriv in rad(er)
DELETE
Välj ut data ur tabell(er)
Radera rad(er)
UPDATE
2015-07-16
Modifiera kolumner i rad(er)
KaU - Datavetenskap - DAV B04 - MGö
88
DAV B04 Databasteknik
ER-diagram
(kap 3)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
89
Datamodellering
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
90
ER (Entity Relationship) diagram
Konceptuell datamodellering
ER modellen beskriver data utifrån
2015-07-16
entiteter
attribut
relationer
KaU - Datavetenskap - DAV B04 - MGö
91
Entiteter
”Sak” i verkliga världen
2015-07-16
existerar fysiskt, ex bil, student
existerar konceptuellt, ex univ.kurs, jobb
KaU - Datavetenskap - DAV B04 - MGö
92
Entiteter och attribut
Varje entitet har attribut, dvs. egenskaper som
beskriver entiteten
2015-07-16
Student: namn, ålder, adress...
KaU - Datavetenskap - DAV B04 - MGö
93
Attributens värde
En existerande entitet har värden på sina
attribut
student s1: ”Kalle”, 47, ”Karlstad”
Denna typ av data utgör majoriteten av
information sparad i en databas!
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
94
Sammansatta attribut
Kan delas ned i mindre delar som har oberoende
betydelse
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
95
Mångvärdes attribut
Vanligtvis har ett attribut bara ett värde, men...
2015-07-16
Vad händer om ex. en bil har tre olika färger?
KaU - Datavetenskap - DAV B04 - MGö
96
Härledda attribut
Exempelvis kan man härleda en persons ålder från
personnummer och nuvarande år
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
97
Entitetstyper
Definierar en mängd av entiteter som har
samma attribut (varje entitet i mängden har
dock egna värden på attributen)
En entitetstyp beskrivs därmed med hjälp av
entitetens namn och dess attribut
2015-07-16
STUDENT: Namn, ålder, adress
KaU - Datavetenskap - DAV B04 - MGö
98
Entitetsmängder
Samlingen/mängden av alla entiteter av en viss
entitetstyp i databasen vid någon given tid
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
99
Nyckelattribut
Varje entitetstyp skall ha ett attribut vars värde skall
vara unikt för varje enskild entitet i entitetsmängden
2015-07-16
Student: Personnummer, namn, ålder
KaU - Datavetenskap - DAV B04 - MGö
100
Relationer mellan entiteter
Som i: samband mellan entiteter
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
101
Relationer och attribut
En relation kan också ha attribut
2015-07-16
Exempelvis: en student på en kurs har ett betyg...
KaU - Datavetenskap - DAV B04 - MGö
102
Kardinalitet på relationer
1:1 förhållande
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
103
Kardinalitet på relationer
1:N förhållande
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
104
Kardinalitet på relationer
N:M förhållande
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
105
DAV B04 Databasteknik
Mappning mellan ER-diagram och
relationsmodellen
(kap 9)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
106
Mappning ER-diagram /
relationsmodellen
Används för att skapa
den logiska
databasdesignen som
baseras på den
konceptuella designen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
107
Algoritm
Finns en algoritm för att stegvis utföra
mappningen
2015-07-16
denna finns mer detaljerat beskriven i kapitel 9.1
KaU - Datavetenskap - DAV B04 - MGö
108
Starka entiteter
Steg 1 ~
2015-07-16
varje stark entitetet blir en basrelation där
primärnyckeln i relationen motsvarar
nyckelattributet(en) i entiteten
KaU - Datavetenskap - DAV B04 - MGö
109
Svaga entiteter
Steg 2 ~
bildar sin primärnyckel genom att ta
primärnyckeln från ”ägande” relationen (som
främmandenyckel) och egen partiell nyckel tillsammans
Reglerna för främmandenycklar i en relation mellan en
svag och en stark entitet måste vara
DELETE CASCADES
UPDATE CASCADES
Visar på beroendeförhållandet mellan entiteterna
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
110
1:1 förhållanden
Steg 3 ~
välj en av entiterna och lägg in primärnyckeln i
den ena som främmandenyckel i den andra
eventuella attribut till relationen mellan dessa bör
hamna på samma sida
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
111
1:N förhållanden
Steg 4 ~
introducera primärnyckeln från ”en” relationen
som främmandenyckel i relationen på ”många”
sidan
eventuella attribut till relationen (sambandet)
mellan dessa två entiteter migreras till ”många”
sidan
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
112
N:M förhållanden
Steg 5 ~
varje många-till-många relation (samband) blir en
basrelation
varje sådan basrelation måste innehålla minst en
främmandenyckel från varje deltagare i relationen
primärnyckeln kan skapas genom kombinationen av
främmandenycklarna eller genom att introducera ett nytt
attribut
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
113
Attribut
Steg 6 ~
Varje egenskap i för en entitet blir ett attribut i den
relation den tillhör.
Undantaget är om attributet för entiteten är ett
”mångvärdes” attribut, i så fall skapas en ny
relation
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
114
Värdedomäner
Skapas för alla attributens värdemängder
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
115
DAV B04 Databasteknik
Praktisk databasdesign
(kap 16)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
116
Sammanhang
Informationssystem (IS)
Livscykel: Makro
Databassystem (DBS)
2015-07-16
Livscykel: Mikro
KaU - Datavetenskap - DAV B04 - MGö
117
Informationssystems livscykel
(Makro livscykel)
1)
Analys av möjliga krav (Feasibility analysis)
2)
Kravanalys och insamling av krav
3)
Design
4)
Implementation
5)
Testing/kontroll och acceptanstest
6)
Utplacering, drift och underhåll
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
118
Databassystems livscykel
(Mikro livscykel)
1)
Definition av systemet
2)
Databasdesign
3)
Databas implementation
4)
Inladdning av data eller konvertering
5)
Konvertering av applikationer
6)
Testing och kontroll
7)
Drift
8)
Övervakning och underhåll
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
119
Steg 2 – databasdesign
Mål:
klara av användarnas och applikationernas krav
på informationsinnehåll
naturlig och lättförstådd struktur på informationen
klara av ställda krav på prestanda, ex svarstid
Består av sex olika faser...
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
120
Faser i databasdesignen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
121
Faser i databasdesignen
1)
Insamling och analys av krav
2)
Konceptuell databasdesign
Exempel ER-modellen
3)
Val av DBHS
4)
Mappning av datamodeller (logisk databasdesign)
exempel, mappning från ER modellen till relationsmodellen
Fysisk databasdesign
5)
lagringsstrukturer, index
Implementering av databassystemet
6)
2015-07-16
impl. av databas och applikationer, trimning (tuning)
KaU - Datavetenskap - DAV B04 - MGö
122
Fas 1 – Insamling och analys
av krav
Identifikation av applikationsområden och
användargrupper
Studier av existerande dokumentation
Studier av nuvarande operativsystem och planerad
användning av informationen
Skriftliga svar på frågor från databasens potentiella
användare
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
123
Fas 2 – Konceptuell
databasdesign
2 parallella aktiviteter
Datamodellering
datamodellering
transaktionsdesign
centraliserad vs. vy integration
Transaktionsdesign
2015-07-16
Specar funktionella krav på applikationerna
Hämtnings-/uppdaterings/blandade transaktioner
KaU - Datavetenskap - DAV B04 - MGö
124
Fas 3: Val av DBHS
Exempel på faktorer som spelar in
relationsdatabas, objektdatabas?
utvecklingsverktyg?
vad kostar det att:
2015-07-16
införskaffa all mjukvara?
underhålla mjukvaran?
införskaffa eventuell ny hårdvara?
skapa databasen alt. konvertera från gammal?
skaffa eventuell ny personal?
träna personalen så att de kan använda DBHS?
ha databassystemet i drift?
KaU - Datavetenskap - DAV B04 - MGö
125
Fas 4 – Mappning mellan
datamodeller
Kan ske i två steg
system-o-beroende mappning
systemberoende mappning
ER-modell -> relationsmodellen
DBHS har olika kännetecken och restriktioner som
man behöver anpassa sig till
Resultatet blir DDL uttryck i det språk som
utvald DBHS hanterar
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
126
Fas 5 – Fysisk databasdesign
Utifrån vad DBHS kan erbjuda väljs lämpliga
lagringsstrukturer, åtkomstvägar, organisation av
filer, indexering
Kriterier som påverkar
2015-07-16
svarstid
utrymme
transaktionsgenomströmming (medelvärde
transaktioner/minut)
KaU - Datavetenskap - DAV B04 - MGö
127
Fas 6 – implementation och
trimning
DDL och SDL uttrycken kompileras och
används för att skapa databasens scheman
och (tomma) databasfiler. Eventuellt sker
laddning/konvertering av data
görs av DBA + databasdesigner
Transaktioner implementeras genom att utgå
från de konceptuella beskrivningarna av
transaktionerna
2015-07-16
görs av applikationsprogrammerare
KaU - Datavetenskap - DAV B04 - MGö
128
Fysisk databasdesign i
relationsdatabaser
Brukar börja med att man tar fram de
viktigaste faktorerna och den information man
har om dem och analyserar dessa...
2015-07-16
Frågor, transaktioner, applikationer
KaU - Datavetenskap - DAV B04 - MGö
129
Fysisk databasdesign i
relationsdatabaser
Analys av
2015-07-16
frågor och transaktioner
frekvens på anrop av frågor och transaktioner
tidskrav på frågor och transaktioner
frekvens på uppdateringsoperationer
indexering (accessvägar)
KaU - Datavetenskap - DAV B04 - MGö
130
Databastrimning i
relationsdatabaser
Görs för att applikationer ska köra snabbare,
få ned svarstider, förbättra genomströmning
av transaktioner
Fixas genom att trimma
2015-07-16
index
databasdesignen
frågor
KaU - Datavetenskap - DAV B04 - MGö
131
DAV B04 Databasteknik
Normalisering och funktionella
beroenden
(kap 14)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
132
Riktlinjer när man vill
skapa en databas
1)
Designa så att det är lätt att förstå
innebörden. Kombinera inte attribut från
olika entitetstyper i samma tabell
2)
Designa så att inte problem uppstår vid
insättning, borttagning eller modifiering
3)
Undvik värden i basrelationer som ofta blir
NULL. Skapa istället en ny relation
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
133
Normalisering
Uppdelning i flera relationer
Innebär att redundansen i databasen är minskad
(eliminerad?)
Ingen information försvinner vid normaliseringen
Inga falska samband skapas om man gör
NATURAL JOIN på tabellerna
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
134
Funktionellt beroende (FD)
Functional Dependency
Är en många-till-en relation från en mängd
attribut till en annan i en given relation
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
135
Definition av FD
Givet en relation R, så är attributet Y i R
funktionellt beroende av attributet X i R omm
varje X-värde i R är associerat med precis ett
Y-värde i R (vid varje tillfälle). Attributen X
och Y kan vara sammansatta
2015-07-16
R.X R.Y
KaU - Datavetenskap - DAV B04 - MGö
136
Exempel på funktionellt
beroende
Relationen EMP_PROJ (i Fig. 14.3b, sida 470) har
följande FD:
SSN ENAME
PNUMBER {PNAME, PLOCATION}
{SSN, PNUMBER} HOURS
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
137
Exempel på funktionellt
beroende
Andra raden skulle också kunna delas upp i
PNUMBER PNAME
PNUMBER PLOCATION
Även den triviala relationen finns
PNUMBER -> PNUMBER
2015-07-16
osv.
KaU - Datavetenskap - DAV B04 - MGö
138
Determinant
Vänstra sidan av FD
Determinanten kan vara primärnyckel och
därmed också kandidatnyckel men måste
inte vara det (BCNF – 3NF)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
139
Dependent
Den högra sidan av ett FD
Alla attribut i en relation är funktionellt
beroende av primärnyckeln
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
140
Definition av fullständigt
funktionellt beroende
Attributet Y i relationen R är fullständigt
funktionellt beroende av attributet X i R om
det är funktionellt beroende av X och det inte
finns någon äkta delmängd Z av X sådan att
Y är funktionellt beroende av Z
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
141
Exempel på fullständigt
funktionellt beroende
Relationen EMP_PROJ (i fig. 14.3b, sida 470)
Här är {SSN, PNUMBER} primärnyckel (PK), vilket
gör att alla attribut kan bestämmas när man vet PK:s
värde. Attributen ENAME, PNAME och PLOCATION är
alltså funktionellt beroende av PK men inte
fullständigt funktionellt beroende eftersom följande
gäller:
SSN ENAME
PNUMBER PNAME
PNUMBER PLOCATION
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
142
1:a normalformen (1NF)
En relation är i första normalformen (1NF)
omm de underliggande enkla domänerna
innehåller endast skalära värden
2015-07-16
figur 14.8 och 14.9
KaU - Datavetenskap - DAV B04 - MGö
143
2:a normalformen (2NF)
En relation är i andra normalformen (2NF)
omm relationen är i 1NF och varje attribut
som inte ingår i primärnyckeln är
fullständigt funktionellt beroende av den
2015-07-16
figur 14.10 (a)
KaU - Datavetenskap - DAV B04 - MGö
144
3:e normalformen (3NF)
En relation är i tredje normalformen (3NF)
omm relationen är i 2NF och varje attribut
som inte ingår i primärnyckeln är icketransitivt beroende av primärnyckeln
2015-07-16
figur 14.10 (b)
KaU - Datavetenskap - DAV B04 - MGö
145
Boyce-Codd normalform
(BCNF)
En relation är i Boyce-Codd normalform
(BCNF) omm varje determinant är en
kandidatnyckel (dvs. skulle kunna vara
primärnyckel)
2015-07-16
figur 14.13
KaU - Datavetenskap - DAV B04 - MGö
146
Transitivt beroende
I EMP_DEPT (i fig. 14.10b) är SSN
primärnyckel och det innebär att alla
attribut inklusive DNAME och DMGRSSN är
funktionellt beroende (FD) av SSN
Det finns ytterligare beroenden i tabellen: Om
man vet DNUMBER vet man också DNAME
och DMGRSSN
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
147
Transitivt beroende
Vi har ett transitivt beroende från SSN via
DNUMBER till DNAME och DMGRSSN
SSN DNUMBER {DNAME, DMGRSSN}
Transitiva beroenden elimineras genom att
splittra tabellen (PROJECT).
2015-07-16
fig. 14.10
KaU - Datavetenskap - DAV B04 - MGö
148
Vandra mellan
normalformerna
Allmänt gäller att varje steg till högre
normalform görs med PROJECT (splittring av
tabell) och tabellen kan återskapas via
NATURAL JOIN. Inga informationsförluster
uppstår vid dessa operationer
2015-07-16
ex. finns i figur 14.2 och 14.4
KaU - Datavetenskap - DAV B04 - MGö
149
Varning!
Vid olämplig design kan falska tupler uppstå
vid NATURAL JOIN
2015-07-16
ex. figur 14.3, 14.5 och 14.6
KaU - Datavetenskap - DAV B04 - MGö
150
DAV B04 Databasteknik
Indexering
(kap 6)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
151
Lagring av databaser på
sekundärminne
Att läsa/skriva på sekundärminne (hårddisk)
är en långsam process jämfört med
operationer i primärminnet
Antalet diskaccesser (I/O) bör därför
minimeras
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
152
Skrivning och läsning från
sekundärminne
Skrivning och läsning sker i form av sidor (=
page/block) med standardstorlek, t ex 1024 bytes
Databasposterna är ofta mindre än sidorna, t ex 100
bytes, vilket gör att man läser/skriver flera poster (i
detta fall 10) på samma gång
Önskvärt är att relaterade poster lagras nära
varandra för att minska antalet accesser
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
153
Hämta en post från
databasen
1)
DBHS bestämmer vilken lagrad post som behöver hämtas och
ber filhanteraren att hämta posten
2)
Filhanteraren bestämmer vilken sida (block) som posten finns
på och ber diskhanteraren att hämta den sidan
3)
Diskhanteraren bestämmer fysisk adress och ber om data från
denna adress
4)
Data läses av diskhanteraren
5)
Den lagrade sidan returneras till filhanteraren
6)
Den lagrade posten returneras till DBHS
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
154
Exempel på
lagringsstrukturer
Sekventiell lagring, osorterad/sorterad
Indexering
Hashing
B-träd, B+-träd
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
155
Sekventiell lagring
Osorterat
plus: insättning av nya poster enkelt, sist eller
första lediga
minus: leta upp en post är besvärligt, sekventiell
sökning
Sorterat
2015-07-16
plus: binärsökning ger mycket snabbare access
minus: insättning av nya poster medför att poster
måste flyttas
KaU - Datavetenskap - DAV B04 - MGö
156
Hashing
Hashing innebär att adressen till en post
bestämmes med hjälp av en hash-funktion
vars indata är något av fälten i posten
2015-07-16
plus: direktaccess
plus: minskat adressintervall
minus: kan ge kollisioner som måste
specialbehandlas
KaU - Datavetenskap - DAV B04 - MGö
157
Indexering
Indexering innebär att man bestämmer en viss
ordningsföljd på posterna i datafilen. Index kan
knytas till vilket fält som helst eller en kombination
av fält
2015-07-16
Primary indexes
Clustering indexes
Secondary indexes
Multilevel indexes
Dynamic multilevel indexes, B-trees, B+-trees
KaU - Datavetenskap - DAV B04 - MGö
158
Primary indexes
Index knutet till primärnyckel
dense index (= index till varje post)
nondense (= ej index till varje post).
Indexfil och datafil
2015-07-16
fig. 6.1 och exampel 1, sida 159
KaU - Datavetenskap - DAV B04 - MGö
159
Clustering indexes
Index knutet till ett icke-nyckelfält som har
dubbletter
En pekare från indexfilen för varje distinkt
värde (första blocket) på clustering-fältet
2015-07-16
fig. 6.2 och 6.3
KaU - Datavetenskap - DAV B04 - MGö
160
Secondary indexes
Indexfil med två värden, indexfält och pekare
till post/block
En datafil kan ha många sekundärindex, ett
för varje attribut
2015-07-16
Fig. 6.4 och exempel 2, sida 162. Index till
osorterad fil men på ett fält med unika värden
Fig. 6.5 visar indexfil till fält med ej unika värden
KaU - Datavetenskap - DAV B04 - MGö
161
Multilevel indexes
Index med flera nivåer
fig. 6.6 och exempel 3, sida 167
Mycket snabb access men i likhet med alla
ovanstående varianter är det problem med
insättning av nya poster och borttagning av
befintliga poster
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
162
Dynamic Multilevel Indexes
using B-trees and B+-trees
B-träd som finns i olika varianter möjliggör att
dynamiskt lägga till och ta bort poster utan
att ”slösa med minnesutrymme”
Träden är balanserade, dvs. alla löv ligger på
samma nivå
Nyckelvärdena är ”upphängda” i
sorteringsordning i trädet
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
163
Skillnaden mellan B-träd
och B+-träd
I ett B-träd kan datapekare finnas i alla inre
noder och i löven medan B+-träd endast har
datapekare i löven
Dessutom finns pekare mellan löven i B+-träd
vilket möjliggör sekventiell sökning
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
164
B-träd av ordningen p
Varje inre nod i trädet (fig. 6.10a) är på
formen <P , <K , Pr >, P , , <K , Pr >, …, , <K , Pr >, P > där
q <= p
1
1
1
2
2
2
q-1
q-1
q
Varje Pi är en trädpekare och varje Pri är en
datapekare till den post (eller block som
innehåller) vars nyckelvärde är Ki
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
165
B-träd av ordningen p
Inom varje nod gäller K1 < K2 < … < Kq-1
För alla sökvärden X i det subträd som
utpekas av Pi gäller
2015-07-16
Ki-1 < X < Ki, för 1 < i < q
X < Ki, för i = 1
Ki-1 < X för i = q
KaU - Datavetenskap - DAV B04 - MGö
166
B-träd av ordningen p
Varje nod har högst p trädpekare
Varje nod, förutom roten och löven, har
åtminstone [(p/2)] trädpekare. Roten har
minst 2 trädpekare såvida den inte är ensam
nod i trädet
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
167
B-träd av ordningen p
En nod med q trädpekare, q <= p, har q-1
söknyckelvärden och därmed också q-1
datapekare
Alla löv ligger på samma nivå. Löven har
samma struktur som inre noder men deras
trädpekare är NULL
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
168
B+-träd av ordningen p
Inre noder definieras enligt
varje inre nod i trädet är på formen
<P1, K1, P2, K2, …, Pq-1, Kq-1 , Pq> där q <= p
2015-07-16
varje Pi är en trädpekare
Inom varje nod gäller K1 < K2 < … < Kq-1
KaU - Datavetenskap - DAV B04 - MGö
169
B+-träd av ordningen p
För alla sökvärden X i det subträd som utpekas av
Pi gäller
2015-07-16
Ki-1 < X <= Ki, för 1 < i < q
X <= Ki, för i = 1
Ki-1 < X för i = q
Varje inre nod har högst p trädpekare
KaU - Datavetenskap - DAV B04 - MGö
170
B+-träd av ordningen p
Varje inre nod, förutom roten, har åtminstone
[(p/2)] trädpekare. Roten har minst 2 trädpekare
såvida den inte är ensam nod i trädet
En nod med q trädpekare, q <= p, har q-1
söknyckelvärden
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
171
B+-träd av ordningen p
Lövnoder definieras enligt
Varje löv har utseendet
<<K1, Pr1>, <K2, Pr2>, …, , <Kq-1, Prq-1>, Pnext> där
2015-07-16
q <= p
Pri är en datapekare och Pnext pekar på nästa
lövnod i trädet
KaU - Datavetenskap - DAV B04 - MGö
172
B+-träd av ordningen p
Inom varje nod gäller K1 < K2 < … < Kq-1, q <= p
Varje Pri är en datapekare som pekar på den post
(eller block) vars söknyckelvärde är Ki
Varje lövnod har åtminstone [(p/2)] trädpekare
Alla lövnoder är på samma nivå
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
173
DAV B04 Databasteknik
Transaktionshantering
(kap 19)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
174
Transaktion
Logisk enhet i databasbearbetning
Har en början och ett slut
Kan innehålla flera delar, t ex read(x),
modify(x) och write(x)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
175
read(x)
Kan ses som 3 steg
hitta (beräkna) adress till den sida (block) där x
finns
kopiera sidan till buffert i PM
kopiera x från buffert till programvariabel x
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
176
write(x)
Kan ses som 4 steg
hitta adress till den sida (block) där x finns
kopiera sidan till buffert i PM
kopiera programvariabel x till buffert
lagra den uppdaterade sidan på sekundärminne
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
177
Concurrency
Innebär samtidig/jämlöpande körning av flera
transaktioner
2015-07-16
kan ställa till problem om de jobbar mot samma
datamängd
KaU - Datavetenskap - DAV B04 - MGö
178
Förlorade uppdateringar
/ Lost Update Problem
X är initialt lika med 80
Transaktion T1 vill flytta 5 (= N) bokningar
från X till Y
Transaktion T2 vill öka X med 4 (= M)
bokningar
X borde bli 79 men värdet blir 84
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
179
Tillfälliga uppdateringar /
Temporary Update Problem
X minskas av T1
T2 läser x och uppdaterar X
Men sedan misslyckas T1 och minskningen
görs ogjord
Därmed har T2 använt ett felaktigt värde
(dirty read)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
180
Felaktiga summeringar /
Incorrect Summary Problem
T3 summerar variablerna A, B, …,Y
Samtidigt ska T1 föra över N enheter från X
till Y
T3 summerar förändrat X-värde men
oförändrat Y-värde
Summan är ej korrekt
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
181
Fel som kan inträffa under
transaktioner
Datorfel - hårdvaru-, mjukvaru-, nätverksfel
Transaktionsfel
Exceptions
visar att transaktionen ej kan utföras på ett korrekt sätt eller
deadlock inträffar
Diskfel
t ex data för transaktion saknas, underskott
Concurrency control
t ex division med noll
read/write, headcrash
Katastrof
2015-07-16
brand, fel tape
KaU - Datavetenskap - DAV B04 - MGö
182
Tillståndsdiagram
5 olika tillstånd
2015-07-16
ACTIVE
PARTIALLY COMMITTED
COMMITTED
FAILED
TERMINATED
KaU - Datavetenskap - DAV B04 - MGö
183
Loggning
Allt som händer lagras på en loggfil som
skrivs till disk
Varje transaktion har ett transaktions-ID, T
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
184
Operationer
Hur mycket behöver lagras för varje typ?
2015-07-16
[start_transaction, T]
[write_item, T, X, old_value, new_value]
[read_item, T, X]
[commit, T]
[abort, T]
KaU - Datavetenskap - DAV B04 - MGö
185
Varför logga systemet?
Eftersom alla permanenta operationer loggats kan
ett korrekt tillstånd erhållas med hjälp av loggen om
man vet läget vid en tidigare tidpunkt (check-point)
Vi kan göra undo på de transaktioner som inte
fullföljdes genom att backa i loggen
Vi kan göra redo på transaktioner som inte gjorts
commit på genom att gå framåt i loggen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
186
Önskvärda egenskaper hos
transaktioner
ACID-egenskaper:
2015-07-16
Atomicity
en transaktion skall utföras helt eller inte alls
Consistency preservation
transaktionen gör att databaser växlar mellan konsistenta
tillstånd
Isolation
transaktionen skall inte påverkas av andra transaktioner
Durability or permanency
ändringar är permanenta
KaU - Datavetenskap - DAV B04 - MGö
187
Transaktionsscheman
Med schema (schedule eller history) avses
en beskrivning av ordningsföljden mellan de
operationer (read/write) som görs för att antal
transaktioner som använder gemensamma
data
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
188
Seriella och icke-seriella
scheman
Seriellt schema (serial)
Icke-seriellt (nonserial)
en transaktion i taget aktiv och först när den
avslutats (commit/abort) kan nästa börja
dvs. inte en transaktion i taget
Automatiskt seriellt
2015-07-16
om transaktionerna är oberoende av varandra
KaU - Datavetenskap - DAV B04 - MGö
189
Hur kan man avgöra om ett
schema är seriellt eller inte?
För varje transaktion Ti som ingår i schemat S
Skapa en nod som heter Ti i en precedensgraf
För varje fall i S där Tj
2015-07-16
utför en read_item(X) efter att Ti utfört en
write_item(X)
skapa en kant (Ti Tj ) i precedensgrafen
KaU - Datavetenskap - DAV B04 - MGö
190
Hur kan man avgöra om ett
schema är seriellt eller inte?
För varje fall i S, där Tj
utför en write_item(X) efter att Ti utfört en
read_item(X)
skapa en kant (Ti Tj ) i precedensgrafen
För varje fall i S, där Tj
2015-07-16
utför en write_item(X) efter att Ti utfört en
write_item(X)
skapa en kant (Ti Tj) i precedensgrafen
KaU - Datavetenskap - DAV B04 - MGö
191
Hur kan man avgöra om ett
schema är seriellt eller inte?
Schemat S är serialliserbart omm
precedensgrafen saknar cykler
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
192
DAV B04 Databasteknik
Concurrency Control
(kap 20)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
193
Tekniker för concurrency
control
Olika slags lås (locks)
Tidsstämpling (timestamps)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
194
Binära lås
2 tillstånd, låst (locked) och olåst (unlocked)
Ett lås till varje databasvariabel (post, item) X
Växlar tillstånd med lock_item(X) och unlock_item(X)
Viktigt att det är atomära (odelbara) operationer
Om låset redan är låst läggs man i väntekö
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
195
Regler för lås
En transaktion T måste utföra operationen
lock_item(X) innan någon read_item(X) eller
write_item(X) utförs i T
En transaktion T måste utföra operationen
unlock_item(X) efter att alla read_item(X)
eller write_item(X) utförts i T
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
196
Regler för lås
En transaktion T får inte utföra operationen
lock_item(X) om den redan har ett lås på X
En transaktion T får inte utföra operationen
unlock_item(X) om den inte har ett lås på X
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
197
Regler för lås
Reglerna garanterar att högst en transaktion i
taget kan låsa en variabel!
I databashanteraren finns en tabell där man
för varje lås anger
2015-07-16
< data item, LOCK, transaktion som håller låset >
KaU - Datavetenskap - DAV B04 - MGö
198
Delade/exklusiva lås
Shared/Exclusive (or Read/Write) Locks
Läsning av samma datapost kan tillåtas för
flera transaktioner, låset kan delas, en
räknare vet hur många transaktioner som låst
(läser) samma post
3 tillstånd, read-locked, write-locked och
unlocked
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
199
Regler för delade/exklusiva
lås
En transaktion T måste utföra operationen
read_lock(X) eller write_lock(X) innan någon
read_item(X) utförs i T
En transaktion T måste utföra operationen
write_lock(X) innan någon write_item(X) utförs i T
En transaktion T måste utföra operationen unlock(X)
efter att alla read_item(X) och write_item(X) är
utförda
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
200
Regler för delade/exklusiva
lås
En transaktion T får inte utföra operationen
read_lock(X) om den redan har ett lås på X
En transaktion T får inte utföra operationen
write_lock(X) om den redan har ett lås på X
En transaktion T får inte utföra operationen
unlock(X) om den inte har ett lås på X
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
201
Two-phase locking protocol
Alla låsningar (read_lock och write_lock)
föregår första unlock i transaktionen
Garanterar serialiserbarhet
Dock kan deadlock inträffa
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
202
Deadlock Prevention
Protocols
Varje transaktion förses med tidstämpel TS(T)
Antag att Ti försöker låsa X som redan är låst av Tj
Nu finns två varianter, i båda dessa varianter
undviks deadlock
2015-07-16
wait-die
wound-wait
KaU - Datavetenskap - DAV B04 - MGö
203
wait-die
Om TS(Ti) < TS(Tj), (dvs. Ti är äldre än Tj)
så får Ti vänta
annars (dvs. Ti är yngre än Tj) avbryts Ti (abort)
och återstartas senare med samma tidstämpel
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
204
wound-wait
Om TS(Ti) < TS(Tj), (dvs. Ti är äldre än Tj)
så avbryt Tj (Ti wounds Tj ) och återstarta senare
med samma tidstämpel
annars (dvs. Ti är yngre än Tj) låt Ti vänta
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
205
Utan tidstämpel
No waiting
Om transactionen inte kan få ett lås avbryts den
omedelbart och återstartas efter viss fördröjning utan att
kontrollera om deadlock kommer att uppstå
Cautious waiting
2015-07-16
Antag att Ti försöker låsa X men att X redan är låst av Tj
Om Tj inte är blockerad (inte väntar på någon annan låst
variabel) så blockeras Ti och får vänta annars avbryts Ti
KaU - Datavetenskap - DAV B04 - MGö
206
Deadlock Detection and
Timeouts
Upptäck deadlock genom att konstruera waitfor graph
Deadlock omm det finns cykler i grafen
Lösningar
2015-07-16
victim selection
timeouts
KaU - Datavetenskap - DAV B04 - MGö
207
Victim selection
”Någon måste offras”
Undvik transaktionen som gått länge och
gjort många uppdateringar
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
208
Timeouts
Avbryt transaktionen om den väntat för länge
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
209
Starvation
En transaktion får vänta orimligt länge på
grund av låg prioritet eller annat
Lösningar
2015-07-16
FCFS : first-come-first-serve i väntekö
Prioritet : ge högre prioritet åt den som väntat
länge
KaU - Datavetenskap - DAV B04 - MGö
210
DAV B04 Databasteknik
MySQL
(-)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
211
Vad behöver du?
Ett SSH-program som ex.Tera Term Pro (Programs->
Misc->Tera Term-> Tera Term Pro (SSH) )
Ett program för att kopiera över filer från ditt vanliga
konto till kontot på enterprise, ex WinSCP (Programs->
Net-> WinSCP)
Följande data
2015-07-16
enterprise.cse.kau.se
användarkonto (ex. picard, data)
lösenord
KaU - Datavetenskap - DAV B04 - MGö
212
Logga in på enterprise
Från SSHprogrammet
med hjälp av
2015-07-16
användarkonto
lösenord
KaU - Datavetenskap - DAV B04 - MGö
213
Logga in på databaskontot
Därifrån loggar du in på MySQL
2015-07-16
mysql –h <hostname> -u <user> -p
(-h <hostname> kan du bortse från)
Ex. mysql –u picard -p
KaU - Datavetenskap - DAV B04 - MGö
214
Välj databas
Tala om vilken databas du kommer att
använda (lab3_XX)
2015-07-16
mysql> use lab3_XX;
KaU - Datavetenskap - DAV B04 - MGö
215
Andra nyttiga kommandon
Visa alla tabeller i databasen
mysql> show tables;
Beskriv en specifik tabell
2015-07-16
mysql> describe <tabellens namn>;
KaU - Datavetenskap - DAV B04 - MGö
216
MySQL vs. Access
Inga sub-selects (går inte att nästla)
Information om främmandenycklar sparas
inte (kommer i senare version...), så
referensintegritet kontrolleras inte (upp till er)
Inga vyer (senare version...)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
217
MySQL vs. Access
I MySQL är det möjligt att göra
COUNT(DISTINCT <kolumn-namn>)
Wildcards
Access * (substräng), ? (ett tecken)
MySQL % (substräng), _ (ett tecken)
Kommentarer skrivs efter ett #-tecken eller
inom /* */ enligt C-stil
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
218
Exempel: skapa tabeller
CREATE TABLE suppliers
(s_num varchar(5) NOT NULL PRIMARY KEY
name varchar(50) NOT NULL
);
CREATE TABLE shipments
(s_num varchar(5) NOT NULL,
p_nu, varchar(5) NOT NULL,
PRIMARY KEY (s_num, p_num),
FOREIGN KEY (s_num) REFERENCES suppliers (s_num)
FOREIGN KEY (s_num) REFERENCES parts (p_num)
);
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
219
Information om att skapa
tabeller
Alla alternativ för CREATE TABLE finns på
Ytterligare exempel finns på
http://www.mysql.com/doc/C/R/CREATE_TABLE.html
http://www.mysql.com/doc/C/r/Creating_tables.html
De viktigaste typerna
2015-07-16
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, REAL,
DOUBLE, FLOAT, DECIMAL(length,decimals),
NUMERIC(length,decimals), CHAR(length),
VARCHAR(length), DATE, TIME, TIMESTAMP, DATETIME,
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT,
ENUM(value1,value2,value3,...)
KaU - Datavetenskap - DAV B04 - MGö
220
Ta bort tabeller
(Efter allt arbete man lagt ned för att skapa
tabellen...;))
drop table <tabell-namn>;
Tar bort både definitionen av tabellen och alla
data så var försiktig!!!
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
221
Ändra i tabeller
Ex.
ALTER TABLE shipments
ADD COLUMN qty INT NOT NULL AFTER
p_num;
ALTER TABLE shipments
DROP COLUMN qty;
Alla alternativ finns på:
2015-07-16
http://www.mysql.com/doc/A/L/ALTER_TABLE.html
KaU - Datavetenskap - DAV B04 - MGö
222
Importera data till tabell
Skapa en text-fil och se till att den har något
slags avgränsare
I Excel finns alternativet att spara som tabdelimited .txt-file, vilket är lämpligt eftersom det är
default för MySQL vid importering av data
Kopiera över filen till ert användarkonto
2015-07-16
(med ex. WinSCP)
KaU - Datavetenskap - DAV B04 - MGö
223
Importera data till tabeller
Vid
2015-07-16
prompten är syntaxen sedan
mysql> LOAD DATA LOCAL INFILE
”/home/<användarnamn>/<filnamn.txt>” INTO
TABLE lab3_XX.<tabell-namn>;
KaU - Datavetenskap - DAV B04 - MGö
224
Testa tabellerna
All data i en tabell
SELECT * FROM <tabellnamn>;
SELECT fungerar till stort precis som förut
(förutom att du inte kan nästla SELECTsatserna)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
225
Ta bort data från tabeller
DELETE FROM <tabellnamn>;
Tar bort ALL data i tabellen!!!
DELETE FROM <tabellnamn> WHERE
<villkor>
2015-07-16
Tar bort alla rader i tabellen där villkoret matchats
KaU - Datavetenskap - DAV B04 - MGö
226
Logga ut
Logga ut från MySQL
quit
Logga ut ifrån SSH-programmet
2015-07-16
exit
KaU - Datavetenskap - DAV B04 - MGö
227
Mer information om MySQL
Officiell sajt
Dokumentation/tutorial
www.mysql.com
http://www.mysql.com/doc/
Tutorial MySQL/PHP
2015-07-16
http://www.mysql.com/articles/ddws/index.html
KaU - Datavetenskap - DAV B04 - MGö
228
DAV B04 Databasteknik
PHP
(-)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
229
PHP Hypertext Preprocessor
Scriptspråk på serversidan
2015-07-16
Innebär att webbservern översätter php-scripten
innan sidan skickas till webbläsaren, dvs.
webbläsaren ser bara vanlig html-kod
KaU - Datavetenskap - DAV B04 - MGö
230
PHP Grunderna
Exempel php-script på webbservern
//test.php
<HTML>
<HEAD>
<TITLE> Simple PHP Example</TITLE>
</HEAD>
<BODY>
<P>
<?php
print(“<B>Hello World!</B>");
?>
</P>
</BODY>
</HTML>
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
231
PHP Grunderna
Samma sida i webbläsaren
//test.php
<HTML>
<HEAD>
<TITLE> Simple PHP Example</TITLE>
</HEAD>
<BODY>
<P>
<B>Hello World!</B>
</P>
</BODY>
</HTML>
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
232
PHP Grunderna
Resultat i webbläsaren
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
233
Positiva aspekter
Oberoende av webbläsarens typ/version etc.
Tillgång till resurser på webbservern
Ex. MySQL-databaser
Saktar inte ned webbläsaren som exempelvis
JavaScript kan göra (prestandakraven ligger
istället på servern)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
234
PHP Syntax
Ett php-script börjar alltid med
Och slutar alltid med
<?php (eller <?)
?>
Kallas för scriptets avgränsare (delimiters)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
235
Skalära (primitiva) typer
boolean, bool: {true, false}
integer, int: {…-1, 0, 1, 2…}
float, double, real: {..1.1, 1.2..}
string: tecken inom ’ ’ eller ” ”
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
236
Komplexa (sammansatta)
typer
arrayer (lista, haschtabell, samling…) där
nyckeln är antingen är av typen integer eller
string
objekt (ej i denna kurs om ni inte absolut
känner för det…)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
237
Variabler
Börjar alltid med ett dollartecken ( $)
$name, $i, $test
Är typlösa 8!
2015-07-16
$name = ”Joppe”;
$i = 1;
$test = 4.7;
$test = ”Kalle”;
KaU - Datavetenskap - DAV B04 - MGö
238
Operatorer
=, ==, !=, !, +, -, *, /, ++, --, &&, || etc....
$i = 1;
$i = $i + 2;
$i++;
//$i = 3
//$i = 4
Dvs. precis som i C/C++
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
239
”Utökningar” som kan vara
bra att känna till
AND, OR
Punktoperatorn (.) som används för att slå
ihop strängar
2015-07-16
$fname = ”Joppe”;
$sname = ”Karlsson”;
$name = $fname . ” ” . $sname; //Joppe Karlsson
$name = ”$fname $sname”;
$name = ’$fname $sname’;
KaU - Datavetenskap - DAV B04 - MGö
//samma resultat
//samma resultat
240
Utskrift
print() eller echo()
print(”Hello World”);
echo(”Hello World”);
print($fname . ” ” . $sname);
Egentligen inte funktioner, utan
språkkonstruktioner...
2015-07-16
print ”Hello World”;
echo $fname . ” ” . $sname;
KaU - Datavetenskap - DAV B04 - MGö
241
Reserverade ord
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
242
Selektioner
if-else
if ($var1 == true)
{
//...
}
else if($var2 == true)
{
//...
}
else
{
//...
}
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
243
Iterationer
while
while ($expr)
{
//...
}
for
for($i = 0; i < $size; $i++)
{
//...
}
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
244
Iterationer
do-while
$i = 0;
do {
//...
}while ($i>0);
foreach
foreach($array_expr as $value)
//...
foreach($array_expr as $key => $value)
//...
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
245
Funktioner
function add ($arg, $arg_2)
{
echo "Example function.\n";
$retval = $arg1 + $arg2;
return $retval;
}
…
$sum = add(1, 2);
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
246
Koppla upp mot MySQL
mysql_connect(<address>, <username>, <password>);
Exempel
$dbcnx = @mysql_connect("localhost", ”picard", ”password");
if (!$dbcnx){
print("<P>Unable to connect to the " .
"database server at this time.</P>" );
exit();
}
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
247
Välj databas
bool mysql_select_db (string databas [, uppkoppling])
Exempel
if (! @mysql_select_db(”lab3_XX") )
{
print( "<P>Unable to locate the " .
"database at this time.</P>" );
exit();
}
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
248
Kör en SQL-fråga
mysql_query(string sql_question [,
uppkoppling] )
Vad funktionen returnerar varierar:
vid CREATE/INSERT/UPDATE/DROP etc.
returneras true/false
vid SELECT returneras en resultatmängd
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
249
Kör en SQL-fråga
Exempel
$result = mysql_query(”SELECT * FROM Supplier ”);
if ( !$result )
{
print("<P>Error performing query: " .
mysql_error() . "</P>");
exit();
}
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
250
Hantera
resultatmängden
Hämta resultatet rad efter rad…
while ( $row = mysql_fetch_array($result) )
{
print( ”<P>” . $row[”snum”] . ” ” . $row[”sname”] .
”</P>”);
}
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
251
Formulär
<FORM ACTION=”vad som skall hända"
METHOD = POST>
…
</FORM>
2015-07-16
där ”vad som skall hända” exempelvis kan vara
att ladda in en ny sida, eller maila till någon
person...
KaU - Datavetenskap - DAV B04 - MGö
252
Formulär
Exempel
<FORM ACTION="<?php echo($PHP_SELF); ?>"
METHOD = POST>
…
</FORM>
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
253
Textboxen
<INPUT TYPE="text" NAME="name" SIZE="30">
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
254
Pop-up boxen
<SELECT NAME=”color" SIZE="1">
<OPTION SELECTED>Blue
<OPTION>Red
</SELECT>
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
255
Sänd eller återställ
informationen i formuläret
<INPUT TYPE="submit” NAME=”submit”>
<INPUT TYPE="reset” NAME=”reset”>
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
256
Viktigt att veta om PHP och
formulär
Namnet på textboxen, pop-up boxen, knapparna
osv. blir automatiskt variabler i PHP!
<?php
if($submit){
//Ok, arbeta mot databasen
}
?>
<FORM ACTION="<?php echo($PHP_SELF); ?>" METHOD=POST>
<INPUT TYPE="submit” NAME=”submit”>
</FORM>
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
257
Exempel på PHP och
formulär
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
258
PHP och reguljära uttryck
Reguljära uttryck kan användas för att
kontrollera att det användaren matar in är i
rätt form för en given kolumn
2015-07-16
exempelvis att ett Bach-nummer måste vara på
formen BWV XXX(X) där X är en siffra mellan 0-9
KaU - Datavetenskap - DAV B04 - MGö
259
Exempel på reguljära
uttryck
Sök efter strängen ”Now” i meningen ”Now is the
time!”
2015-07-16
if(ereg(”Now”, ”Now is the time!”) == true)
print(”Found”);
if(ereg(”^Now”, ”Now is the time!”) == true)
print(”Found”);
if(ereg(”Now$”, ”Now is the time!”) == true)
print(”Found”); //Hittas ej
KaU - Datavetenskap - DAV B04 - MGö
260
PHP och reguljära uttryck
Bara bokstäver/siffror i ex. en variabel
if(ereg(”[A-Za-z0-9]*”, $test) == true)
print(”Correct”);
else
print(”Error”);
2015-07-16
* står för 0 eller flera gånger
+ står för 1 eller flera gånger
{n,m} står för att det finns mellan minst n till som mest
m gånger
KaU - Datavetenskap - DAV B04 - MGö
261
PHP och reguljära uttryck
Sant eller falskt?
ereg(”^Now [a-z ]+$”, ”Now is the time!”)
ereg(”^Now [a-z ]+!$”, ”Now is the time!”)
Vill man sedan inte bry sig om stora eller små
bokstäver så använder man istället
2015-07-16
eregi()
KaU - Datavetenskap - DAV B04 - MGö
262
Mer information
Manualer/tutorials/sökning
Tutorial om PHP och MySQL
http://www.mysql.com/articles/ddws/2.html
Tutorial om html, formulär osv..
www.php.net eller www.se.php.net
www.htmlgoodies.com
Information om laborationen
2015-07-16
http://enterprise.cse.kau.se
KaU - Datavetenskap - DAV B04 - MGö
263
DAV B04 Databasteknik
Återhämtning
(kap 21)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
264
Återhämtning (Recovery)
Innebär att man:
återhämtar/återställer databasen till dess senast
konsistenta tillstånd efter det att en transaktion
misslyckats
2015-07-16
Disk-krasch, datorfel, transaktionsfel, katastrof osv.
Använder vanligtvis systemloggar för att återställa
databasen
KaU - Datavetenskap - DAV B04 - MGö
265
Repetition transaktioner
En transaktion är en mängd operationer, utförda i sekvens, som
tillsammans bildar en logisk enhet.
BEGIN TRANSACTION ;
INSERT ( { S#: 'S5', P#: 'P1', QTY:1000 } ) INTO SP ;
IF any error occurred THEN GO TO UNDO ;
UPDATE P WHERE P# = 'P1' TOTQTY := TOTQTY + 1000;
IF any error occurred THEN GO TO UNDO ;
COMMIT TRANSACTION ;
GO TO FINISH ;
UNDO :
ROLLBACK TRANSACTION ;
FINISH :
RETURN ;
En transaktion förflyttar databasen från ett konsistent tillstånd till ett
annat konsistent tillstånd, men garanterar inte konsistens under tiden
transaktionen utförs.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
266
Strategier vid återhämtning
Vid allvarligare fel
backup av databasen används för att säkerställa
ett konsistent tillstånd hos databasen
alla operationer sedan backupen togs tills det att
feltillståndet inföll görs sedan om
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
267
Strategier vid återhämtning
Mindre allvarliga fel
vrid tillbaka ändringar som orsakat inkonsistens
genom att göra operationerna ogjorda
det kan också vara nödvändigt att göra om vissa
operationer för att återställa databasen
jobbar efter avstämningar i systemets logg
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
268
Mindre allvarliga fel
Två olika tekniker
uppskjuten uppdatering (deferred update)
omedelbar uppdatering (immediate update)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
269
Caching
Caching av disk-block
1.
2.
3.
data som skall uppdateras cachas i
primärminnet
datan uppdateras i primärminnet.
datan skrivs tillbaka till disken.
Speciellt cachningsminne för DB
2015-07-16
DBHS cache
KaU - Datavetenskap - DAV B04 - MGö
270
Strategier för återskrivning
In-place updating
Skriver över ursprungsvärdet
Shadowing
2015-07-16
Skriver en uppdaterad buffer till ett annat
diskutrymme, vilket innebär att flera versioner av
datan existerar.
KaU - Datavetenskap - DAV B04 - MGö
271
Loggningsinformation
Två typer av loggningsinformation
Information som behövs för UNDO
1.
•
Information som behövs för REDO
2.
•
2015-07-16
Nya värdet (AFIM)
Gamla värdet (BFIM)
KaU - Datavetenskap - DAV B04 - MGö
272
Write-Ahead loggning
De loggblock som innehåller information om
datan som skall uppdateras måste skrivas till
disk innan själva datablocket skrivs till disken
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
273
Ansatser till återhämtning
Terminologi för när information kan skrivas
från cachen till disken...
no-steal
steal
2015-07-16
cache-info som blivit uppdaterad av en transaktion
kan inte skrivas till disken innan transaktionen kommit
till sin commit-punkt.
uppdaterad information i buffern (cache-minnet) kan
skrivas innan transaktionen nått commit-punkten.
KaU - Datavetenskap - DAV B04 - MGö
274
Ansatser till återhämtning
force approach
no-force approch
2015-07-16
all information som blivit uppdaterad av en
transaktion skrivs omedelbart till disken så fort en
transaktion nått sin commit-punkt.
uppdaterad information behöver inte skrivas till disk
direkt efter att en transaktion nått sin commit-punkt.
KaU - Datavetenskap - DAV B04 - MGö
275
Ytterligare
loggningsinformation
Checkpoints
sådan information skrivs till loggen när systemet
uppdaterar databasen med alla DBHS [cache]
buffrar som har blivit modifierade
alla transaktioner som har sina commit-punkter i
loggen innan en checkpoint behöver inte få sina
WRITE-operationer omgjorda ifall det blir en
krasch av något slag
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
276
Strategi för checkpoints
1.
Frys temporärt exekveringen av alla transaktioner
2.
Gör en force-write av alla buffrar i primärminnet
som har blivit uppdaterade (till disk)
3.
Skriv in en checkpoint till loggen och gör en forcewrite även på loggen (till disk)
4.
Påbörja exekvering av transaktionerna igen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
277
Rollback
Om en transaktion misslyckas kan det vara
nödvändigt att återställa uppdaterade värden
till de gamla värdena (BFIM). Kallas för att
man gör en rollback.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
278
Cascading rollback
Vid beroendeförhållanden
Om en transaktion T misslyckas och det
måste utföras en rollback på T så måste det
även utföras en rollback på alla transaktioner
som läst värden som uppdaterats av T...
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
279
Illustration av cascading
rollback
Fig. 21.1
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
280
Illustration av cascading
rollback
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
281
Illustration av cascading
rollback
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
282
Uppskjuten uppdatering
Skjuter upp eventuella uppdateringar till
databasen tills dess att transaktionen avslutat
sin exekvering och nått sin commit-punkt
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
283
Strategi för uppskjuten
uppdatering
1.
En transaktion kan inte ändra databasens
innehåll förrän den nått sin commit-punkt
2.
En transaktion når inte sin commit-punkt
förrän alla dess uppdateringsoperationer
har blivit inskrivna i loggen och loggen har
blivit force-written till disken
2015-07-16
NO-UNDO/REDO recovery algorithm
KaU - Datavetenskap - DAV B04 - MGö
284
Uppskjuten uppdatering i
enanvändarmiljö
Fig. 21.2
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
285
Uppskjuten uppdatering i
ett fleranvändarsystem
För att hantera concurrency och återhämtning
en transaktion skriver ingen information till databasen
förrän efter dess commit-punkt (lyckad exekvering) =>
en transaktion behöver aldrig göra roll back pga. en
misslyckad transaktion
en transaktion läser aldrig ett värde som blivit
uppdaterat av en transaktion som inte nått sin commitpunkt, eftersom värdet förblir låst tills dess att commitpunkten nåtts (ingen cascading rollback)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
286
Återhämtning
Uppskjuten uppdatering i ett fleranvändarsystem
(fig. 21.3)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
287
Omedelbar uppdatering
När en transaktion gör en uppdateringsoperation uppdateras
databasen omedelbart.
uppdateringsoperationen måste dock skrivas till loggen
innan uppdateringen så att återhämtning kan ske
UNDO/NO-REDO Algorithm
alla uppdateringar skrivs till DB innan transaktionen gjort
commit
UNDO/REDO Algorithm
transaktioner får göra commit innan alla dess
uppdateringar skrivits till DB
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
288
Shadowing pages
NO-UNDO/NO-REDO recovery algorithm
alla uppdateringar görs hela tiden i en ny katalog
och den gamla versionen sparas i en s.k.
skuggkatalog
vid fel byter man helt enkelt tillbaka till den gamla
katalogen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
289
Illustrering av Shadowing
pages
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
290
Återhämtning i ett system
med flera databaser
Two-phase commit används om en given
transaktion involverar flera "resurshanterare"
t ex i ett distribuerat databassystem
Om en transaktion uppdaterar två olika
databaser, får det inte hända att
uppdateringar görs i den ena databasen men
inte i den andra
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
291
Återhämtning i ett system
med flera databaser
En komponent i systemet, koordinatorn, har
som uppgift att garantera att båda
databaserna utför samma operation (båda
gör COMMIT eller båda gör ROLLBACK),
även om systemet kraschar mitt i
processen.
Om koordinatorn bestämmer att
operationen skall vara COMMIT gås två
faser igenom...
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
292
Strategi för återhämtning i ett
system med flera databaser
Fas 1
koordinatorn instruerar alla resurshanterare att göra sig
klara för att avsluta transaktionen
det betyder att alla deltagare i processen måste skriva
all information de har om transaktionen till loggen
om detta gick bra, svarar resurshanteraren "OK", annars
"not OK" till koordinatorn.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
293
Strategi för återhämtning i ett
system med flera databaser
Fas 2
när koordinatorn har fått svar från alla deltagare, skriver
den sitt beslut till sin egen logg
om alla svar var "OK" blir beslutet "commit”, annars blir
det "rollback”
koordinatorn informerar sedan alla deltagare om sitt
beslut, vilket de alla måste rätta sig efter
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
294
Återhämtning i ett system
med flera databaser
Om systemet kraschar mitt i processen, letar
omstartproceduren efter koordinatorns beslut
i loggen.
Om den hittar det, kan processen fortsätta
där den slutade.
Om inte, så antas beslutet ha varit "rollback".
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
295
DAV B04 Databasteknik
Säkerhet
(kap 22)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
296
Olika säkerhetsaspekter
Lagliga och etiska aspekter
Policyfrågor
Säkerhet på hårdvarunivå
Säkerhet i operativsystemet
Säkerhet i nätverket
Säkerhet i databassystemet
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
297
Säkerhetsmål (allmänt)
Sekretess (Confidentiality)
Integritet (Integrity)
förhindrande av att information görs tillgänglig för
obehöriga
förhindrande av obehörig påverkan av information
Tillgänglighet (Availability)
2015-07-16
information skall finnas tillgänglig för den
behörige användaren
KaU - Datavetenskap - DAV B04 - MGö
298
Säkerhetsmekanismer i
databaser
Två typer av mekanismer används:
discretionary control
användare beviljas accessrättigheter till objekt (tabeller,
kolumner, rader mm) i databasen på individuell basis
mandatory control
Användare och objekt delas in i olika säkerhetsklasser
För att dessa mekanismer skall fungera krävs
autentisering av användarna
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
299
Discretionary Control
Är den vanligaste mekanismen
Bygger på att man beviljar (grant) eller drar undan
(revoke) olika privilegier
Privilegier på kontonivå specificeras av DBA
Privilegier på relationsnivå kan specificeras av den
som skapat relationen (och som själv äger alla
rättigheter)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
300
Privilegier på relationsnivå
SELECT
INSERT, UPDATE, DELETE
för att kunna modifiera data
REFERENCES
för att kunna hämta data
för att kunna referera en relation t ex i en integritetsregel
WITH GRANT OPTION
2015-07-16
för att en användare ska kunna ge privilegier vidare
KaU - Datavetenskap - DAV B04 - MGö
301
SQL-syntax
GRANT ALL [ PRIVILEGES ] |
[ SELECT ] [ INSERT ] [ DELETE ]
[ UPDATE [ (kolumnlista) ]
ON tabellnamn
TO namnlista | PUBLIC
[ WITH GRANT OPTION ]
OBS!!! Allting som inte är uttryckligen tillåtet, är
förbjudet.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
302
Exempel på säkerhetsregler
med GRANT
GRANT ALL PRIVILEGES
ON cust_table
TO lewis, agganis
WITH GRANT OPTION.
GRANT SELECT, UPDATE (credit_limit)
ON cust_table
TO garcia.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
303
Exempel på säkerhetsregler
med REVOKE
Det går också att dra tillbaka rättigheter med
REVOKE
REVOKE DELETE, UPDATE
ON cust_table
FROM jones, brown.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
304
exempel på en värdeoberoende
säkerhetsregel
GRANT SELECT ( S#, SNAME, CITY )
ON S
TO Jacques, Anne, Charley.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
305
Exempel på en värdeberoende
säkerhetsregel
GRANT SELECT, INSERT, UPDATE
( SNAME, STATUS ), DELETE
ON S WHERE S.CITY = 'Paris’
TO Dan, Misha.
Dessa användare kan se en horisontell delmängd
av S
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
306
Exempel på osynliga villkor
GRANT SELECT ( S#, SNAME )
ON S WHERE S.STATUS > 50
TO Judy, Paul.
Attributet STATUS används här som villkor även fast
det inte är synligt för användarna.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
307
Exempel på en kontextberoende
säkerhetsregel
GRANT SELECT, UPDATE ( STATUS )
ON S
WHERE DAY ( ) IN ( 'mon', 'tue', 'wed', 'thu', 'fri' )
AND TIME ( ) >= '9:00 AM'
AND TIME ( ) <= '5:00 PM'
TO Purchasing.
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
308
Säkerhetsregler på vyer
Anta att vi har definierat en vy SSQ enligt
följande:
CREATE VIEW SSQ AS
SELECT S#, SUM(QTY)
FROM SP
GROUP BY S#
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
309
Säkerhetsregler på vyer
Då kan vi skriva följande säkerhetsregel:
GRANT SELECT
ON SSQ
TO Fidel.
Fidel har bara rättigheter att se viss statistik från
basrelationen SP, inte några detaljer
Detta är ett exempel på hur man kan använda vyer
för att gömma information
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
310
Audit Trails
En audit trail är en speciell logg där detaljer om alla
operationer som har utförts registreras
Information som en audit trail kan innehålla:
2015-07-16
hur operationen såg ut
från vilken terminal operationen utfördes
vilken användare som utförde operationen
datum och tid för operationen
berörda relationer, tupler och attribut
de gamla värdena
de nya värdena
KaU - Datavetenskap - DAV B04 - MGö
311
Mandatory control
Används i databaser som har höga krav på
säkerhet
Ett antal säkerhetsklasser definieras, tex top
secret(TS), secret(S), confidential(C) och
unclassified(UC) där TS >= S >= C >= UC
Den vanligaste klassificeringsmodellen är
den sk Bell-LaPadula-modellen
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
312
Bell-LaPadula-modellen
Varje subjekt (användare, konto, program)
och objekt (relation, tuple, attribut, vy,
operation) tilldelas en av säkerhetsklasserna
TS, S, C eller UC
klassificering av ett subjekt: class(S)
klassificering av ett objekt: class(O)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
313
Bell-LaPadula-modellen
Två regler:
Ett subjekt S får bara läsrättigheter till ett objekt O
om class(S) >= class(O) (simple security property)
Ett subjekt S får bara skrivrättigheter till ett objekt O
om class(S) <= class(O) (*-property eller star
property)
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
314
Statistiska databaser
Användare får bara ställa frågor m h a count,
sum, min, max osv.
Problemet med sådana databaser är att det
ofta går att få svar på en otillåten fråga
genom att ställa ett antal tillåtna frågor….
2015-07-16
KaU - Datavetenskap - DAV B04 - MGö
315
Relationen Stat
NAME
Alf
Bea
Cary
Dawn
Ed
Fay
Guy
Hal
Ivy
Joy
2015-07-16
SEX
M
F
F
F
M
F
M
M
F
F
KIDS
3
2
0
2
2
1
0
3
4
1
OCCUPATION
Programmer
Physician
Programmer
Builder
Clerk
Artist
Lawyer
Homemaker
Programmer
Programmer
KaU - Datavetenskap - DAV B04 - MGö
SALARY
50K
130K
56K
60K
44K
30K
190K
44K
64K
60K
TAX
10K
10K
18K
12K
4K
0K
0K
2K
10K
20K
316