1
Datafiler tillhör alltid en filgrupp. Det måste alltid finnas en PRIMARY group. Det är inget som hindrar att datafiler på olika diskar tillhör samma filgrupp. PRIMARY gruppen innehåller huvudfilen till databasen, master data file, som default har filändelsen.mdf. Denna filen innehåller förutom användarens dataobjekt (tabeller, procedurer vyer etc.) även ett stort antal systemtabeller som hör till varje databas. dba (database administrator) kan också fördela databasen på flera datafiler där de nya bör ha filändelsen.ndf. Datafilerna bör ligga på diskar med högsta prestanda t ex RAID 10 eller RAID 5. Loggfilen (.ldf) ska inte ligga på samma disk som datafilerna, utan på en egen disk där säkerheten är prioriterad framför högsta hastighet t ex RAID 1 Tabeller som ofta läses samtidigt kan läggas i olika filgrupper på olika diskar för att öka prestanda. De kan då läsas samtidigt. Filerna läggs default i C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL Detta kan ändras via inställningar som nås via properties på Servern: 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. 2
Lägg märke till att data och loggfilerna har både ett logiskt namn, t ex. MyDB, som används internt och ett fysiskt namn, tex.c:\data\mydbase.mdf, som används externt. Ursprunglig storlek (initial size) kan anges (minst 3MB). I Autogrowth anges om filen får växa, och i så fall hur mycket. Använd -knappen för att ställa in detta! Förutom den nödvändiga.mdf filen och.ldf filen har här skapats en extra datafil MyDB_data2.ndf på F: och som lagts i en egen filgrupp (som i detta fallet är read only) 3
CREATE DATABASE kommandot är i själva verket betydligt mer komplicerat. Se Books On Line (BOL) för detaljer Normalt ska du välja att titta på det avsnitt som är markerat (Transact SQL). De avsnitt i syntax-specifikationen som omges med [ ] kan utelämnas, tecknet betyder eller. Tyvärr innehåller många exempel så kallad dynamisk SQL som medger att man kan bygga upp kommandot med variabler. Exemplen ovan använder inga variabler. 4
Lägg märke till att parenteserna för alla grupper och loggfil ser i princip likadana ut. (Underlättar inskrivning!) Se "Books On Line" för fullständig syntax och fler exempel! De är inte dock alltid så enkla eftersom de är givna som dynamisk sql för att möjliggöra variabler i koden. 5
Nästan allt går att ändra via Management Studio, men det finns uppgifter som endast går eller görs bättre med DDL-kommandon. Administratörer vill gärna skripta databaser och köra skript med kommandon, vilket kräver viss kunskap om DDL-kommandon. 6
7
8
I DDL kan man även ange datatyper enligt ANSI 92. Tex integer istället för int. 9
10
11
12
13
14
15
16
Tabeller som innehåller data kan också ändras om inte ändringen kommer i konflikt med redan sparad data. Man kan inte direkt ändra en kolumn som innehåller en sträng eller float till ett int. Foreign key kan inte läggas till / ändras om det inte finns en motsvarande pk som passar. Man kan då vara tvungen att tillåta null-värden och i efterskott manuellt mata in passande data. 17
18
19
Alla constraint s (ej NULL/NOT NULL) har ett eget namn som skapas automatiskt om man inte definierar det själv. I kolumnen frakt i Orders visas hur man kan välja ett beskrivande namn. persid i Orders är en främmande nyckel (fk) till tabellen Personal. Kopplingen fk-pk görs med REFERENCES personal(persid). Primärnyckeln i Orderrad är sammansatt av orderid och radid. En sammansatt primärnyckel kan INTE definieras genom att skriva PRIMARY KEY på dessa båda rader. Det måste göras separat t ex sist i tabellen med PRIMARY KEY (orderid, radid), I orderrad har vi också satt Referentiell Integritet med ON DELETE CASCADE och ON UPDATE NO ACTION. Vi har alltså sett två sätt att definiera constraints i samband med tabelldefinitionen. - Antingen direkt i varje rad eller sist efter alla kolumnerna. 20
Innan du drar relationerna i ett diagram, måste båda tabellerna finnas i diagrammet. På samma sätt måste båda tabellerna finnas innan man refererar till föräldratabellen i FOREIGN key constraint. För att kunna skripta tabeller i godtycklig ordning måste man därför kunna lägga till constraint i efterhand. Detta gör man med ALTER TABLE med tillägget ADD För att lägga till den sammansatta primärnyckel n id1 och id2 till tabellen personprojekt blir det så här: ALTER TABLE Personprojekt ADD PRIMARY KEY (ID1,ID2); För koppla ihop tabellerna kund och orders skriver man så här: ALTER TABLE Orders ADD CONSTRAINT FK_Kund_Orders -- frivilligt namn FOREIGN KEY (kundid) REFERENCES kund(kundid) Vi får automatiskt NO ACTION på både DELETE och UPDATE 21
22
I definitionerna kan vi se att man använt constraints ihop med kolumndefinitioner, att man ibland använt constraintnamn och ibland inte. Vi kan också se att man lagt in kommentarer i tabelldefinitionerna. Här kommer ett exempel till: CREATE TABLE jobs ( job_id int PRIMARY KEY IDENTITY CLUSTERED NOT NULL, job_desc varchar(50) DEFAULT 'New Position NOT NULL, min_lvl tinyint CHECK (min_lvl >= 10) NOT NULL, max_lvl tinyint CHECK (max_lvl <= 250) NOT NULL ) 23
24
25
Förslag till svar till vissa uppgifter 4. CREATE DATABASE Firman 5. a) ALTER DATABASE MODIFY FILE (NAME=Firman_data, SIZE=10) b) DROP DATABASE Firman 6a) int, b) bit c) money el. decimal d) float/real e) char(11) f) varchar(100) g) varchar(max) h) varbinary(max) i) nvarchar(20) k) tinyint 10. I PRIMARY filegroup 11.Man kan skapa en beräknad kolumn som inte sparas utan beräknas på av SQL Server 13. ALTER TABLE Produkt ADD antal int default (0) check (between 0 and 99) NOT NULL 15 Ia) Går bra Ib) Går inte om den har produkter Ic) Går inte om det finns Produkt med detta KatID IIa) Går bra IIb) Går bra! Relaterade produkter raderas också IIc) Går bra! KatID i relaterade Produkter ändras också. 26