Introduktion til programmering

Relaterede dokumenter
Introduktion til programmering

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

Introduktion til SQL queries

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

DB undervisning 01-01

Data lagring. 2. iteration (implement backend)

Skriftlig eksamen i kurset. Informationssystemer

Anne Randorff Højen

Introduktion til programmering

Views etc. Databaser

Anvisning i aflevering af bitemporale data

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

SQL Server 2016 Data Adgang

Database. lv/

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

Conceptual, logic, physical

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

DOCUMENTATION FULLY DRESSED USE-CASE. 29. oktober 2012 [ TEMA PERSISTENS DOKUMENTATION] Use-case: Process Order

Databaseadgang fra Java

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

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

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

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

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

Import af rekursivt (parent-child) hierarki i Palo

Database kursus Forår 2013

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

Introduktion til SQL

Fra ER-Diagram til Relationel model i 7 step

Søren Løbner (lobner) ddb Databaser

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

The River Underground, Additional Work

SQL for MySQL-begyndere

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.

Få sin querystring til at fungere. (Nybegyndere)

MapBasic brugergruppe. SQL i MapBasic. Peter Horsbøll Møller Senior Systems Engineer Marts Slå mute fra hvis I vil sige eller spørge om noget

Løsning af skyline-problemet

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

On the complexity of drawing trees nicely: corrigendum

1. Basal select med (stjerne)

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

MSE PRESENTATION 2. Presented by Srunokshi.Kaniyur.Prema. Neelakantan Major Professor Dr. Torben Amtoft

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

Juli 2018 Gedser Fuglestation Dansk Ornitologisk Forening

Skriftlig Eksamen Beregnelighed (DM517)

Trolling Master Bornholm 2016 Nyhedsbrev nr. 5

1 Indlæsning af script

Engineering of Chemical Register Machines

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

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

Databaser Obligatorisk opgave 1

Eksamen, DSDS, efterår 2007

The Design Diaries Project 3 2. Semester. Blog om designprincipper

Help / Hjælp

(fig.1. Eksempel på en almindelig entity)

Kursus/workshop: SQL

Databasesystemer, forår 2005 IT Universitetet i København. Forelæsning 2: Relationer og SQL. 10. februar Forelæser: Rasmus Pagh

PROJEKT 3. The Design Diaries. LINK TIL BLOG: Af Mikkel Borg Svendsen & Sebastian Frank MUL B

Hvor er mine runde hjørner?

Shooting tethered med Canon EOS-D i Capture One Pro. Shooting tethered i Capture One Pro 6.4 & 7.0 på MAC OS-X & 10.8

ArbejsskadeAnmeldelse

Eksamen, DSDS, forår 2009

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

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

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

Database design for begyndere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Relationel Algebra og SQL

Introduktion til SQL

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

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer

Titel: Barry s Bespoke Bakery

Projekt titel. Projekt navn. Gruppe medlemmer. Klasse/Gruppenummer. Databaseprojekt 1. Ferrari

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

Hvad er en relationsdatabase? Odense, den 19. januar Version 1.0

Jayne Alice Jensen [Link til portfolio]

Aktivering af Survey funktionalitet

Obligatorisk opgave 2. SQL, relationel algebra og relationel kalkyle

Engelsk. Niveau C. De Merkantile Erhvervsuddannelser September Casebaseret eksamen. og

Vores mange brugere på musskema.dk er rigtig gode til at komme med kvalificerede ønsker og behov.

Software Projekt NoSQL vs RMDB

How Long Is an Hour? Family Note HOME LINK 8 2

A11: Last Year s Exam

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

Opgave 1. Opret de 4 tabeller i FTSFrontend programmet. Indsæt mindst 3 forskellige tabelværdier i kunder, målerstatus, byer og regning..

User Manual for LTC IGNOU

Eksempel på en database: studenter, kurser, eksamener

Grænseflade til indberetning af institutionsmæssige stamoplysninger til EfterUddannelse.dk

Tema: Pets Fag: Engelsk Målgruppe: 4. klasse Titel: Me and my pet Vejledning Lærer

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

