INNEHÅLL Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner Kapitel 5 och 6. Beginning SQL Server 008 for Developers
INLOGGNING VIA SSMS Det finns två metoder på hur ett login kan kontrolleras, authenticate. Windows Authentication är den säkraste metoden. Då sker kontrollen via Windows inloggningssystem. Rekommenderas. Login uppgifter hämtas från Windows. Användaren måste alltså finnas i Windows. SQL Server Authentication är den metod där kontrollen enbart sker i SQL Server. Användaren behöver inte finnas i Windows. Inloggning på skolan sker först efter att du startat VPN anslutningen. Därefter kan du starta SQL Server Management Studio (SSMS) och logga in. Logga in enligt de instruktioner du fått.
SSMS SQL SERVER MANAGEMENT STUDIO När du väl har loggat in så öppnar sig SSMS. Observera att utseende kan varierar beroende på vilken version du använder. Express har inte all funktionalitet. Utformningen beror också på vad installationen innehåller. Object Explorer Resultarea 3
TOOLS - OPTIONS Här finns det mycket du kan undersöka och påverka. Ska vara avbockad under utbildningen. Annars kan du inte ändra strukturen på en redan sparad tabell. Funktionen är en säkerhetsfråga som kommit till i version 008. Syftar till att man inte oavsiktligt ska ändra strukturen på en tabell. 4
SKAPA EN DATABAS 1 Högerklicka på Databases Välj New Database Ange namnet på databasen OBS! Ägare till databasen blir den som är inloggad. <default> är du vilket gör att du inte ska (behöver) ändra. 3 Bestäm ev begynnelsestorlek och ökningsgrad. 5
SKAPA TABELL 1 Högerklicka på Tables. Välj New Table Lägg in fälten och bestäm datatyp för varje fält. 4 Bestäm egenskaper för fälten 3 Markera fältet för Pk och klicka på nyckeln. 6
FÄLT EGENSKAPER / COLUMN PROPERTIES Vad är Null Null är ingenting. Null är inget tecken. 0 är ett tecken. Allow Nulls Data Type Default Value Computed Column Får fältet innehålla Null? Normalt ska du inte tillåta Null men det finns anledningar. Vilken datatyp ska fältet ha. Förinställt värde. Om du inte själv lägger in ett värde så sätts detta automatiskt när posten sparas vid ny post. Beräknande funktion i fältet Identity Specifikation Is Identity=Yes anger att SQL Server ska uppdatera värdet i fältet automatisk. Identity Increment anger stegen, standard är 1. Identity Seed anger startvärdet, standard är 1 Vid en jämförelse: Visa alla som är mindre än 0 så visas ändå inte de som har null i fältet. 7
SKAPA PRIMARY KEY, PK Markera fältet och klicka på nyckeln. Pk, Primary Key, Primär Nyckel. En Pk bör vara numerisk och du bör låta databasen styra innehåll i den. Dvs använd räknare, Identity. Du bör inte ha en tabell utan Pk. Det går men krash Index skapas när Pk sätts (hmmm ) I egenskaper för fältet Räknare=Yes Intervall startvärde Index namn Välj Fält Indextyp Clustered Högerklicka på tabellen och välj Indexes Clustered: posterna sorteras fysiskt efter värdet i Pk. Inget eget index skapas. 8
SKAPA DIAGRAM / FOREIGN KEY (1 AV 3) 1 Högerklicka på Database Diagrams Välj New Database Diagrams 3 Välj vilka tabeller som ska med i diagrammet. Välj Yes på frågan som innebär att diagramobjektet skapas. 9
SKAPA DIAGRAM / FOREIGN KEY ( AV 3) 4 Placera dina tabeller på sätt som du önskar 5 Markera (knappen) Kundid (Pk) i Kund och dra till Kundid i Kontakt och följande bild visas. Kontrollera att det blivit rätt. Välj OK 1 0
SKAPA DIAGRAM / FOREIGN KEY (3 AV 3) 6 Fk, Foreign Key, Främmande Nyckel. Bestämmer du när du vill ha en relation mellan två tabeller. När du skapar diagram eller Högerklicka i en tabell och välj Relationships. Hur ska regelverket vara för den Fk du definierar. En Fk blir inte automatisk indexerad i MSSQL. Villkor? Pk och Fk måste vara av samma datatyp!!!! 7 Resultat 1 1
SKAPA INDEX PÅ VANLIGT FÄLT 1 Högerklicka i tabellen i Designläge Välj Indexes Keys Välj Add och markera därefter IX_Kund* Klicka på punkterna vid Columns 3 Välj fältet Namn och därefter OK. Sist väljer du Close 1
INDEX NÄR/VAR/HUR? En Pk ger alltid ett index eller en omsortering (Clustered) av posterna i tabellen. Clustered är default. En Fk ger inte automatisk i MS SQL att ett index skapas på det fält som är Fk. I MySQL indexeras fältet automatiskt som du sätter Fk på. Andra fält indexeras endast om du bestämmer att så ska ske. Du måste skapa index manuellt på det eller de fält du vill ha index på. När behöver vi indexera: En Fk bör indexeras om det blir många poster i tabellen. Ingen exakt gräns existerar utan det beror på tabellens komplexitet. Vid ett färre antal poster belastar indexet mer än det hjälper. Andra fält bör indexeras om sökning ofta kommer att ske. Man kan alltid söka på alla fält med svarstiden blir längre om det inte finns index på fältet. Men var restriktiv ha inte för många index. Om fältet ska vara unikt, exempelvis organisationsnummer, så indexerar du det och bestämmer att innehållet ska vara unikt. 1 3
Lösa Fk (heap) Du kan ha en Fk utan att använda något index i fält för Fk. Det kommer att ta längre tid men det fungerar. VARIANTER PÅ FK Indexerade Fk (sorterade / Hash) Du kan skapa ett eget index på ett fält på mångasidan som du vill använda till en Fk. Det ger en snabbare metod än Lösa Fk. Du kan dock inte sätta något regelverk (RI) för hur relationen ska fungera. Definierade Fk (sorterade / Hash) MS SQL skapar inte index utifrån den Fk du bestämmer. Du måste indexera fältet själv. Då får du samma effekt som indexerade Fk men du har också ett regelverk (RI) som kan tillämpas. Till denna typ av Fk sätter du också upp regelverket för Referentiell Integritet. KundID Namn KundID Tel 1 Kalle 1 1313 Otto 456456 3 Anna 5 34341 4 Stina 3 145466 5 Sture 1 3456 4 988654 1 34987 KundID Namn KundID Tel 1 Kalle 1 1313 Otto 1 3456 3 Anna 1 34987 4 Stina 456456 5 Sture 3 145466 4 988654 5 34341 1 4
PK / FK / SAMMANSATT - 3 OLIKA FALL KundID Namn TelID KundID Tel 1 Kalle 1 1 1313 Otto 456456 3 Anna 3 4 988654 4 Stina 4 7 34341 5 Sture 5 1 3456 6 3 145466 7 1 34987 Pk TelID Fk KundID Kundens telefoner ligger utspridda i tabellen. INDEX PÅ FK HUR BLIR DET DÅ? KundID Namn TelID KundID Tel 1 Kalle 1 1 1313 Otto 456456 3 Anna 3 4 988654 4 Stina 4 7 34341 5 Sture 5 1 3456 6 3 145466 7 1 34987 Sammansatt Pk TelID & KundID Kundens telefoner ligger utspridda i tabellen. KundID Namn KundID TelID Tel 1 Kalle 1 1 1313 Otto 1 5 3456 3 Anna 1 7 34987 4 Stina 456456 5 Sture 3 6 145466 4 3 988654 7 4 34341 Sammansatt Pk KundID & TelID Kundens telefoner ligger samlade. 1 5
INDEX + / - Att mer data lagras - Databasen blir större Insert, update och delete tar längre tid Index måste uppdateras samtidigt som data ändras/läggs till Det går snabbare visa en sorterad lista om det finns index (SELECT Enamn, Fnamn FROM Kund ORDER BY Enamn, Fnamn) Det går snabbare att hitta en post i stora tabeller om det finns index (SELECT Enamn WHERE Enamn='Berg') Relaterade poster hittas lättare om den främmande nyckeln indexeras. Främmande nycklar indexeras med fördel. (SELECT JOIN ON yid=xid) Primärnycklar och unika kolumner indexeras vanligen automatiskt 16
ATT TÄNKA PÅ FÖR BÄTTRE PRESTANDA Inte tillräckligt med index Du har inte skapat index på de fält som man ofta söker på. Svarstiderna blir därför onödigt långa. Hur är det med Fk? För många index. Du har lagt in index på fält som inte behöver det. Det skapar långa svarstider vid ändring/radering/inläggning av nya poster. Rättigheter på tabell- och kolumnnivå Undvik att sätta dessa rättighet då det tar onödigt lång tid för databasen att kontrollera rättigheterna. Felaktig databasdesign Din datamodell är felaktig. Kan ex bero på för högt antal tabeller vilket gör att det tar lång tid att sätta samman data. Kan också vara för få med för mycket dubblerade data. - Använd minsta möjliga datatyp. (tinyint, int, bigint?) - Börja tabellen med Charfälten. Lägg Varcharfälten till höger. - Definiera helst NOT NULL på fälten. 17
CONSTRAINTS - BEGRÄNSNING/VILLKOR Begreppet innebär att det finns någon form av kontrollfunktion, regel, som databasmotorn använder sig av för att kontrollera att data är riktiga och följer de villkor som vi har bestämt. Exempelvis så ska en Pk ska vara unik. Ett värde måste vara inom vissa gränser för att få sparas i databasen eller att ett fält ska ha ett visst förinställt värde, Default value. Unique Används normalt på Pk. Ett värde ska vara unikt i ett fält. En Pk måste vara unik för att det ska gå att identifiera en post unikt. Kan vara sammansatt. Får ej vara Null. Default (DF) Ett värde i en tabell kan vara Default. Exempelvis ska betalningsvillkor i Faktura vara 30 dagar som default värde (förinställt värde). Check (CK) En check, kontroll, ska ske att värde i ett fält alltid motsvarar det förväntade. Det får inte avvika. Betalningsvillkor får inte överstiga 60 dagar. Datatyp är 18 Tinyint och då kan det vara mellan 0 och 55.
DEFAULT CONSTRAINTS I faktura ska vi ha att Betalningsvillkor har ett default värde på 30 dagar. I faktura ska vi ha att Datum har ett default värde som är dagens datum getdate() finns det fler???? 19 http://msdn.microsoft.com/en-us/library/bb510741%8v=sql.100%9.aspx
CHECK CONSTRAINTS I faktura ska vi ha att betalningsvillkor inte får överstiga 60 dagar 1.Högerklicka i tabellen.välj Check Constraints i menyn. 3.Välj Add och CK_Faktura skapas 4.Skriv in betvillkor<=60 5.Bestäm funktionalitet ([Postnr] like '[0-9][0-9][0-9][0-9][0-9] ) Så kan en Check-Constraints se ut för ett postnummer. Det ska finnas en siffra i varje position. 0
BERÄKNANDE FÄLT I faktura vill man att förfallodagen ska räknas fram. Det kan ske med hjälp av fältet Datum och fältet Betvillkor där formeln kan vara: Datum + Betvillkor 1. Skapa fältet (ex FDatum). Skriv in formeln Samma beräkning men med annan formel: dateadd(day,betvillkor,datum) day anger att betvillkor är i dagar betvillkor är värdet som ska adderas till värdet i datum datum är startdatum för beräkningen Vill du veta mer om dateadd - besök Books Online http://msdn.microsoft.com/en-us/library/ms186819%8v=sql.100%9.aspx 1
HUR SER FAKTURA UT NU? Fälten som finns Nycklar som finns Constraints CK=Check DF=Default Index som finns
VYER / VIEW VAD ÄR EN VY En vy är någon form av sammansättning av kolumner från en eller flera tabeller. Innehållet till en vy hämtas dynamiskt varje gång en vy körs / öppnas. En vy kan ses som en fråga som ställs mot databasen. En vy mot Kund-tabellen. Alla fälten utom Kundid visas här. En Kundlista. Exempel En vy som visar data ur Kund, Kontakt och Kontakttyp. En telefonlista. Exempel 3
VYER / VIEW EN TABELL 1 Skapa en ny Vy Välj tabell/er Välj fält ur tabellen 3 5 Kör och resultatet visas 4 SQL Satsen skapas 4 4
VYER / VIEW FLERA TABELLER 1. Högerklick i vyn.. Välj Add table 3. Lägg till flera tabeller 4. Välj fälten 5. Kör (dvs välj Execute eller tryck Ctrl R) 5
NÅGRA FUNKTIONER 6