Notater til Avancerede Databaser. Vidar Jon Bauge 2007



Relaterede dokumenter
Begrænsninger i SQL. Databaser, efterår Troels Andreasen

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

En Kort Introduktion til Oracle

Introduktion til SQL queries

DB undervisning 01-01

Databaseadgang fra Java

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach 2002

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Views etc. Databaser

Skriftlig eksamen i kurset. Informationssystemer

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin

Eksempel på en database: studenter, kurser, eksamener

Side 1. Databaser og SQL. Dagens gang. Databasebegreber. Introduktion til SQL Kap 1-5

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Data lagring. 2. iteration (implement backend)

Eksamen, DSDS, efterår 2008

1. Basal select med (stjerne)

Eksamen, DSDS, efterår 2007

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Rigtig SQL Programmering

Introduktion til programmering

Skriftlig opgave. Designtanker i database-nære systemer

Datamodeller. 1. Elementerne. Vi betragter E/R-diagrammet, som et diagram over entiteter og relationer Tegneregler: Entitet

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

Database-sproget SQL. SELECT A1,, Ar FROM R1,, Rk WHERE B med. SQL ~ SEQUEL ~ Structered English QUEry Language SQL-forespørgsel, generel form

Anvisning i aflevering af bitemporale data

Import af rekursivt (parent-child) hierarki i Palo

Databasesystemer. IT Universitetet i København 16. januar 2006

Database. lv/

Eksamen, DSDS, forår 2009

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Sidste forelæsning. Jacob Aae Mikkelsen. 28. april 2013 IMADA. Jacob Aae Mikkelsen (IMADA) Sidste forelæsning 28.

Databasesystemer. IT Universitetet i København 7. juni 2005

Opgave 1 Basal select med (stjerne)

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Databasesystemer. IT Universitetet i København 8. juni 2006

Database programmerings tips

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Skriftlig eksamen i. Databaser. Vinter 2002/2003. Vejledende løsninger

Anne Randorff Højen

Database-sproget SQL. SELECT A1,, Ar FROM R1,, Rk WHERE B med. SQL ~ SEQUEL ~ Structered English QUEry Language SQL-forespørgsel, generel form

Dokumentering af umbraco artikeleksport:

Afleveringsopgave. Efterår 2001

Introduktion til SQL

Kursus/workshop: SQL

Efterår 2002 Note 10. Temaopgave

Database kursus Forår 2013

Python programmering. Per Tøfting. MacFest

Søren Løbner (lobner) ddb Databaser

MsSQL: Basal performance tuning, part 1

Oracle PL/SQL. Overview of PL/SQL

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Introduktion til programmering

Database design for begyndere

ER-modellen. Databaser, efterår Troels Andreasen. Efterår 2002

Conceptual, logic, physical

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

MapBasic brugergruppe. Geografiske objekter. Peter Horsbøll Møller Senior Systems Engineer April 2013

SQL Server 2016 Data Adgang

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

DML, Foresprgsler Relationel algebra + noget mere! af skemaer (overlap m. DDL)

XML Difftool brugervejledning

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

Objektorientering og databaser

Manglende konsistens i datamodellen og upræcise SQLsætninger er årsagen til, at mange IT-systemer fejler.

3. semester, 2. projekt: Database

Workshop Persistence

Software Projekt NoSQL vs RMDB

Ratingsystem i PHP og MySQL

Fra ER-Diagram til Relationel model i 7 step

Database for udviklere. Jan Lund Madsen PBS10107

Forelæsning Uge 2 Torsdag

Begrynder til at lave log ind system

Samspillet mellem databaser og kort styres af GeoCAD programmet GeoDB.

ER-modellen. Databaser, efterår Troels Andreasen. Efterår 2002

Skriftlig eksamen i Databaser, Vinter 2001/2002. Pa opfordring har jeg udarbejdet mulige lsninger pa eksamensopgaverne, men

Reeksamen, DSDS, forår 2008

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

Funktions opdatering ASPECT4 QueryManager (B=fejl, S=support/Info, T=Opgave, W=Releaseønske)

Håndbog Til CPR services. Bilag 8 GCTP-standard m.m. CPR-kontoret

SQL for MySQL-begyndere

Få sin querystring til at fungere. (Nybegyndere)

Kapitel 4 Løkker i C#

Indholdsfortegnelse for kapitel 3

Hent filoplysninger fra billeder og filer

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Relationel Algebra...1. Indholdsfortegnelse...1. Operationer på den relationelle model...2

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

Eksamen, DSDS, forår 2008

SWC eksamens-spørgsmål. Oversigt

DATABASE Projekt 1-3. semester

Projekt database. 3 Semester - Mul a Projekt 1. Yaser Osman cph-mo102@cphbusiness.dk. Dan Eskildsen cph-de32@cphbusiness.dk

Databasesystemer, forår 2005 IT Universitetet i København. Forelæsning 4: Mere om E-R modellering. 24. februar Forelæser: Rasmus Pagh

Databasesystemer. IT Universitetet i København 8. juni 2006