CHAPTER 8: USING OBJECTS

SAS Corporate Program Website

SQL-opgaver 5 løsning

Strings and Sets: set complement, union, intersection, etc. set concatenation AB, power of set A n, A, A +

Cross-Sectorial Collaboration between the Primary Sector, the Secondary Sector and the Research Communities

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Remember the Ship, Additional Work

Database programmerings tips

Eksamen, DSDS, efterår 2008

Transkript:

Introduktion til programmering Databaser Uge 38 L. Ingemann: SQL databaser på nettet, kap -4. Kompendium L. Ingemann: SQL databaser på nettet, kap 6-0, Kompendium

Sidste gang Databaser Relationelle databaser Modellering ER-diagrammer Et abstrakt beskrivelsesværktøj der er uafhængigt af databasetypen. Normalisering Undgå at samme oplysning står flere steder Undgå afhængigheder indenfor samme tabel Sørge for at hver tabel har en primær nøgle

Plan Tema: ER SQL SQL Repræsentationsproblemer Hvad kan man udtrykke og hvad kan man ikke udtrykke? Mulige løsninger Datadefinition, tabeller Søgning Øvelse Enkelt tabel Flere tabeller

Hvad er SQL? Standardiseret sprog til manipulation af databaser IBM Sequel, 977 Structured English Query Language Standard i 986 som SQL ANSI/8

Hvad er SQL? En de facto standard for interaktion med relationelle databaser Næsten alle DBMS understøtter ANSI SQL og en række udvidelser der er produktspecifikke

SQL DDL - data definition Definition af database strukturen. CREATE Oprettelse og ændring af tabeller og datatyper. ALTER DML - data manipulation indsætte, slette, søge. INSERT, DELETE, SELECT

Relationer Består af et prædikat (tabelnavnet) plus en række argumenter (kolonnerne) Relation: OwnedBy(kæledyrsId,PersonId) Medlemmer: {Ownedby(,4), OwnedBy(,4)} Relation: Person(PersonId,navn) Medlemmer: {Person(,Peter), Person(,Karl)} Hver position kan have et navn (KæledyrsId, PersonId, navn) Formaliseret i første ordens prædikatslogik (FOPL)

Databaser skal indgå i organisationens kommunikation Luhmann: en organisation eksisterer (kun) som kommunikation En kommunikation skal kunne avle den næste kommunikation

Meningsfulde relationer Hvis en tabel kan parafraseres ved en en eller flere simple sætninger med primærnøglen som subjekt og tabelnavnet som verbum og kolonnenavnene som sætningsled eller kolonne navnene som del af prædikatet kan vi afgøre hvad databasen repræsenterer i virkeligheden Ejer(personId, kæledyrsid) personid ejer kæledyrsid Person(cpr,navn,adresse,ægtefælle) Cpr hedder navn Cpr bor på adresse Cpr er gift med ægtefælle Hvis vi ikke kan omdanne tabellen til sætninger, kan vi ikke tale om dens indhold. Tabellen kan derfor ikke gå videre i organisationens kommunikation (Luhmann)

Et meget hyppigt fænomen Digitale medier er led i en kommunikationskæde der også involverer de naturlige sprog Der er forskel på hvad man kan udtrykke i digitale medier og naturlige sprog Digitale medier er typisk mere restriktive men tilbyder nye muligheder på grund af disse restriktioner.

Udtryksbegrænsninger Medlemmerne af en relation skal være af samme længde Bor(personId,adresseId) Bor(personId,adresseId, startid, sluttid) Hver række i tabellen skal have samme længde som overskriften Man kan ikke lave relationer af relationer Ved(Peter,Bor(Karl,Vestergade 0)) Et felt kan ikke indeholde en tabel

