Databaser & databasdesign SQL
Föreläsningens innehåll SQL: Syfte? SQL: Att skriva SQL SQL: Data manipulation SQL: Data definition
Först liten repetition av några relationella begrepp (Date, 2000, p.111)
SQL: Syfte? Skapa databaser och relationella strukturer Utföra diverse datahanteringsuppgifter Att tillhandahålla möjlighet att ställa både enkla och komplexa frågor Indelas i en DDL-del och en DML-del
SQL: Att skriva SQL Mer läsbar SQL-kod: Varje sats börjar med en ny rad Början av varje rad ska ligga i linje med andra satser Då en sats har flera delar, bör varje del börja på en ny indragen rad Extended Backus Naur Form (BNF): VERSALER - reserverade ord Gemener - användardefinerade ord a|b - val mellan olika alternativ {a} – element som krävs [a] – valbart element (...) – valbar iteration
SQL: Ett exempel CREATE TABLE n_kund ( kundnummer INT NOT NULL, namn VARCHAR(50) NOT NULL, personnummer CHAR(11), PRIMARY KEY (kundnummer));
SQL: Data manipulation Fyra huvudsakliga typer av frågor: SELECT – presentera data ifrån databasen INSERT – lägga till nya data i en tabell UPDATE – uppdatera innehåll i en tabell DELETE – ta bort data från en tabell
SQL-DML SQL bygger på relationsalgebra:
SQL/DML: SELECT-sats SELECT [DISTINCT | ALL] {* | [columnExpression [AS newName]] [,...] } FROM TableName [alias] [, ...] [WHERE condition] [GROUP BY columnList] [HAVING condition] [ORDER BY columnList]
SQL-DML: sökning i tabell Exempel: Vi vill hämta alla rader i tabellen artikel. SELECT * FROM artikel; Exempel: Vi vill hämta enbart kolumnerna artnr och artnamn från tabellen artikel. SELECT artnr, artnamn FROM artikel; Exempel: Vi vill hämta alla artiklar som kostar mer än 1000kr. SELECT * FROM artikel WHERE pris>1000; operator betydelse exempel = lika med artnr=’10001’ <> skilt från artnr<>”10002” > större än pris>1000 < mindre än pris<20 >= större än eller lika med antal >=50 <= mindre än eller lika med pris<=20
SQL-DML Det finns även inbyggda funktioner Exempel: Hur många artiklar har vi? SELECT COUNT (*) FROM artikel;
SQL-DML UPDATE (uppdatera befintliga data) Exempel: Vi vill ändra pris till 33kr och lagerantal till 10 för artkel 10001. UPDATE artikel SET pris=33.00, lagerantal=10 WHERE atrnr=’10001’; INSERT (lägga till en ny rad) Exempel: Vi vill lägga till en ny artikel med artikelnummer 10006 och namnet SuperComputer. De andra fälten lämnas i detta fall blanka. INSERT INTO artikel (artnr, artnamn) VALUES (’10006’, ’SuperComputer’);
SQL-DML DELETE (ta bort rad/rader) Exempel: Vi vill ta bort alla rader i tabellen artikel. OBS! Anges inga villkor tas ALLA rader bort!!! DELETE FROM artikel; Exempel: Vi vill ta bort artikeln 10006. DELETE FROM artikel WHERE artnr=’10006’;
En liten övning i SQL a) Vilka leverantörer finns det? (Visa namn) b) Vilka artiklar är beställda från leverantörer? (Visa antnr och antal) c) I vilka orter finns våra leverantörer? (Obs! Ej dubletter!) Segerlund, M. & Stridsman, F. (1998). SQL-introduktion, p29. Lysekil: Pontes.
SQL: DDL skapa en tabell Exempel: Skapa tabellen artikel (artnr, artnamn, lagerantal, bestpunkt, pris). Det finns olika typer av dataformat som används beroende på vad som ska lagras, tex CHAR(n) – n tecken, INTEGER – ett heltal eller DECIMAL(n,m) – ett decimaltal med n siffror och m decimaler. Dessa format kan variera beroende på vilken databashanterare vi arbetar mot. NOT NULL innebär att ett värde måste matas in, tex för ett primärnyckelfält. CREATE TABLE artikel (artnr CHAR(5) NOT NULL, artnamn CHAR(15) NOT NULL, lagerantal INTEGER, bestpunkt INTEGER, pris DECIMAL(5,2));
SQL-DDL Utöka tabeller Ta bort en tabell Skapa index Exempel: Vi vill lägga till en enhetskolumn till tabellen artikel. ALTER TABLE artikel ADD (enhet CHAR(3)); Ta bort en tabell Exempel: Vi vill ta bort tabellen artikel. DROP TABLE artikel; Skapa index att skapa en unik nyckel i en tabell att göra sökningar snabbare Exempel: Vi vill göra artnr till unikt index. CREATE UNIQUE INDEX artindex ON artikel(artnr);
Open DB Connectivity (ODBC) är ett funktionsbibliotek utformat för att tillhandahålla ett gemensamt programmeringsgränssnitt (API: Applikation Programming Interface) mot det underliggande databassystemet. Vi kan nå databaser över nätverket med hjälp av ODBC. Det unika med ODBC är att ingen leverantörsspecifik kod behövs. Vi kan tex använda samma kod för frågor till en tabell i MS SQL-server, Informix eller i MySQL... ODBC gör programmen mer portabla mellan olika system, men långsammare än när man använder systemspecifika DB bibliotek. Program anropar ODBCs funktioner Drivrutins-hanterare läser in ODBC-drivrutin ODBC-anrop sänder SQL-frågor, returnerar resultat... Datakälla: underliggande DBMS
Database Languages Data Definition Language (DDL) Allows the DBA or user to describe and name entities, attributes, and relationships required for the application plus any associated integrity and security constraints. Data Manipulation Language (DML) Provides basic data manipulation operations on data held in the database. Procedural DML allows user to tell system exactly how to manipulate data. Non-Procedural DML allows user to state what data is needed rather than how it is to be retrieved. Fourth Generation Languages (4GLs)
Constraint on relationships Cascade delete The relation below try to describe the structure of an order. Can an orderhead exist without a row? If you delete a certain row in orderhead…what happens? Cascade update If you update oredernr in orderhead…what happens? Orderhead Orderrow * 1 Ordernr Date custnr Partnr Quantity
What is a stored procedure? How its working? SQL server has a language called transact SQL and its used to create modules of logic database actions. It is stored in database with a name to call when you need it. An example of executing a stored procedure to create a new customer: EXEC sp_newcustomer (’23’,’Jesper’, ’Hakeröd’,…) More practise on this in laboratory work 2.
Example of a stored procedure -- ============================================= -- Author: <Jesper> -- Create date: <2009-10-10> -- Description: <Insert a new customer> CREATE PROCEDURE [dbo].[uspNewCustomer] (@CustomerID as bigint, @firstname as nvarchar(50), @surename as nvarchar(50), @address as nvarchar(50), @cellular as nvarchar(50), @email as nvarchar(50), @zipcode as nvarchar(10)) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insertion of the customer INSERT INTO CUSTOMER (CustomerID, firstname, surename, address, cellular, email, zipcode) VALUES (@CustomerID, @firstname, @surename, @address, @cellular, @email, @zipcode); END
Kommer ni ihåg begreppen? Supernyckel = Ett eller flera attribut som ensamt eller sammansatt unikt identifierar en tuple i en relation. Kandidatnyckel = En supernyckel där det inte kan tas bort något attribut som ingår i supernyckeln, utan att man mister den unika identifieringen av en tuple. Kompositnyckel = En nyckel som består av flera attribut kallas för sammansatt- eller kompositnyckel. Primärnyckel = En primärnyckel är en vald kandidatnyckel som unikt kan identifiera en tuple. Alternativ nyckel = kandidatnycklar förvandlas till alternativa nycklar när primärnyckeln valts. Främmande nyckel = Ett attribut eller en samling attribut i en relation som matchar en kandidatnyckel i en annan relation.
Normaliseringsformer repetition Onormaliserat – UNF En tabell som innehåller repeterade grupper. Första Normalform - 1NF En tabell är i 1NF om det i varje tuple bara finns ett värde för varje attribut. Välj även ut en primärnyckel. Andra normalform - 2NF En tabell är i 2NF om alla icke nyckelattribut är funktionellt beroende av hela primärnyckeln. Tredje normalform - 3NF En tabell är i 3NF om alla icke nyckelattribut inte är transitivt beroende av primärnyckeln.
Data dictionary - entities
Data dictionary - attributes