Databasesystemer, forår 2005 IT Universitetet i København. Forelæsning 3: E-R modellering. 17. februar Forelæser: Rasmus Pagh

Klasser og objekter. (Afsnit i manualen)

Projekt Database, Gruppe 4A. Projekt 1, 3. Semester D A T A B A S E. Klasse MulA13 Gruppenummer: A4

DATABASE - MIN MUSIKSAMLING

Modul 2 Database projekt Multimediedesign 3. semester Gruppe 3 IRF/TUJE

Transkript:

Notater til Avancerede Databaser Vidar Jon Bauge 2007 Datamatikeruddannelsen forår 2007 Side 1 af 65

Indholdsfortegnelse Datamodellering med ER-diagrammer...5 Entiteter...6 Attributter...6 Entitetstyper og Entitets sæt...6 Nøgler...7 Domæner, eller værdisæt...7 Begrebsmæssig databasedesign...7 Relationer...7 Relations typer og relations sæt...7 En relations grad...7 Rollenavne og rekursive relationer...7 Relationer som attributter...8 Begrænsninger for relationer...8 Kardinalitet i binære relationer...8 Deltagelse og ekistensafhægighed...8 Strukturelle begrænsninger...8 Attributter til relationer...9 Constraints & høne/æg problemet...10 Integritet...10 Primære nøgler og fremmednøgler...10 Constraints...10 Oprettelse af constraints...10 Typer af Constraints - integritet og navngivning...11 Navngivning...12 Sletning og ændring af Constraints...12 Få vist constraints i Oracle...13 Høne & æg problemet...13 Opret tabeller i Oracle...14 Normalisering...15 Afhængighed...15 Anomalier...15 Normalformer...16 1. Normalform...16 2. Normalform...16 3. Normalform...16 Afhængighedsdiagram...16 Normalisering af tabeller...17 Data visning, opdatering og sletning (DML)...19 INSERT...19 Operatorer der konverterer dato/tid...19 Afrunding...19 NULL værdier...19 Indsættelse ved hjælp af variabler...19 UPDATE...20 DELETE...20 Datamatikeruddannelsen forår 2007 Side 2 af 65

SELECT...20 Funktioner:...21 Funktioner og Grupperinger...22 Funktioner på enkle rækker...22 Funktioner på karakterer...22 Funktioner på tal...22 Funktioner på dato...23 Funktioner der konverterer data...23 Indlejring...23 Formater...23 Funktioner på grupper og aggregeringer...25 Joins...26 Hvorfor man bruger joins...26 Det kartesiske produkt...26 Forskellige former for joins...26 Equijoin...27 NonEquijoin...27 Outer join...27 Self join...28 Sub-queries...29 Single row subqueries...29 Oprette tabeller ved hjælp af subqueries...30 INSERT ved hjælp af subqueries...30 Insert til flere tabeller...30 UPDATE ved hjælp af subqueries...32 DELETE ved hjælp af subqueries...32 Multiple row subqueries...32 JDBC - forbindelse fra et java program til Oracle SQL...33 Stored procedures i Java...35 Pakken java.sql...35 Prepared Statements (Precompiled Statements)...35 CallableStatement...36 Sequences...37 PL/SQL syntaks...38 Reserverede ord og variabelnavne...38 PL/SQL's blokstruktur...38 Data typer...39 PL/SQL kontrol strukturer og Embedded SQL...42 Selection Structure...42 IF..THEN strukturer...42 CASE strukturer...44 Looping strukturer...45 Basic loop...45 WHILE loop...45 FOR loop...45 SQL kommandoer i PL/SQL blokke...46 SELECT kommandoer...46 INSERT kommandoer...46 UPDATE kommandoer...46 DELETE kommandoer...47 Datamatikeruddannelsen forår 2007 Side 3 af 65

PL/SQL Cursors og Exceptions...48 Cursors...48 Eksplicit og Implicit Cursor...48 Operationer på en eksplicit cursor...48 Attributter til eksplicit cursor...49 For løkker i cursors...50 Cursor der anvender FOR løkker med subqueries...50 Låsning, opdatering og sletning af rækker i cursors...51 Cursor med parametre...51 Ref cursor type...51 Exceptions...52 Typer af Exceptions...52 Fange fejl kode og meddelelse...54 Raise_application_error procedure...54 PL/SQL Composite data typer...55 Records...55 Nested record...55 Tables...56 Varrays...58 PL/SQL blokke...59 Procedurer...59 Funktioner...60 Packages samling af objekter og procedurer...61 Package header...61 Package body...62 Triggers...63 INSTEAD OF trigger...64 Triggers og sequences...64 Data dictionnary views...65 Datamatikeruddannelsen forår 2007 Side 4 af 65