Problemer Der er to fænomener i vores sprog vi ikke kan udtrykke i relationslogikken hvis vi opfatter en række i tabellen som en påstand om virkeligheden Fast længde En persondatabase Voksne kan have en ægtefælle, børn kan ikke Mulige løsninger: Vælg det maximale antal felter og lad nogle af dem stå tomme Lav to tabeller, en for voksne og en for børn Ingen relationer af relationer Bilernes sammenstød i juni forårsagede at den ene fører døde Forårsager((StødeSammen(Bil,Bil), Død(Fører)) er ikke tilladt

Reification: Represent events as objects. Events may have a variable number of roles The soup cooked. Peter cooked the soup. But: relations with different length are different relations. Cook (TheSoup) Cook (Peter, TheSoup) If a predicat represents one relation it must have constant arity. Cook(TheSoup, TheSoup), Cook(Peter, TheSoup) We need to talk about predicates: The cooking of the soup took three hours: Duration(Cook(TheSoup), 3 hours). Syntax error! Therefore events should not be represented as a predicate. A row in a table should not be interpreted as a proposition about the world. In stead relations are about an event and its participants. A row in a table is interpreted as asserting a grammatical relation between an event and its participants IsA(e, Cooking) Object(TheSoup, e) IsA(e, Cooking) Object(TheSoup,e) Agent(Peter, e) IsA(e3, Cooking) Object(TheSoup,e3) Agent(Peter, e3) Duration(3 hours, e3). IsA betyder: er medlem af en klasse eller er en delmængde af en klasse.

Reification. A literary example. Everything that can be talked about is represented as objects, including events There is a limited set (about 0) of predicates that represent the relation between events and their participants, or between events, or between events and intervals of time. Predicates: Agent, Object, Opposes, Helper. Objects: Persons, props, events, locations. Frodo destroys the ring helped by Sam Sauron claims the ring Frodos destruction of the ring prevents Sauron s claiming the ring

A database schema

Another example. Airplane timetables Traditional version: as many tables as types of sentences SK3067 flies from Tirstrup to Copenhagen: Flies(SK3067, Tirstrup, Copenhagen). SK3067 flies to Copenhagen at 7.0 Flies (SK3067, Copenhagen, 7.0). SAS flies SK3067 from Tirstrup at 7.0: Flies3 (SAS, SK3067, Tirstrup, 7.0). Reified version ISA(SK3067, flight) Agent(SAS, SK3067) Name( SK3067 SK3067) Source(Tirstrup, SK3067) Destination(Copenhagen, SK3067) Starttime(7.0, SK3067) Endtime(7.55, SK3067) Has(Seat, SK3067) Number(Seat) = 45. Can be implemented by 9 database schemas, each with two fields

Reification. The airplane example Relations: Source, Destination, Starttime, Endtime, Agent Entities: Events, Time, Locations, Companies

Database Each role defines a binary table Agent Source Destination Tirstrup SK306 Copaenhage SK306 SAS SK3067 7 Copenhag DF987 n 7 Aalborg DF987 Maersk DF9876 en 6 6 xxxx xxxx xxxx xxxx xxxx xxxx IsA claim00 destroy0 ring00 claim destroy ring agent Sauron Fnrodo xxxx claim00 destroy0 xxxx object ring00 ring00 xxxx claim00 destroy0 xxx

ER SQL: Kæledyrseksemplet Eksempel fra sidste gang Hvordan laver man et ER-diagram om til en SQL-database?

Lave en tabel over personer CREATE TABLE persons( ) id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR( 30 ) NOT NULL, PRIMARY KEY ( id ) ID name

Indsæt nogle poster INSERT INTO persons (name) VALUES ( Peter ),( Alexander ); ID 8 9 name Alexander Peter

Lave en tabel over arter CREATE TABLE species ( ) id MEDIUMINT NOT NULL AUTO_INCREMENT, kind CHAR( 30 ) NOT NULL, PRIMARY KEY ( id )

Indsæt nogle poster INSERT INTO species(kind) VALUES ( kat ),( hund ); ID kind kat hund

Lav en tabel over kæledyr CREATE TABLE pets( ID MEDIUMINT NOT NULL AUTO_INCREMENT, PRIMARY KEY ( id ), name CHAR( 30 ) NOT NULL, sex CHAR( ), born DATE, death DATE, species INTEGER REFERENCES species( id ) ) ID name sex born death species

Indsæt nogle poster INSERT INTO pets ( ID, name, sex, born, death, species) VALUES ( king, m, 985-09-4, 00-03-0, ), ( mette, f, 004-03-07, NULL, ); ID name sex borrn death species king m 985-09-4 00-03-0 mette f 004-03-07 0000-00-00

Indsæt flere poster INSERT INTO pets (name, sex, born, death,species) VALUES ( 'rasmus', 'm', 00-03 -0, NULL, ), ( 'anton', 'm', 005-07 -, NULL, ), ( 'bisse', 'f', 00-07 -0, NULL, )

Lav en tabel over ejerskab CREATE TABLE ownedby( ) idpets integer NOT NULL REFERENCES pets( id ), idpers integer NOT NULL REFERENCES persons( id ), PRIMARY KEY ( idpets, idpers ) idpets idpers

Indsæt nogle poster INSERT INTO ownedby ( idpets, idpers ) VALUES ( 8, ), ( 9, ); idpers 8 9 idpets

Datamanipulation Indsætte: INSERT Søge: SELECT Slette: DELETE Opdatere: UPDATE

Indsætte INSERT INTO TABEL ( KOLONNE,,KOLONNEn) VALUES ( value, valuen), ( value, valuen), ( value, valuen)

Søgning i én tabel SELECT name FROM persons Persons ID 8 9 name Alexander Peter name Alexander Peter

Søgning med betingelse SELECT name, sex FROM pets WHERE death = '0000-00-00' Navn og køn på alle nulevende kæledyr ID name sex borrn death species king m 985-09-4 00-03-0 mette f 004-03-07 0000-00-00 3 rasmus m 00-07- 0000-00-00 4 anton m 005-07- 0000-00-00 5 bisse f 005-07-0 0000-00-00

Andre søgninger Navn og køn på alle kæledyr født efter 000 SELECT name, sex FROM pets WHERE born > 000-00-00 SELECT * FROM pets WHERE sex = 'f' AND species = alle hunkatte ID name sex borrn death species king m 985-09-4 00-03-0 mette f 004-03-07 0000-00-00 3 rasmus m 00-07- 0000-00-00 4 anton m 005-07- 0000-00-00 5 bisse f 005-07-0 0000-00-00

Operatorer til WHERE = lig med <>,!= ikke lig med <= mindre end eller lig med >= større end eller lig med < mindre end > større end IS NULL, IS NOT NULL AND, OR IN (, ) NOT IN (, ) BETWEEN... AND...

Søgning på tekster Søgning på tekststrenge med jokertegn % (nul eller flere bogstaver) og _ (eet bogstav) Eks: finde alle der starter med b SELECT (etc) WHERE name LIKE b% Eks: finde alle med ss i navnet SELECT (etc) WHERE name LIKE %ss%

Eksempel Find alle, hvor navnet starter med b, efterfulgt af et tilfældigt bogstav, efterfulgt af s, resten ligegyldigt SELECT name, sex FROM pets WHERE name LIKE 'b_s%' Finder bisse

Slette DELETE FROM tabel WHERE betingelse DELETE FROM pets WHERE NAME = mette

Opdatering UPDATE pets SET sex = 'f'where name = 'mette' UPDATE tabelnavn SET kolonne = expr kolonne = expr... WHERE betingelser

Søgning i tabeller For at søge i eller flere tabeller, skal de først sættes sammen (joines) til en tabel SELECT kolonner FROM tabel, tabel,...where betingelse

Eksempel id SELECT * FROM persons, species Cross join eller cartesisk produkt Cross join producerer en tabel der ikke i sig selv påstår sande ting om virkeligheden name Peter Alexander id name id kind Peter kat id kind Alexander kat kat Peter hund hund Alexander hund

Meningsfuldhed Ved cross join laver vi først alle de mulige påstande om verden uanset om de er sande eller falske. En ren kombinatorik. Persons X Species: alle rækker i Persons kombineret med alle rækker i Species Dernæst fisker vi de sande påstande ud ved en WHERE konstruktion Meningsløshed meningsfuldhed

Inner join/equi join Returnerer en tabel, indeholdende rækker der opfylder en betingelse Først igen et meningsløst resultat SELECT * FROM persons, species WHERE persons.id = species.id SELECT * FROM persons INNER JOIN species ON persons.id = species.id Returnerer alle personer og arter som har samme ID id name id kind Peter Alexander Peter kat kat hund id name Peter id kind kat Alexander hund Alexander hund SELECT * FROM persons, species WHERE persons.id = species.id

Skabelse af mening Kun en fornuftig formulering af wheredelen giver et resultat der repræsenterer en tolkbar påstand

Meningsfuldt inner join Alle kæledyr med deres artsbetegnelse SELECT * FROM pets INNER JOIN species ON pets.species = species.id Den resulterende tabel udsiger sande påstande om verden: kind kolonnen indeholder artsbetegnelsen på kæledyret ID name sex born death species id kind king m 985-09-4 00-03-0 kat 3 rasmus m 00-07- 0000-00-00 hund 4 anton m 005-07- 0000-00-00 hund 5 bisse f 005-07-0 0000-00-00 hund

OUTER JOIN Returnerer en tabel, indeholdende alle poster fra den ene, og de poster fra den anden der opfylder en betingelse LEFT, RIGHT SELECT * FROM pets LEFT JOIN species ON pets.species = species.id Giver samme resultat fordi alle pets har en species.

Eksempel Navn og art for alle levende dyr SELECT pets.name, species.kind FROM pets, species WHERE pets.death = '0000-00-00'AND pets.species = species.id name kind rasmus anton bisse hund hund hund

Eksempel Dyrets navn, art og ejer. SELECT pets.name, species.kind, persons.name FROM pets, ownedby, species, persons WHERE pets.id = ownedby.idpets AND persons.id = ownedby.idpers AND pets.species=species.id Ownedby bruges som mellemregning til at lave det nødvendige krydsprodukt name kind name rasmus hund Alexander king anton bisse kat hund hund Peter Peter Alexander

Hvordan gør den det? Pets Den laver først en CROSS JOIN af alle tabeller der er nævnt i FROM. En stor tabel med kolonner og 4 X X X 4 rækker = 64 rækker Af disse 64 rækker fjerne den dem der ikke tilfredsstiller WHERE betingelsen Af den resterende tabel udvælger den de kolonner der er omtalt i SELECT delen, altså pets.name, species.kind, persons.name Ownedby Species Persons ID 3 Name king rasmus Sex m m born deat h spe cies Idpets 3 4 Idpers ID 3 kind kat hund ID 3 name Peter Alexander 4 anton m 5 5 bisse f pets, ownedby, species, persons

ALTER Ændrer i definitionerne ALTER TABLE pets ADD COLUMN sex CHAR() ALTER TABLE pets DROP COLUMN death ALTER TABLE pets RENAME COLUMN birth TO born ALTER TABLE persons RENAME TO owners ALTER TABLE persons ADD PRIMARY KEY (id)

Database definitioner

Databasens indhold

Søgning ved formularudfyldning

Skrivning af SQL

Resultatet vises

Fejlretning Alle personer med efternavnet andersen

Fejlretning #054 - Unknown column 'andersen'in 'where clause' #054: nummeret på fejlen. Kan slås op i hjælpefunktionen. Giver sjældent hjælp Ræsonner selv Den tror at andersen er navnet på en kolonne og kan ikke finde denne kolonne Måske er det kun kolonnenavne man kan skrive uden anførselstegn, mens værdier skal i anførselstegn? Test hypotesen SELECT * FROM Person WHERE lastname LIKE 'andersen'

Ja det var rigtigt Det er svært at huske alle konventioner Der vil altid komme fejl Derfor: I stedet for at huske på alt, blive gode til at gætte på årsagen til fejl og at teste hypotesen

Øvelse (gruppe) Tag en mindre del af det diagram I lavede i øvelse, byg en sql-database og formuler en SELECT-ordre som kan udtrække nogle af de data, som forekommer i det originale dokument eller som på anden made er relevant for databasen.