Databasföreläsning
Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik) Tabeller Personer Databas Nummer Namn Födelseår 1 Tina 1950 2 Siv 1965 3 Olle 1980
Platt databas: all information i en tabell Relationsdatabas: flera tabeller som är länkade till varandra Objektdatabaser: information representerad i objekt (objektorienterad programmering )
Relationsdatabas Om samma information dyker upp på flera ställen Effektivare lagring Snabbare sökning Logisk gruppering av data
(fort. Relationsdatabas) Grundregel: Varje tabell ska beskriva en typ av sak Varje rad i tabellen ska innehålla data om en enda sådan sak Data vi lagrat för varje sak ska finnas på en enda rad
(fort. Relationsdatabas) Länkningen: Primärnyckel: ett unikt värde Främmande nyckel/sekundär nyckel/ referens attribut
Primärnyckel Sekundär nyckel Plats Län Personer Namn Epost Bor 1 Tina tina@epost.se 1 2 Siv siv@emost.se 2 3 Olle olle@epost.se 1 1 Västerbotten 2 Halland 3 Södermanland
(fort. Relationsdatabas) Att tänka på med innehållet i en relationsdatabas: Enkla och atomära värden: ett värde / ruta Null-värde: avsaknad av värde
Exempel på relationsdatabaser: Microsoft Access Oracle MySQL (PHP) Microsoft SQL server
ER-modellen/-schema
ER-modellen ER = Entity Relationship (= saker och samband) Entitestyper typer av saker Sambandstyper 1:1 N:1 N:M Attribut: egenskaper
Förnamn Efternamn Person Födelseår Epost
Förnamn Efternamn Län Person n 1 Bor Plats Födelseår Epost
Förnamn Efternamn Län Hobby n Har m Person n 1 Bor Plats Aktivitet Födelseår Epost
Översättning ER-modell relationsdatabas
STEG 1 Entitetstyper -> en tabell Attribut -> kolumner Entitestypens nyckel -> primärnyckel (helst löpnr) STEG 2 1:N sambandstyper blir en sekundärnyckel i många -tabellen STEG 3 1:1-sambandstyper blir en sekundärnyckel i den ena av tabellerna (ibland an man slå ihop tabellerna) STEG 4 N:M-sambandstyp blir en egen tabell.
Förnamn Efternamn Län Hobby n Har m Person n 1 Bor Plats Aktivitet Födelseår Epost
Förnamn Efternamn Län Hobby n Har m Person n 1 Bor Plats Aktivitet Födelseår Epost Tbl_Hobby Ho_ Ho_Aktivitet 1 Scouting 2 Stickning 3 Cykling Tbl_Plats Pl_ Pl_Lan 1 Västerbotten 2 Halland 3 Södermanland Tbl_Person Pe_ Pe_Fornamn Pe_Efternamn Pe_Fodelsear Pe_Epost Pe_Bor 1 Tina Olofsson 1950 tina@epost.se 1 2 Siv Kvist 1965 siv@epost.se 3 3 Olle Svensson 1980 olle@epost.se 2
Förnamn Efternamn Län Hobby n Har m Person n 1 Bor Plats Aktivitet Födelseår Epost Tbl_Hobby Ho_ Ho_Aktivitet 1 Scouting 2 Stickning 3 Cykling Tbl_Plats Pl_ Pl_Lan 1 Västerbotten 2 Halland 3 Södermanland Tbl_Person Pe_ Pe_Fornamn Pe_Efternamn Pe_Fodelsear Pe_Epost Pe_Bor 1 Tina Olofsson 1950 tina@epost.se 1 2 Siv Kvist 1965 siv@epost.se 3 3 Olle Svensson 1980 olle@epost.se 2
Förnamn Efternamn Län Hobby n Har m Person n 1 Bor Plats Aktivitet Födelseår Epost Tbl_Hobby Ho_ Ho_Aktivitet 1 Scouting 2 Stickning 3 Cykling Tbl_Person Tbl_HarHobby Tbl_Plats HH_Hobby HH_Person Pl_ Pl_Lan 1 1 1 Västerbotten 2 1 2 Halland 3 2 3 Södermanland 2 3 1 3 Pe_ Pe_Fornamn Pe_Efternamn Pe_Fodelsear Pe_Epost Pe_Bor 1 Tina Olofsson 1950 tina@epost.se 1 2 Siv Kvist 1965 siv@epost.se 3 3 Olle Svensson 1980 olle@epost.se 2
SQL (Structured Query Language) Ett effektivt frågespråk för att skapa hämta lägga till ta bort uppdatera CREATE SELECT INSERT DELETE UPDATE information i en relationsdatabas.
Syntax: CREATE TABLE tabellnamn (kolumnnamn); SELECT urvalslista FROM tabellnamn [WHERE sökvillkor] [ORDER BY sorteringsvillkor [ASC / DESC]]]; INSERT [INTO tabellnamn] [(kolumnlista)] VALUE (DEFAULT / NULL/ värde); UPDATE tabellnamn SET kolumnnamn =(DEFAULT / NULL / värde) [WHERE villkor]; DELETE FROM tabellnamn [WHERE vilkor];
Skapa en tabell med SQL: CREATE TABLE tabellnamn (kolumnlista); CREATE TABLE Tbl_Plats (Pl_ INTEGER NOT NULL, Pl_Lan CHAR(20) NOT NULL);
Hämta namnen på personerna som är med i databasen: SELECT urvalslista FROM tabellnamn [WHERE sökvillkor] [ORDER BY sorteringsvillkor [ASC / DESC]]]; SELECT Tbl_Person.Pe_Fornamn,Tbl_Person.Pe_Efternamn FROM Tbl_Person ORDER BY Tbl_Person.Pe_Efternamn ASC; Urvalslista: lista över kolumnerna Ex. Tbl_Person.Pe_Fornamn, Tbl_Person.Pe_Efternamn, Tbl_Person.Pe_Fodelsear, Tbl_Person.Pe_Epost ASC: bokstavsordning DESC: omvändbokstavsordning
Hämta all information om Siv i databasen Person: SELECT urvalslista FROM tabellnamn [WHERE sökvillkor] [ORDER BY sorteringsvillkor [ASC / DESC]]]; SELECT * FROM Tbl_Person WHERE Tbl_Person.Pe_Fornamn= Siv ; Wildcard: * eller %
Lägga till ett nytt län i Plats-tabellen: INSERT [INTO tabellnamn] [(kolumnlista)] VALUE (DEFAULT / NULL/ värde); INSERT INTO Tbl_Plats Tbl_Plats.Pl_Lan VALUE ( Gotland );
Uppdatera att Siv bytt efternamn: UPDATE tabellnamn SET kolumnnamn =(DEFAULT / NULL / värde) [WHERE villkor]; UPDATE Tbl_Person SET Tbl_Person.Pe_Efternamn= Andersson WHERE Tbl_Person.Pe_Fornamn= Siv ;
Ta bort Olle från Databasen (han har kanske har slutat med sina hobbys): DELETE FROM tabellnamn [WHERE vilkor]; DELETE FROM Tbl_Person WHERE Tbl_Person.Pe_Fornamn= Olle ;
Integritetsvillkor i relationsdatabaser: Nyckelvillkor Referensintegritetsvillkor
Integritetsvillkor i relationsdatabaser: Nyckelvillkor, nämligen att primärnyckeln (och eventuella andra kandidatnycklar) måste ha unika värden, dvs att det inte får finnas två rader i en tabell som har samma värde på primärnyckeln. Referensintegritetsvillkor, nämligen att om det står i tabellen Person att en viss person bor på en plats med id 3, så ska det också finnas en plats med id 3, i tabellen Plats. Tbl_Person Pe_ Pe_Fornamn Pe_Efternamn Pe_Fodelsear Pe_Epost Pe_Bor 1 Tina Olofsson 1950 tina@epost.se 1 2 Siv Kvist 1965 siv@epost.se 3 3 Olle Svensson 1980 olle@epost.se 2 Tbl_Plats Pl_ Pl_Lan 1 Västerbotten 2 Halland 3 Södermanland
varje person måste ha ett id (nyckelvillkor) två personer får inte ha samma id (nyckelvillkor) varje plats måste ha ett id(nyckelvillkor) två platser får inte ha samma id (nyckelvillkor) om det står att en person bor på en plats med ett viss id, så måste det också finnas en sån plats(referensintegritetsvillkor). Tbl_Person Tbl_Plats Pe_ Pe_Fornamn Pe_Efternamn Pe_Fodelsear Pe_Epost Pe_Bor Pl_ Pl_Lan 1 Tina Olofsson 1950 tina@epost.se 1 2 Siv Kvist 1965 siv@epost.se 3 3 Olle Svensson 1980 olle@epost.se 2 1 Västerbotten 2 Halland 3 Södermanland
Skapa refernsintegritet när vi skapar tabell med SQL: CREATE TABLE Tbl_Person (Pe_ integer not null, Pe_Fornamn varchar(10), Pe_Bor integer, primary key (Pe_), foreign key (Pe_Bor) references Tbl_Plats(Pl_));
Referensintegritet Regler för hur poster kan tas bort och läggas till Ser till att man inte tar bort relaterade data så att relationen påverkas. Om två tabeller är hopkopplade med referensattribut så ska värdet som refereras till alltid existera.
Skapa villkor på referensintegriteten så man styr vad som händer då man tar bort eller uppdaterar något i databasen.
1. foreign key (Pe_Bor) references Tbl_Plats(Pl_) on delete set null Om man tar bort ett län som det bor personer i så sätts Pe_Bor för dessa personer till Null. Dvs personerna bor inte i något län (De kanske har flyttat utomlands?). 2. ( foreign key (Pe_Bor) references Tbl_Plats(Pl_) on delete cascade Om man tar bort ett län där det bor personer i så kommer även de personer som bor i det länet att tas bort i Tbl_Person tabellen. 3. ( foreign key (Pe_Bor) references Tbl_Plats(Pl_) on delete set default Om man tar bort ett län där det bor personer i så kommer dessa personer att få kolumnens defaultvärde. 4. ( foreign key (Pe_Bor) references Tbl_Plats(Pl_) on update cascade Om man ändrar namnet på ett län där det finns personer som bor så ändras Pe_Bor för alla de personerna i Tbl_Person tabellen.