Datamodellering med ER-diagrammer Begrebsmæssig modellering er en vigtig fase i databasedesign. Modellerne præsenteres i ERdiagrammer, der viser en begrebsmæssig model på højt niveau. ER diagrammet viser datamodellen i form af entiteter, relationer og attributer. 1. Kravspecifikation og analyse. Indsamling og specificering af kravene til databasen. Dette kan f.eks ske gennem interviews af databasens brugere. Output: Krav til dataene, en oversigt over applikationens funktionelle krav, der beskriver hvilke transaktioner der skal anvendes på databasen i form af hentning og ændring af data 2. Begrebsmæssig skema Denne fase kaldes begrebsmæssig design, og resulterer i et begrebsmæssige skema. Dette giver en detaljeret beskrivelse af brugerens krav og detaljerede beskrivelser af Entiteter, Relationer og Begrænsninger. Det begrebsmæssige skema indeholder ingen informationer om databasens implementering. Dette gør den egnet til overordnede præsentetationer for ikke ituddannede personer. Dette skema kan senere anvendes som en reference for at kontrollere om implementeringen overholder kravene. 3. Logisk design mapning af datamodellen. Denne fase indebærere mapning af modellen til en database i en konkret DBMS. Output: Et databaseskema i DBMS'ens implementering af datamodellen. 4. Fysisk design. Her specificeres relationerne fysisk i databasen, interne lagringsstrukturer, indekseringer, stier og organisering af filer i databasen defineres. Datamatikeruddannelsen forår 2007 Side 5 af 65

Entiteter Det grundlæggende objekt der præsenteres i ER diagrammer, er entiteter og deres attributter. En entitet repræsenterer en ting i den virkelige verden, der har en uafhængig eksistens, enten i form af fysisk eller begrebsmæssig eksistens. En entitet med fysisk eksistens kan være en speciel person, bil, bygning, vare etc. En entitet med begrebsmæssig eksistens kan f.eks. være et kursus, et job, et firma etc. Alle entiteter har attributter, der beskriver dem. Attributter for en person kan være navn, adresse etc. Attributter Simpel eller atomar Attributter der indeholder én oplysning, og som derfor ikke kan deles op. Sammenlagt eller Composite En attribut der indeholder flere oplysninger, og som derfor kan deles op. Et eksempel på dette er attributten 'Postadresse' med indholdet 4100 Store Lilleby, der kan deles op i attributtene 'Postnummer' med indholdet 4100 og 'Postdistrikt' med indholdet Store Lilleby. Single og Multi valued De fleste attributter kan kun have en værdi i en speciel entitet. Sådanne attributter er single value. Nogle attributter kan imidlertid have flere værdier i den samme entitet, f.eks en tofarvet bil, vil have flere værdier i attributten 'Farve'. En multi value attribut kan have begrænsninger for hvor mange, eller få, værdier de må have. En bils farve kan måske have 1-3 værdier, der indikerer at bilen har mindst en, men maksimalt 3 farver. Stored og afledt (Derived) I nogle tilfælde er attributter relateret, F.eks 'Fødelsdato' og 'Alder'. Alderen kan beregnes ud fra fødselsdatoen, hvorfor alderen er en afledt attribut. Kompleks Entitetstyper og Entitets sæt En database består af en gruppe entiteter der har lignende egenskaber. En database over medarbejdere ønsker at gemme de samme oplysninger om hver enkelt medarbejder. Entiteterne for de ansatte har de samme attributter, men indeholder forskellige værdier. Alle entiteterne i en database på et givent tidspunkt, kaldes et entitetsæt. Entiteter repræsenteres i ER diagrammet som en firkant med navnet i. Attributtene tegnes son ovaler der er forbundet til entiteten med en linje. Multi value attributter tegnes med en dobbel linje i ovalen. Composite attributter tegnes som en attribut, hvor de foskellige værdier vises Entitet med attributter som ovaler der er forbundet til attributten. Datamatikeruddannelsen forår 2007 Side 6 af 65

Nøgler Nøgler er attributter der indeholder en unik værdi for hver enkel entitet, og derfor kan anvendes til at identificere en bestemt entitet. En nøgle kan bestå af en eller flere attributter. En nøgle der består af flere attributter, kaldes en composite key eller sammensat nøgle. Den nøgle man vælger til identifikation af entiterne kaldes primary key, eller primærnøglen. De andre nøgler kaldes candidate keys, eller kanditatnøgler. Domæner, eller værdisæt Alle simple attributter i en entitet kan associeres med et værdisæt, eller domæne. Et eksempel kan være attributten 'Alder', der kan være heltal fra 16-65 i en database for medarbejdere. Værdisæt defineres typisk ud fra databasens grundlæggende data typer. Der findes datatyper, der repræsenterer heltal, kommatal, dato, booleans etc. Begrebsmæssig databasedesign 1. Analyser og identificer entiteter i problemområdet. 2. Analyser om entiterne og deres relationer afspejler problemområdet. Relationer En relation mellem entiteter, definerer et sæt associationer, eller et relationsæt mellem entiteter af disse entitetstyper. Relationerne i et relationsæt, repræsenterer en mængde instancer af den samme relation, og får derfor en fælles betegnelse. De entiteter der indgår i relationen deltager, eller participates, i instansen af relationen. Relations typer og relations sæt Alle relationer af samme type refereres med relationens navn, dvs en relation Afdeling-Ansat, kan få navnet hyrer. Et relationssæt, betegner alle forekomster af en relation på et bestemt tidspunkt. En relations grad. Graden til en relation, betegner hvor mange entiteter der deltager i relationen. En binær relation omfatter 2 entiteter, altså en relation af anden grad. En relation der omfatter tre entiteter, er ternary. Rollenavne og rekursive relationer Alle entiteter der deltager i en relation, spiller en speciel rolle i denne. Rollenavnet, betegner den rolle entiteten har i relationen. I relationen Personale -ansat i- Afdeling, kan entiteten Personale have rollen Ansat og Afdeling have rollen Arbejdsgiver. Rollenavne er ikke påkrævet i relationer hvor de deltagende entiteter er klart adskilt, så man tydelig kan se deres roller. I nogle relationer er dette imidlertid ikke alltid tydeligt, specielt i rekursive relationer, hvor en relation kun omfatter en entitet. Relationer som attributter. I nogle tilfælde er det praktisk at betragte relationer som attributter. Når en relation skal implementeres i databasens relationer, vil den typisk blive oprettet som en attribut i den entitet Datamatikeruddannelsen forår 2007 Side 7 af 65

