Till KTH:s startsida Till KTH:s startsida

anteckningar lek 4

F4

Triggers

Är aktiva regler som anger villkor och åtgärd.

Vilkoret kollas och åtgärden utförs.

Ågärd kan vara

Avbryta transaktion.

Ändringar i databasens data.

Anropande av lagrade procedurer.

Eventuellt anropa externa program.

ECA regler för triggers

Event – Händelse

Condition – Villkor

Action – Åtgärd/Aktion

Det är svårt att göra utan Event då databasen
hela tiden måste kolla om ett villkor är uppfyllt.


Exempel trigger
När vi tar bort en student vill vi automatiskt att denna tupel läggs in OldStudent

create trigger
after delete on Student
referencing old table as old
for each statement
begin atomic
insert into OldStudent
Select personummer, namn from old;
end

Ändrarar vi betyg på en student så vill vi ändra snittbetyget.

create trigger check after update on T_STUDENT_COURSE
referencing new row as n old row as o
for each row
begin atomic
declare oldgrade integer;
declare newgrade intger;
declare studentid integer;
declare courseid integer;

select grade into oldgrade from o;
select grade inte newgrade from n;
select student_id into studentid from n;
select course_id into courseid from n;
if (oldgrade > newgrade) then
update T_STUDENT_COURSE set grade = oldgrade
where student_id = studentid and course_id =
course_id;
end if;
end

Index

Ett index fungerar som ett register.

Tabellerna 'sorteras' efter ett index.

Create index namn on Student(namn) – Skapar
ett index på tabellen Student med avseende på attributet namn.

En primärnyckel är alltid ett index.

Index

Att ha index gör att sökning går snabbare

Det gör dock att uppdateringar av tabellerna går lite långsammare eftersom indexet måste byggas om vid ändringar.

Vad ska göras till index ?

Sökningar som görs ofta, dess where villkor kan vara aktuella.

Sökningar som det är viktigt att de går snabbt.

Framförallt på stora tabeller.


Fysisk lagringsstruktur

En databas lagras på hårddisken

Man kan använda filer och då antingen

Updelat t.ex. En fil/tabell

En stor fil som innehåller allt (vanligast)

Ett annat alternativ är att man implementerar
egen filhantering. Då allokeras en egen
partiotion av hårddisken.


Man har oftast en huvudfil som inehåller allt
data (en/tabell eller en stor)

Den kan antingen vara

Osorterad , läs igenom allt för att hitta

Sorterad, snabbare sök längre tid att lägga till.

Som en hashtabell, varje block motsvarar ett fack

Indexerat, ett index skillt från huvudfilen pekar ut
blocken I filen


Hashfiler

Fördel

Snabb sökning, går inte få snabbare.

Enkelt att lägga till/ta bort/ändra.

Nackdel

Däremot inte bra på att plocka ut range, typ alla
med skostorlek 43-47

Index

Tre typer

Primär index, sorterad som primärnyckeln

Grupperade index, sorterad som huvudfilen men på
annat sätt än som primärnyckel

Sekundär index, Sorterad på annat sätt än
huvudfilen.

Sekundär index

Är ett index som sorterar efter annan ordning
än huvudfilen (och dess primörindex)


Transaktioner inuti databasen

Bufferten mellan databasen och den fysiska
Hd:n måste hanteras.

Du måste hålla koll på hur bufferingen mot
filsystemet sker. Elliminera bufferingen eller
kontrollera innan 'riktig' commit;

A och D går ganska lätt om det inte krashar. A
rulla tillbaka I loggfilen operationer vid rollback.
D skrivs till disken punkt-slut.

Vid crash

Så får vi detta

Halvfärdiga transaktioner

Comittade trans där data han skrivas

Commitade trans där data INTE han skrivas

Rollade trans där ändringarna hann ändras tillbaka

Rollade trans där ändringarna INTE hann ändras
tillbaka


Återmhämntningsprocessen måste alltså gå
igenom loggfilen och behandla alla
transaktioner

Commitade transar Gå igenom och gör igen.
Behövs för A o D.

Icke commitade går man igenom och ändrar
tillbaka.

Operationerna är idempotenta. De kan göras
flera gånger och ge samma resultat.

Isolering

Allt data som används I en transaktion kopieras
in I minnet och manipuleras där, när den sedan
är klar skrivs den in I databasen.

Därigenom ser ingen annan ändringen förrän
den är klar.

Det finns vissa synkroniserings problem vis
skrivning till databasen.