1
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