relationen går til. Det vil sige at hvis man har en relation Personale -ansat i- Afdeling, vil man oprette en attribut, eller kolonne Afdeling i relationen Personale, der peger på primær nøglen i relationen Afdeling. Begrænsninger for relationer. Kardinalitet i binære relationer. Relationer har som regel begrænsninger, der udtrykker hvor mange mulige kombinationer af entiteter der må deltage i det tilsvarende relationsæt. Disse begrænsningerne er bestemt ud fra hvordan mini-verden ser ud. Man kan f.eks have en regel der siger at en medarbejder kun kan være ansat i èn afdeling. Man skelner mellem to typer af begrænsninger: Kardinalitet og deltagelse. Kardinalitet i binære relationer. Kardinaliteten i en binær relation, definerer det maksimale antal af instanser af en relation en entitet kan deltage i. F.eks at en medarbejder kn kan være ansat i èn afdeling. Kardinalitet vises ud for den rombe der repræsenterer kardinaliteten, med symbolene 1, N og M. Deltagelse og ekistensafhægighed. Deltagelse udtrykker at eksistensen af en entitet er afhængig af at den er relateret til en anden entitet. Denne begrænsning udtrykker det mindste antal instanser af relationen en entitet kan deltage i, Derfor kaldes deltagelse også for minimum cardinality constraint. Der er to typer af deltagelse: Total deltagelse (Total participation) Hver entitet i entitetsættet skal have en relation af den pågældende type. Dette kan f.eks gælde relationen Personale ansat-i Afdeling hvilket vil sige at en ansat skal være ansat i en afdeling, og en instans af entiteten Personale kan ikke eksistere hvis den ikke deltager i en relation med en instans af entiteten Afdeling. Delvis deltagelse (Partial participation) Nogle af, eller en del af entitetsættet detager i en relation af den pågældende type.. En ansat skal være ansat i en afdeling, men alle ansatte er ikke leder af en afdeling. Dette vil sige at hvis man har en relation Personale leder Afdeling, taler man om en delvis deltagelse. Kun en del af entitetsættet deltager i denne relation. Strukturelle begrænsninger Kardinalitet i en binær relation. Kardinalitet og afhængighed udgør de strukturelle begrænsninger der findes for relationer. Datamatikeruddannelsen forår 2007 Side 8 af 65

Attributter til relationer. Relationer kan have attributter tilsvarende attributter til entiteter. Hvis man f.eks skal registrere hvor mange timer en medarbejder arbejder på et bestemt projekt, kan man sætte attributten arbejdstimer på relatione mellem Personale og Projekt. Attributter til relationer vil blive implementeret på følgende måde: 1:1 relation Til en af de deltagende entiteter. Eksempel: Attribut til en relation. 1 1 Medarbejder leder Afdeling start_dato I dette tilfældet kan attributten start_dato implementeres både i Medarbejder, hvor den begrebsmæssig hører hjemme, eller i Afdeling, siden der bare optræder en entitet i hver ende af relationen. 1:N relation Attributten kan kun overføres til entiteten på relationens N-side. Eksempel: N 1 Medarbejder arbejder-for Afdeling start_dato I dette tilfælde kan attributten kun implementeres i entiteten Medarbejder. M:N relation Her kan placering af attributten bestemmes ud fra kombinationen af deltagende entiteter i relationen. Eksempel: Datamatikeruddannelsen forår 2007 Side 9 af 65

