Applikasjonsutvikling med databaser Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 1 / 24
Applikasjonsutvikling med databaser Databaser tilbyr funksjonalitet i tillegg til datalagring som kan komme til nytte når man utvikler applikasjoner. Autentisering Rettigheter Backup Samtidighet (Concurrency) Dataprosessering... Bør utnyttes mest mulig. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 2 / 24
Kobling fra applikasjon til database Det finnes 4 strategier for å koble en applikasjon til en database Direkte Modul Flerlagsmodell Instance-håndterer Målet er å være mest mulig uavhenging av underliggende database. De ulike DBMSene sliter med å følge SQL standard... Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 3 / 24
Direkte kobling I en direkte kobling så snakker applikasjonen direkte med databasen og derfor sterkt knyttet til den aktuelle DBMS. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 4 / 24
Fordeler og ulemper med direkte kobling Fordeler: Ingen Ulemper: Kan ikke bytte database uten å endre applikasjon Kan være vanskelig å bytte databaseversjon Vanskelig å skrive optimal kode Større fare for feil Ingen mulighet for gjenbruk Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 5 / 24
Kobling med Modul Som en ekstra abstraksjon kan vi i stedet for å snakke direkte med databasen snakke med en databasespesifik modul. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 6 / 24
Fordeler og ulemper ved kobling med modul Fordeler: Vi slipper å skrive databasekoden selv Mindre sansynlig å gjøre feil Enklere enn å skrive koden selv. Ulemper: Begrenset til en database Begrenset gjenbruk Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 7 / 24
Kobling med Flerlagsmodell En tredje abstraksjon kan oppnås ved at applikasjonen snakker med databasen via to lag. Den databasespesifike modulen erstattes med en generell database modul. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 8 / 24
Fordeler og ulemper ved kobling med flerlagsmodellen Fordeler: Ulemper: Vi slipper å skrive databasekoden selv Mindre sansynlig å gjøre feil Enklere enn å skrive koden selv. Ikke bundet opp mot en spesiell database Ingen store Databasespesifik connection string i koden. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 9 / 24
Kobling med Instance-håndterer En siste abstraksjon kan legges til ved at applikasjonen snakker med en tjenestetilbyder via en generell database modul. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 10 / 24
Fordeler og ulemper ved kobling med flerlagsmodellen Fordeler: Vi slipper å skrive databasekoden selv Mindre sansynlig å gjøre feil Enklere enn å skrive koden selv. Ikke bundet opp mot en spesiell database Slipper også databasespesifik connection string Ulemper: Økt grad av kompleksitet. Mister kontrollen. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 11 / 24
JDBC Metode 3: Databasekobling med flerlagsmodellen Standard funksjonalitet Driverspesifik connection string Driver i jar-format Metode 4: Databasekobling med instance-håndterer JDBC-ODBC Bridge driver Krever ODBC-driver installert Standard oppkobling Ofte tregere enn flerlagsmodellen Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 12 / 24
.NET Metode 3: Databasekobling med flerlagsmodellen ADO.NET Jobber med connection strings Innebygde drivere for MSSQL og Oracle Metode 4: Databasekobling med instance-håndterer Krever ODBC-driver installert Standard oppkobling (Tregere enn andre modeller?) Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 13 / 24
PHP Metode 3: Modulbasert kobling mot database Egne moduler for alle databaser Følger ingen felles designprinsipper mysql query pg exec Moduler må være installert Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 14 / 24
ANSI-SPARC arkitekturen ANSI-SPARC står for American National Standards Institute, Standards Planning And Requirements Committee og er en standard på hvordan en applikasjon bør snakke med en database. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 15 / 24
Beskrivelse av ANSI-SPARC ANSI-SPARC er omfattende, men kan gi gode resultater selv med en litt forenklet utgave. Jobber mot views istedenfor tabeller Kan forenkles med tre lag 1 View for hver bruker 2 Tabeller 3 Fysisk lagring Eller bare views og tabeller Poenget er å gjøre det mulig å endre struktur på tabeller uten at man må endre applikasjonen (brukeren). Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 16 / 24
Fordeler og ulemper med ANSI-SPARC Fordeler: Enkelt å justere på views uten å endre tabell Man kan endre tabell uten at brukeren merker det Splitte tabellen horisontalt/vertikalt Legge til eller fjerne kolonner Andre endringer på tabellen Ulemper: Mer å administrere Høyere grad av kompleksitet (treghet?) Noen views er så komplekse at man ikke kan oppdatere data. Det er både vesentlige fordeler og ulemper med standarden, så en aveining må gjøres i hvert enkelt tilfelle. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 17 / 24
Transaksjoner Det kan være fordelaktig å gruppere SQL kommandoer sammen til en transaksjon. Commit og Rollback Unngå systemfeil og feil i data Gjøre det enklere å håndtere flere brukere samtidig Gjør dette ved hjelp av en transaksjonslogg som ivaretar status på alle transaksjoner og gamle/nye verdier Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 18 / 24
Sikkerhet Det er vanskelig å lage sikre applikasjoner. Her er noen tips relatert til applikasjonsutvikling med databaser. Vær ytterst forsiktig med å ha brukerinfo i kildekoden Innlogging, sertifikater, tjenesteserver... Kan tjene mye på å la prosessering foregåri DBMS Pass på at serverscripts ikke blir tilgjengelig i klartekst Skjul databasespesifike meldinger og felt fra brukeren Ikke utfør administrative oppgaver i databasen direkte fra applikasjonen Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 19 / 24
SQL injection SQL injection er en potensiell sikkerhetsrisiko så lenge innholdet fra tekstfelt benyttes direkte i en SQL spørring. Kan erstatte SELECT * FROM user WHERE username= brukernavn AND password= test SELECT * FROM user WHERE username= brukernavn AND password= OR = Man kan ofte beskytte seg med riktige rettigheter Beste triks er å escape spesielle tegn i innholdet i tekstfeltet Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 20 / 24
Ytelse Det er en balansegang hvor man bør legge prosesseringen i en applikasjon med database tilkobling DBMSene er gode på databehandling Kan bli overbelastet Siden overbelasting er sansynlig kan man prøve å minimere problemet Spør en gang Hent mest mulig data om gangen Hent bare data som trengs Optimer spørringene Små forbedringer kan gi stort utbytte. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 21 / 24
Constraints Det kan være lett å falle for fristelsen å hoppe over constraints når man designer/lager databaser, men det gi både bedre ytelse og sikkerhet hvis dette ikke bare overlates til applikasjonen. UNIQUE PRIMARY KEY FOREIGN KEY CHECK Constraints kan også bli implementert med mer avanserte mekanismer Triggere (ON DELETE, ON UPDATE,...) Prosedyrer Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 22 / 24
Typer constraints Man kan dele inn constraints i grupper Fysiske constraints satt på datatypen e.g. INT, REAL, VARCHAR Logiske constraints ut i fra hva som lagres e.g. ikke negative aldre Organisatoriske constraints blir satt ut fra forretningsmessige regler e.g. alder må være mellom 40 og 45. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 23 / 24
SQL i applikasjoner Når man skal utvikle applikasjoner med database funksjonalitet er det viktig å skrive SQL-setningene slik at de skiller seg ut og at de ikke tar opp unødvendig mye minne Bruk store bokstaver på SQL-nøkkelord Ikke sett sammen konstante strenger til en sammensatt spørring. Bruk heller en metode som gjøre at man slipper allokere et vilkårlig antall småstrenger. Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 24 / 24