Shah side 72-76, s. 84-88 Integritet Constraints & høne/æg problemet Der er 2 grundlæggende regler for integritet, der skal sikre konsistente data: 1. Entitets Integritet Ingen kolonner i en primærnøgle må indeholde felter med værdien NULL. En primærnøgle sikrer entydig identifikation af en bestemt række eller entitet. Hvis en eller flere rækker har NULL værdier i kolonner der er en del af primærnøglen, mangler der informationer til denne identifikation. 2. Referentiel Integritet Værdien i en fremmednøgle kan være NULL. Hvis et felt der er en fremmednøgle indeholder en værdi, skal den samme værdi kunne findes i primærnøglen til den tabel fremmednøglen henviser til. Primære nøgler og fremmednøgler Primærnøgle og fremmednøgle er typer constraints, der sikrer henholdsvis entitets integritet og referentiel integritet. Constraints Oprettelse af constraints Constraints kan oprettes på 2 niveauer i en tabel: 1. Kolonne niveau Referer til en enkel kolonne, og erklæres ved oprettelsen af denne. Alle constraints, undtaget Foreign Key og Composite Primary Key kan oprettes på kolonne niveau. 2. Tabel niveau <Kolonne Navn> datatype [CONSTRAINT constraint navn] Constraint Type; Referer til en eller flere kolonner, og erklæres ikke ved oprettelsen av kolonnerne. Anvendes normalt efter at alle kolonner er oprettet. Alle constraints undtaget Not Null, kan oprettes på tabel niveau. [CONSTRAINT constraint navn] Constraint Type(Kolonne Navne...); Datamatikeruddannelsen forår 2007 Side 10 af 65

Typer af Constraints - integritet og navngivning PRIMARY KEY Constraint Sørger for at tabellen overholder entitets integritet. Definerer tabellens primærnøgle, og sætter automatisk en NOT NULL og UNIQUE constraint på primærnøglens kolonner. Hvis en PK består af flere kolonner, skal den defineres på tabel niveau. Kolonne niveau: DeptId NUMBER(2) CONSTRAINT dept_deptid_pk PRIMARY KEY Tabel niveau: CONSTRAINT dept_deptid_pk PRIMARY KEY(DeptId); FOREIGN KEY Constraint Sørger for at tabellen overholder referentiel integritet. Definerer hvilke kolonner der indgår i fremmednøglen, og hvilken tabel der henvises til. I Oracle implementeres fremmednøglen som pointere. For at oprette en fremmednøgle, må tabellen der henvises allerede være oprettet, med den definerede kolonne. Desuden må værdien i en fremmednøgle kunne genfindes i den tabel der henvises til. Ved oprettelse af en frememdnøgle, kan man tilføje en ON DELETE CASCADE clause, der sikrer at en kan slette en fremmednøgle, ved at de tilsvarende rækker i den henviste tabel også slettes. CONSTRAINT student_facultyid_fk FOREIGN KEY (FacultyId) REFENCES Faculty(FacultuId); NOT NULL Constraint Denne constraint sikrer at værdien NULL ikke kan anvendes i en kolonne. En primærnøgle får automatisk denne constraint, der typisk anvendes på en fremmednøgle eller andre kolonner hvor NULL ikke må forekomme. Kolonne niveau: Name VARCHAR2(15) CONSTRAINT Faculty_name_nn NOT NULL; UNIQUE Constraint Denne constraint forlanger at alle værdier i en tabel/kolonne er unik Kolonne niveau: DeptName VARCHAR2(12) CONSTRAINT dept_dname_uk UNIQUE; Tabel niveau: CONSTRAINT dept_dname_uk UNIQUE(DeptName); Datamatikeruddannelsen forår 2007 Side 11 af 65

CHECK Constraint Definere værdier der skal indeholdes i en tabel/kolonne. Der kan sættes flere CHECK constraints på en kolonne. Kolonne niveau: DeptId NUMBER(2) CONSTRAINT dept_deptid_cc CHECK((DeptId >= 10) and (DeptId <= 99)); Tabel niveau: CONSTRAINT dept_deptid_cc CHECK((DeptId >= 10) and (DeptId <= 99)); NOT NULL CHECK Constraint En NOT NULL constraint kan erklæres som en CHECK constraint, og kan på denne måden erklæres både på tabel og kolonne niveau. Name VARCHAR2(15) CONSTRAINT Faculty_name_ck CHECK(Name IS NOT NULL); DEFAULT VALUE Constraint (Ikke en constraint!) Dette er for så vidt ikke en constraint. Dette er et direktiv der sætter en default værdi når der oprettes en ny række, med NULL i de felter hvor dette direktiv er anvendt. State CHAR(2) DEFAULT 'NY'; Navngivning Navnekonvention for constraints er som følger: <Tabel navn>_<kolonne navn>_<constraint forkortelse> F.eks Employee_EmployeName_nn Forkortelsene er vist i tabellen til højre. Hvis en constraint ikke navngives når den erklæres, vil Oracle give den et navn efter SYS_Cn formatet, hvor n er et unikt nummer, f.eks: SYS_C000011 Altså ikke brugervenlige navne. Constraint PRIMARY KEY pk FOREIGN KEY NOT NULL UNIQUE CHECK Forkortelse fk nn uk cc eller cc Forkortelse til constraint navne konventionen. Sletning og ændring af Constraints Ved sletning og ændring af constraints, skal man sørge for at entitets- og referentiel integritet overholdes. Ellers vil DBMS afvise ændringen/sletningen. Dette kan opnås ved at anvende clauser som ON UPDATE CASCADE eller ON DELETE NO ACTION ved oprettelse av fremmednøgler. Datamatikeruddannelsen forår 2007 Side 12 af 65

Få vist constraints i Oracle SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'Student'; Constraints som ikke er erklæret med et navn, vil blive vist med sit SYS_Cn navn. Dette gælder til NOT NULL constraint, der ofte erklæres ved oprettelse af en kolonne som vist nedenfor. Høne & æg problemet Høne & æg problemet går simpelthen ud på hvad man kan eller skal oprette først. Man kan ikke oprette en fremmednøgle til en tabel der ikke eksisterer. Derfor vælger man ofte at oprette samtlige tabeller først, med primærnøgler og andre constraints. Derefter oprettes alle fremmednøgler i alle tabeller. Datamatikeruddannelsen forår 2007 Side 13 af 65

Opret tabeller i Oracle CREATE TABLE FACULTY ( Facultyid NUMBER(3), Name VARCHAR2(15) CONSTRAINT FACULTY_Name_nn NOT NULL, RoomId NUMBER(2), Phone CHAR(3) CONSTRAINT FACULTY_Phone_uk UNIQUE, DeptId NUMBER(3), CONSTRAINT FACULTY_Facultyid_pk PRIMARY KEY (Facultyid) ); --Foreign keys in FACULTY ALTER TABLE FACULTY ADD CONSTRAINT FACULTY_RoomId_fk FOREIGN KEY (RoomId) REFERENCES LOCATION(RoomId) initially deferred deferrable; ALTER TABLE FACULTY ADD CONSTRAINT FACULTY_DeptId_fk FOREIGN KEY (DeptId) REFERENCES DEPARTMENT(DeptId); Datamatikeruddannelsen forår 2007 Side 14 af 65

Normalisering Normalisering af en database, har til formål at sikre ens tabeller, eller relationer, i mod dårligt, eller fejlagtigt design. En dårlig designet tabel kan f.eks. indeholde redundans, hvilket vil sige at de samme data optræder mange steder i en tabel, eller i databasen. Dermed skal de samme data opdateres på mange steder, hvilket øger muligheden for fejl. Afhængighed Her er det tale om afhængighed til kolonnerne i primærnøglen. Hvilket vil sige at man er afhængig af kolonnerne i primærnøglen for at entydigt identificere en bestemt række. Der findes 3 typer afhængighed: 1. Total eller fuld afhængighed Nogle af de kolonner der ikke indgår i primærnøglen, er afhængige af alle kolonnerne i primærnøglen. Dvs. at man behøver alle kolonner i primærnøglen til at identificere en række. 2. Partiel eller delvis afhængighed Nogle af de kolonner der ikke indgår i primærnøglen, er afhængige af nogle kolonner i primærnøgle. Dvs. at man ved hjælp af nogle kolonnerne i primærnøglen kan identificere en række. 3. Transitiv afhængighed Nogle af de kolonner der ikke indgår i primærnøglen, er afhængige af andre kolonner der ikke indgår i primærnøglen. Dvs at man ved hjælp af kolonner der ikke indgår i primærnøglen kan identificere en række. Anomalier Update Anomali Problemer i databasen der kan opstå ved opdateringer af rækker (data). F.eks hvis man ved ændringer i en varoplysning skal ændre den samme oplysning for hver faktura der ligger i databasen med denne bestemte vare. Insertion Anomali Problemer i databasen der kan opstå ved indsættelse af nye rækker (data). Hvis man, f.eks lægger in en ny vare, bliver nødt til at oprette en faktura der fakturerer en sådan vare. Delete Anomali Problemer i databasen der kan opstå når man sletter rækker (data). Hvis man f.eks ved sletning af en faktura kommer til at fjerne en bestemt vare fra databasen. Datamatikeruddannelsen forår 2007 Side 15 af 65

Normalformer 1. Normalform En tabel er på 1. normalform når: 1. Der er defineret en primærnøgle. Denne kan bestå af en eller flere kolonner. 2. Alle kolonner der ikke indgår i primærnøglen, er funktionelt afhængige af kolonnerne i primærnøglen. 3. Tabellen indeholder ingen kolonner der indeholder mere end én værdi. I nedenstående eksempel har 'Varebetegnelse' og 'Antal' mere end en værdi. FakturaNr KundeN r KundeNavn VareNr Varebetegnelse Pris Antal 0103 1248 KlikService Aps 125478 Runde knapper 0,56 1040 125487 Metal knapper 0,68 1125 0104 1256 BukseSmeden A/S 125627 Bukseben 42 116 125668 Lynlåse 12 74 0106 1278 Nål & Tråd Inc. 125211 Synåle 0,85 1002 2. Normalform En tabel er på 2. normalform når: 1. Den er på 1. normalform 2. Der er ingen partielle afhængigheder. 3. Normalform En tabel er på 3. normalform når: 3. Den er på 2. normalform 4. Der er ingen transitive afhængigheder. Afhængighedsdiagram 125201 Strikkepinde 1,25 942 Afhængighedsdiagrammet viser tabellers indbyrdes afhængigheder. Primærnøglen er udhævet med fed skrift. Afhængigheder vises med pile. Datamatikeruddannelsen forår 2007 Side 16 af 65

Normalisering af tabeller. Tabeller på 1. normalform 2. normalform: Fjernet Partielle afhængigheder Tabeller på 2. normalform Datamatikeruddannelsen forår 2007 Side 17 af 65

3. Normalform: Fjernet transitive afhængigheder. Tabeller på 3. normalform Datamatikeruddannelsen forår 2007 Side 18 af 65

INSERT Syntaks: Data visning, opdatering og sletning (DML) INSERT INTO <Tabel Navn> [(Kolonne Navne...)] VALUES (Værdi1,Værdi2...); [WHERE Betingelse AND OR NOT BETWEEN...AND Betingelse]; F.eks. INSERT INTO COURSE (courseid, title, credits, prereq) VALUES ('EN100', 'Basic English', 0, 'GR4'); Operatorer der konverterer dato/tid Afrunding TO_DATE F.eks TO_DATE('06/05/2007','MM/DD/YYYY)' TO_CHAR F.eks TO_CHAR(HireDate, 'DD-MM-YYYY HH:MM:SS P.M.') NUMBER F.eks. 56,23656 kan formatteres med NUMBER(6,2) vil give 56,24 NULL værdier 1. Kan indsættes implicit: INSERT INTO COURSE (courseid, title) VALUES ('EN100', 'Basic English') De kolonner der er udeladt her, vil få NULL værdier 2. Kan indsættes eksplicit: INSERT INTO COURSE (courseid, title, credits, prereq) VALUES ('EN100', 'Basic English', 0, NULL); Indsættelse ved hjælp af variabler INSERT INTO COURSE (courseid, title, credits, prereq) VALUES ('&courseid, '&title', 0, 'GR4'); &tegnet foran variablene vil give en prompt, hvor man kan skrive ind værdier for de aktuelle felter. SET DEFINE ON og SET DEFINE! gør at! bliver anvendt i stedet for &, så man kan anvende & til data der skal sættes ind i databasen. Med ACCEPT kommandoen kan man definere egne prompts til at skrive ind data: Syntax: ACCEPT <Variabelnavn> PROMPT 'Melding..'; ACCEPT courseid PROMPT 'Skriv kursusnummer >:'; ACCEPT title PROMPT 'Skriv kursets navn >:'; INSERT INTO COURSE (courseid, title, credits, prereq) VALUES ('&courseid, '&title', 0, 'GR4'); Datamatikeruddannelsen forår 2007 Side 19 af 65

UPDATE Syntax UPDATE TabelNavn SET Kolonne1=NyVærdi1, Kolonne2=NyVærdi2... [WHERE Betingelse AND OR NOT BETWEEN...AND Betingelse]; Hvis WHERE clausen udelades, opdateres samtlige rækker i tabellen. UPDATE COURSE SET title = 'Basic English' WHERE courseid = 'EN100'; DELETE Syntax Hvis man prøvet at slætte en række, hvis primærnøgle findes i en anden tabels primærnøgle, bliver sletningen afbrudt med fejlmeddelelsen Integrity constraint violated child record found DELETE [FROM] TabelNavn [WHERE Betingelse AND OR NOT BETWEEN...AND Betingelse]; F.eks DELETE FROM COURSE WHERE courseid = 'EN100'; Operand Funktion = Lig med <> eller!= Ikke lig med > Større end >= Større eller lig med < Mindre end >= Mindre eller lig med Sammenligningsoperatorer SELECT Syntax SELECT Kolonnenavn1, Kolonnenavn2... (eller *) FROM TabelNavn [WHERE Betingelse AND OR NOT BETWEEN...AND Betingelse] [ORDER BY KolonneNavn [ASC DESC]]; [GROUP BY KolonneNavn [ASC DESC]]; [HAVING Udtryk (f.eks COUNT(*) = 12)]; Substitutions variabler kan anvendes i stedet for et kolonnenavn som argument til SELECT. Så vil brugeren blive spurgt om hvilken kolonne der skal hentes data fra GROUP BY kan ikke anvendes sammen med SELECT med en enkel række funktion. HAVING clause anvendes til at indskrænke resultatet af en gruppe funktion. SELECT courseid, title, &columnname FROM COURSE; DEFINE columnname = prereq (CHAR) UNDEFINE columnname Datamatikeruddannelsen forår 2007 Side 20 af 65

Funktioner: DISTINCT Viser kun en enkel forekomst, hvis der er flere der er ens. COLUMN ALIAS Viser kolonnen med et egendefinerett navn. SELECT courseid AS 'Course No.' COLUMN Gør det muligt at formattere indholdet i en kolonne, f.eks afrunde et tal SELECT courseid AS 'Course No.' FORMAT A8 Giver plads til 8 karakterer i visningen CONCATENATION Kæder sammen indholdet fra to kolonner, så de vises som en kolonne SELECT Lname Fname FROM Employee; Aritmetiske operationer SELECT Lname, Fname, Salary + Bonus FROM Employee; Viser de totale indtægter for hver eneste ansatte. Wild Cards % (Procent) Repræsenterer ingen eller flere karakterer SELECT courseid, coursename FROM COURSE WHERE coursename LIKE 'A%' Viser alle kurser der starter på A _ (Underscore) Repræsenterer én, hvilken som helst karakter. CASE CASE strukturen kan anvendes i alle SQL statements. Syntax: CASE WHEN Betingelse1 Udtryk1 WHEN Betingelse2 Udtryk2... ELSE Betingelse3 END F.eks UPDATE Ansat SET Salary = CASE WHEN Ansienitet > 20 THEN Løn * 1,25 WHEN Ansienitet > 10 THEN Løn * 1,10 ELSE Løn * 1,05 END Datamatikeruddannelsen forår 2007 Side 21 af 65

Funktioner og Grupperinger Der findes 2 typer funktioner 1. Funktioner på enkle rækker Arbejder på enkle rækker, og returnerer et resultat pr række 2. Funktioner på grupper og aggregeringer Arbejder på data i en gruppe af rækker, og resulterer i er enkelt resultat. Funktioner på enkle rækker Funktioner på karakterer Funktion UPPER (Kolonne udtryk) LOWER (Kolonne udtryk) INITCAP (Kolonne udtryk) CONCAT (Kolonne Udtryk, Kolonne Udtryk) SUBSTR(Kolonne udtryk, x, y) Anvendelse Konverter til store bogstaver. Konverter til små bogstaver. Sætter de ønskede karakterer til små eller store, f.eks 1 bogstav i hvert ord Sætter sammen 1. værdi med 2. værdi Trækker en streng ud fra kolonne. Begynder ved x og laver en substreng hvis længde er y SUBSTR(Kolonne udtryk, z) Deler en streng i 2 fra karakter z. INSTR (Kolonne udtryk, c) LTRIM (Kolonne udtryk, c) RTRIM (Kolonne udtryk, c) TRIM (c FROM Kolonne udtryk) TRIM (Kolonne) LENGTH (Kolonne udtryk) LPAD (Kolonne udtryk, n, 'str') RPAD (Kolonne udtryk, n, 'str') REPLACE (Kolonne udtryk, c, r) Funktioner på tal Funktion ROUND (Kolonne udtryk[n]) TRUNC (Kolonne udtryk[n]) Returnerer positionen til den ønskede karakter Fjerner karakterer i begyndelsen af strengen. Fjerner karakterer i slutningen af strengen. Fjerner karakterer i både begyndelse og slutningen af strengen Fjerner SPACES fra strengen. Returnerer længden Fylder ud i begyndelsen af strengen. Fylder ud i slutningen af strengen. Erstatter substring c med r, hvis den findes Anvendelse Afrunder til n decimaler efter kommaet POWER (n, p) Ophæver p i n'te - p(n p ) ABS(n) MOD(x, y) Forkorter kolonnen eller udtrykket til n decimaler Returnerer absolut værdien til n Returnerer det tilbageværende heltal af x/y SIGN (værdi) Returnerer 1 hvis positiv, -1 hvis negativ eller 0 hvis 0 FLOOR (værdi) Returnerer det højeste heltal der er større end eller lig med Datamatikeruddannelsen forår 2007 Side 22 af 65

CEIL (værdi) værdi Returnerer det højeste heltal der er mindre end eller lig med værdi Funktioner på dato Aritmetik på datoer: Operation Date + number Date - number Date + number/24 Date1 - Date2 Resultat Lægger number dage til datoen Trækker number dage fra datoen Lægger number timer til datoen Returnerer antal dage mellem Date1 og Date2 Funktion MONTHS_BETWEEN (date1, date2) ADD_MONTHS (date, m) NEXT_DAY (date, 'day') LAST_DAY (date) ROUND (date [, 'format'] TRUNC (date [, 'format'] EXTRACT(YEAR MONTH DAY FROM date) NEXT_TIME (date, existing timezone, new timezone) Anvendelse Returnerer antal måneder mellem 2 datoer Lægger m måneder til datoen date Returnerer den næste ugedag day fra datoen date Returnerer den sidste dag i måneden Afrunder til den nærmeste day, month eller year Forkorter datoen date til den nærmeste day, month eller year Returnerer day, month eller year fra datoen date Returnerer datoen i angivne tidzone, som EST eller PST Funktioner der konverterer data Funktion TO_CHAR (number date [, format]) TO_NUMBER (char [, format]) TO_DATE (char [, format]) Anvendelse Konverterer et tal eller en dato til varchar2, baseret på det angivne format Konverterer et sæt karakterer med en gyldig kommasekvens til et number, baseret på det angivne format Konverterer et sæt karakterer til en date, baseret på det angivne format. Default format er DD-MM-YYYY Indlejring Funktioner der arbejder på enkle rækker kan indlejres i hinanden. I indlejrede funktioner, bliver den inderste udført først: SELECT NEXT_DAY (ADD_MONTHS(TRUNC(TO_DATE('12/12/98', 'MM/DD/YYYY'), 'MONTH'), 3), 'WEDNESDAY') + 7 AS 'Days Date' FROM Column; Datamatikeruddannelsen forår 2007 Side 23 af 65