Database Flashcards
Hvad står TSQL for?
Transact SQL
Hvad er TSQL?
Det er en procedural udvidelse til SQL hvor den giver mulighed for delvis normal programmering.
Hvad muliggør TSQL?
Den muliggøre funktionerne: Variable, IF, While, Iterator, Exceptions, (case) osv.
Er datatyperne forskellige i TSQL og SQL?
NEJ!
Hvad muliggøre TSQL ikke?
- GUI
- Collections
Hvad er et BATCH?
Det er når en eller flere queries kører i et hug
Hvilke fejl kan en BATCH have og hvor vil det betyde for udførlsen?
- Ved compile fejl
- Ingen af de queries som skulle
køres udføres da compileren
finder fejl i syntaxen.
- Ingen af de queries som skulle
- Ved runtime fejl
- Alle quries som kan gennemføres
lykkedes men de andre som ikke
kan kører giver en fejl.
- Alle quries som kan gennemføres
Hvad er en stored procedure?
Er en querie som gemmes og kan køres igen og igen.
Hvordan er erklæring af en stored procedure?
Hvad er globale variable?
Det er indbyggede variable som man kan bruge men som man ikke selv kan erklære og starter med @@
Hvad er almindelige variable?
Det er variable som starter med @ og er nogle som du selv kan erklære. Kan kun bruges indenfor det Batch hvor de er erklæret.
Hvordan gemte man data fra IT-systemer før indførelsen af databasesystemer (DBMS)? Hvad var det største problem med løsningen?
Programmer gemte data direkte på en fil på harddisken.
Problem: Der er en masse funktionalitet som de fleste IT-systemer har brug for. I ovenstående arkitektur er det nødvendigt at programmere denne funktionalitet ind I hvert eneste IT-system.
Hvad var målet med indførelse af DBMS?
For at gøre det muligt for alle IT-systemer at tilgå generel funktionalitet som: ○ Autentifikation
○ Samtidighedskontrol
○ Alt eller intet princippet
○ Back-up og restore
○ Specificere regler om dataintegritet
○ Effektiv fremsøgning af data der undgår at gennemløbe hele filer (indeksering).
Hvordan adskiller arkitekturen for den relationelle database sig med arkitekturen på billedet?
- Forespørgselssproget er SQL
- DBMS’en er en relationel DBMS
Er fremmednøgler i den relationelle database pointere til anden data i en anden tabel?
NEJ! Alle attributter indeholder data - der er dermed ingen pointere. Referencer håndteres med fremmednøgler der selv er attributter og IKKE pointers.
Hvilke forskellige database systemer er de mest populære for tiden?
Relationelle databaser som MySQL, Oracle og MSSQL er de suverænt mest populære. Næst efter kommer NoSQL databaserne som typisk er dokument (MongoDB) eller graf baserede.
Hvad er det som udgangspunkt der begrænser performance i DBMS’en?
Harddisken (HDD) er den begrænsende faktor for performance - er meget langsom sammenlignet med de øvrige komponenter.
Hvad er en page på harddisken? Hvor meget fylder en page? Hvad indeholder den?
En page er det der skrives til / hentes fra harddisken. En page har en størrelse på 8K og indeholder så mange database records som den kan.
Hvordan er den traditionelle harddisk opbygget?
Består af et antal skiver der roterer omkring deres centrum
Har en læsearm der kan flyttes mellem centrum og skivens rand. Læsearmen læser den data der er lige under armen. Læsearmen overfører pagens data til RAM.
I hvilke tilfælde anvender man en SSD fremfor en traditionel harddisk (HDD) i et databasesystem?
SSD diske anvendes som cache mellem den traditionelle harddisk og RAM I lidt større systemer.
Hvordan læser harddisken en page? Hvilke dele i processen er de mest tidskrævende?
- Diskarmen flyttes til den rigtige afstand fra centrum
- Man afventer diskens rotation, så læsehovedet på læsearmen står lige over pagen
- Pagens indhold læses og indhold overføres til RAM
De første to elementer er de mest tidskrævende I processen.
Hvad bruger man en buffer til i DBMS’en? Hvorfor bruger man en buffer?
Når man har læst en page, er der en rimelig sandsynlighed for at den pågældende page skal anvendes igen inden for kort tid
Denne observation udnyttes til at forbedre performance ved at indføre en buffer. Det betyder at når en page er hentet fra harddisken gemmes den I RAM I et stykke tid efterfølgende.
Kan DBMS bufferen påvirkes af programmøren?
Nej, den er indbygget i DBMS’en og er ikke umiddelbart til at påvirke.
Hvad bruger man pre-fetching til i DBMS’en? Hvorfor bruger man pre-fetching?
Når man har læst en page, er der en rimelig sandsynlighed for, at efterfølgende pages skal anvendes inden for kort tid
Denne observation udnyttes til at forbedre performance ved at indføre pre-fetching. Det betyder at når en page læses fra disken bliver de efterfølgende pages læst med op.
Kan DBMS’ens pre-fetching påvirkes af programmøren?
Nej, den er indbygget i DBMS’en og er ikke umiddelbart til at påvirke.
Hvilke to mulige taktikker har DBMS’en når der skal gemmes noget data på harddisken?
- Placer det et tilfældigt sted, hvor der er plads. Det gør det let at gemme, men sværere at finde papiret igen. Vælges denne taktik siger vi at tabellen er heap-organiseret
- Placer papiret efter et system/en ordning. Det gør det lidt tungere at gemme, men lettere at finde. Vælges denne taktik siger vi at tabellen er indekseret
Hvornår er en tabel heap-organiseret?
Når records ikke gemmes efter et system, men blot hvor der er plads.
Hvad er grundprincipperne i indeksering af en tabel i databasen?
Når DBMS’en laver indeksering gøres det ud fra værdien af en eller flere attributter I en record. Typisk vælges kun en attribut, men det er muligt at kombinere flere.
Man siger at der er et clustered indeks på den/de attributter der bestemmer placeringen.
Det er udvikleren selv der afgør om der skal være clustered indeks på en tabel, og I det tilfælde også hvilken attribut det skal være på.
Hvor mange clustered indeks kan man have per tabel?
Kun én.
Hvor mange nonclustered indeks kan man have per tabel?
Ubegrænset antal.
Hvilke to teknikker kan bruges til indeksering? Hvilken er mest brugt?
- Hashing
- Søgetræer (mest brugt)
Hvordan foregår clustered indeksering med hashing?
Med denne teknik køres en hashfunktion på den/de valgte attribut/attributter. Hashfunktionen returnere et tal der er addressen på en page hvori recorden skal gemmes.
I det tilfælde hvor en page er fyldt, bruges rehashing. Her sættes den fyldte page til at pege på en anden page, hvori recorden så gemmes. På den måde får man kædede lister af pages.
Hvordan foregår clustered indeksering med et søgetræ?
I de indre knuder i søgetræet (altså de knuder der har børn) findes kun de attributter der er valgt til at lave indeks på, samt pointers til andre pages.
I bladene står record’ene.
DBMS’en finder på baggrund af det clustered indeks frem til det blad der indeholder den eftersøgte record.
Hvordan foregår nonclustered indeksering med et søgetræ?
Nonclustered træ-baseret indeks er generelt opbygget på samme måde som det clustered træ-baseret indeks:
○ Alle knuder er pages
○ De indre knuder er ens: Her findes kun de attributter der er valgt til at lave indeks på, samt pointers til andre pages.
○ Bladene er forskellige: I nonclustered indeks findes den valgte attribut til at lave indeks på, samt en liste af pagenumre hvor records med pågældende værdi kan findes.
Hvorfor kan det give mening at bruge nonclustered index fremfor clustered index?
Fordi der kun kan være ét clustered indeks pr tabel, typisk på én attribut, betyder det dermed også at tabellen er uordnet for de øvrige attributter. Ønsker man stadig at søge effektivt på de øvrige attributter og undgå “table scan” kan man benytte nonclustered indeks.
Hvad er et “table scan”?
Hvis DBMS’en møder ovenstående query og tabellen ikke er indekseret (altså dermed heap-organiseret), har den kun en mulighed; at gennemløbe hele tabellen for at finde et match. Dette kaldes et “table scan” og er en meget dyr operation. Er der derimod et indeks vil DBMS’en bruge dette automatisk.
Hvad er buffer management?
Det er et komponent som er i alle DBMS’er og sørger for at allokere pages i main memory
Hvad er de tre Problemstillinger i buffer management?
- Hvor meget skal pre-fetches
- Hvilke pages skal fjernes hvis der er fyldt i main memory, når en anden page har brug for en plads
- Kontrol af ændring i pages siden indlæsning også kaldet dirty bits
Hvad er fordelen ved indeksbaseret lagring af data?
Hurtigere svar tider fra databasen
Hvad er ulemperne ved indeksbaseret lagring af data?
- Inserts vil tage længere tid
- Updates kan komme til at tage længere tid
- Deletes kan komme til at tage længere tid
Hvad er forskellen på hash basert indeks og træ-baseret indeks?
Hash baseret indeks er effektiv når man snakker om querys hvor man efterspørgere data med =, dvs where og join, hvorimod træ-baseret har en bestemt organiseret rækkefølge og er derfor langt bedere til at håndtere data efterspørgelser hvor betingelserne indeholder <, >, BETWEEN, LIKE med præfix og eller hvor data skal leveret sorteret.
Hvilke to metoder kan DMBS bruge for at løse problemet med at der ikke er ledig plads til pagen som kan gemmes?
- ISAM
- B+
Hvordan fungere ISAM?
Træet laves ved oprettelse af et nyt indeks
Træets udseende ændres ikke pga behov for nye pages
Hvordan løser ISAM behovet for nye pages?
Der hvor den nye page som skulle indsættes i træet skulle være oprettes der en pointer fra den nuværede page til den page som skal indsættes dvs. at der bliver dannede kædede lister rundt omkring i træet.
Hvordan løses den linkede træstruktur som ISAM skaber ved behov for nye pages?
Det gør man ved at reorganisere trænet sådan at den får en pæn træstruktur igen.
Hvad er princippet i B+?
Det er at træet skal være pænt efter hver operation
Hvad gør B+ når der er brug for en extra page?
Der laver B+ en pagesplit
Hvad er et pagesplit i B+?
Der splitter B+ halvdelen af de records som er i en page og overføre de record til en ny allokeret page og på den måde holdes træet nogenlunde pænt.
Hvad er fillfactor?
For at optimere preformance i indeks basere søgetræer bestemmer man hvor stor en procentdel af en page må fyldes for at den ikke rammer Mads kapacitet.
Hvad er forskelle på B+ og ISAM ift. behovet for processer kraft?
B+ er dyrt her og nu da den laver et page split hver gang der er brug for en ny page
ISAM er ikke dyrt her og nu man kan skabe preformance tab til næste reorganisering
Hvor stor er en page i netto og brutto størrelse?
Netto er 8060 bytes da SQL server selv skal bruge plads til administration
Brutto er 8192 bytes.
Hvor gemmes records?
I pages
Gemmer SQL server altid hele records eller splitter den dem op for at fordele dem ud over pages?
Nej den gemmer som udgangs punkt altid records hele. Kun hvis at en record er for stor til at være i en page kan den fordeles
Hvilke to datatyper snakker man om når der er tale om records?
- Variable-længde datatyper
- Fast-længde datatyper
Hvad er en variable-længde datatype?
- VARCHAR og VARBINARY
- Fylder alt efter størrelse på data
Hvad er en fast-længde datatype?
- Alle andre datatyper end VARCHAR og VARBINARY
-Fylder det samme uanset størrelse
Hvornår er en record en fast-længde record?
Hvis den udelukkede indeholder fast-længde datatyper eller hvis den kun indeholde EN variable-længde datatype
Hvor meget fylder en header på en record?
6 bytes + 1 bit pr. attribut + summen af attributternes størrelse
Hvad skal man bruge af CHAR eller VARCHAR når der er snakke om preformance i DBMS?
Man skal altid bruge CHAR da det er lettere for DBMS, hvis man ved at strengen ikke bliver mere en 20-25 karakter lang og eller hvis man ved hvad den bestemte textstræng fylder.
Hvordan sorteres clustrede indeks?
Fra venstre mod højre
Hvad er interval søgninger?
- BETWEEN
- < eller >
- LIKE ‘…%’
Når man selv laver indeks i SQL server hvilke metoder bruges så?
- Træ-baseret indeks
- B+
Er primary key altid clustered?
Som default ja, men kan godt laves om
Hvad er en optimizer I DBMS?
Et komponent som forsøger et finde den mest optimale og billigste måde at finde efterspurgt data frem på
Hvad vil det sige at en optimizer er sub-optimal
Det vil sige at den ikke nødvendigvis finder den absolutte bedste strategi at finde data frem på, men finder altid en god strategi.
Hvilke parametre vurdere en optimizer om en stategi er god?
- Kort svartid
- Mindre brug af ressourcer
- Minimalt antal af disk I/O tilgang
Hvordan fungere en optimizer trin for trin?
- Parse (Dvs. Tjekker syntax og om den er semantisk korrekt)
- Hvis querien er optimeret i Plan Cache så eksekvere den eller går den videre til trin 3 og 4.
- Operratograf (Dvs. At query bliver omformet til graf-format hvor der vises rækkefølgen af operationer og hvilke algoritmer der bruges)
- Optimering (Dvs. At operratografen rækkefølge laves om for at optimere preformance fx. De formindskende operationer først og de forøgende til sidst)
Hvad hedder operatografen i SQL-server?
Executionplaner
Hvad er reduktionsfaktoren?
Det er en faktor som defineres som den procentdel af data som opfylder betingelserne i WHERE sætningen
Hvilken strategi vælger optimizeren hvis der ikke er noget indeks på værdien som du bruger i dit WHERE operation?
Table scan (Kører hele tabellen igennem)
Hvilken strategi bruger optimizeren hvis der er et clusteret indeks på værdien fra WHERE operationen?
Bruger det clusteret indeks
Hvilken strategi bruger optimizeren hvis der er et non-clusteret indeks på værdien fra WHERE operationen?
- Hvis reduktionsfaktoren er ca. <= 1% så bruger den det non-clusterede indeks
- Ellers bruges tablescan
Hvilke to ting skal optimizeren tage højde for når der skal joines?
- Hvis der er 2 eller flere tabeller der skal joines skal rækkefølgen bestemmes (Der kan kun joines to tabeller ad gangen)
- Valg af join-algoritme for hver join operation
Hvordan vælger SQL-Server hvilken rækkefølge som joins skal følge?
Den tager en rask beslutning da der på baggrund antal tabeller kan være rigtig mange mulige rækkefølger og derfor analysere den ikke samtlige muligeheder.
Hvilke tre join algoritmer bruges i moderne DBMS’er?
- Nested loop
- Sort and Merge
- Hash
Hvordan fungere Netsted Loop join algoritme(Uden indeks)?
Tabellen recorden gennemløbes og for hver record gennemløbes den anden tabels records for at finde de records som opfylder join-betingelserne
Hvordan fungere Netsted Loop join algoritme(Med indeks)?
Tabellen recorden gennemløbes og for hver record bruges indeks til at finde records i den anden tabel som opfylder join-betingelserne
Hvad er kriterierne for, og hvordan virker merge join som join-algoritme?
1.Kræver at de to indgående tabeller/mellemresultater sorteres på joinattributterne inden fletning
2.Hvis man har et antal tabeller, der joines via merge join, vil man være nødt til at resortere mellem hver join, fordi de enkelte joins typisk, sker på forskellige join-attributter.
Hvordan fungere Hash match Join algoritmen?
- Først indsættes den formoede mindste tabel i en hash tabel hvor join attributten er nøglen
- Derefter gennemløbes den store tabel ved at man for hver record slår den op i hash tabellen for at se om der er et match
- Hvis der er flere joins bliver der typsik oprettet flere hash tabeller, da forskellige joins kan have forskellige join betingelser
Hvad er en Plan Cache?
- Det er et lager som gemmer tideligere optimerede queries, da man I et rigtigt system ofte vil få de samme queries ind og derfor godt kan genbruge den samme optimering.
Hvilke indbyggede preformance forbedringer har en DBMS indbygger?
- Prefetching
- Databuffer (Sidst læste page)
- Plan Cache
Hvad skal man være opmærksom på når man laver preformance test på en database?
- Indbyggede preformance forbedring i DBMS som kan mindste svartiden
- Belastning på selve Databaseserveren
Hvorfor er indeks det billigste og mest kraftfulde værktøj til at opnå god preformance?
- Stor effekt på antallet at I/O’er
- Kan ændre dynamisk uden at skulle ændre andet
- Simpel kommandoer til indeksering
Hvad er den overordnede problemstilling når man skal lave indeks?
- Indeks er en fordel for select
- Med indeks bliver insekt, update og delete nyere.
- Indeks kræver plads, men er af mindre betydning
Hvad er fordelene og ulemperne ved at bruge indeks?
Fordele:
1. Hurtigere SELECTS
2. Mindre belastning på DB server
Ulemper
1. Dyrere opdateringer
2. Ved opdatering af træet låses dele af dataen
Hvad er de to beslutninger som skal vurderes inden man vælger indeks?
- Hvilke attributter/kombinationer af attributter skal have indeks
- For hver tabel – hvilket indeks skal være CLUSTERED
Hvad er nødvendig viden skal man som vidt muligt have for at vælge indeks?
- Man skal kende de queries (SELECT, INSERT, UPDATE og DELETE), der køres i systemer
- Man skal vide, hvor ofte de enkelte queries kaldes (frekvensen)
- Man skal vide, hvor vigtig god performance er for de enkelte queries
Hvor skal man udover primary key overveje om der skal være indeks?
- Where - betingelserne
- Join attributerne(Fremedenøglerne)
Hvad er fordelene og ulemperne ved at bruget et værktøj til at vælge indekser?
Fordele:
1. Nemt at generare indeksen
Ulempe:
1. Håndtere ikke vigtigheden af indekset rigtigt
Hvad skal man overveje efter at man har valgt hvilke indeks der skal være?
Om der skal være clusteret eller non-clustered
Hvornår er clusterede indeks markant bedre en non-clusterede?
- Ved WHERE betingelser da der søges mange resultater
- Ved visse fremmedenøgler
- Ved nogle sortererde resultater
- I tilfælde man ikke kan opnå den ønskede reduktionfaktor med et non-clustedet indeks
I hvilket tilfælde vil clusteret indeks være dårligere en non-clusteret?
Når de attribut ofte skifter værdi
Hvilke egenskaber har identity?
- Ved WHERE-betingelser på en tabel med Identity returneres kun et resultat
- Identityattributter bruges aldrig ved interval-søgninger.
- Identityattributter bruges ofte ved joins men kun som enkeltopslag
- Identityattributter bruges aldrig ved sortering
- Identityattributter ændrer aldrig værdi
- Ved en Identityattribut vil alt indsættelse ske i yderste højre side
- Implementeringsdetaljer i det enkelte DBMS kan påvirke valget
Hvad skal man gøre efter at man har placeret et clusteret indeks på en tabel?
- Alle andre indeks på pågældende tabel skal være non-clusteret
- Efterfølgende skal man tjekke om man opnår en tilstrækkelig lav reduktionsfaktor ellers skal indeks udgå
- Overvejer om en covered eller include indeks kan bruges
Hvornår skal man overveje at bruge indeks?
På tabeller vor der er meget at spare ift. preformance da det fx ikke giver mening at indeksere en tabel på 10 elementer ift. en på 10 millioner
Hvad skal man overveje før man kigger på preformance?
Om Det kan svarer sig at kaste pengene efter det ift. hvor stor problematikken er
Hvilke andre muligheder har en udvikler for at optimere preformance udover indeks?
- Gode hensigtsmæssige queries
- Tabel design
- Denormalisering
- Vertikal partitionering
- Override optimiser
- Samtidighedskontrol
Hvad er kendetegnet ved de 4 andre muligheder for optimering udover indeks?
De er dyre i ift. indeks
Hvad gør en query god helt overordnet?
- Jo simplere den ser ud jo bedre proformer den
- Brug kun distint eller orderby hvis det SKAL bruges
- Jo færre SELECT og FROM jo bedre
- Where frem for if
- En stor frem for mange små er bedre
- Undgå så vidt muligt cursors
Hvad er denormalisering?
Det er at tilføje attributter/tabeller som beregninger af værdier som kan spares da de ikke skal beregnes ved visning
Hvornår kan vertikal partitionering anvendes?
- Nogle få attributter, der SELECT’es ofte
- En del attributter, der SELECT’es sjældent
Hvordan laver man vertikal partitionering?
Man laver henholdsvist en tabel:
1. Der indeholder de få attributter (inkl. Primary key)
2. Der indeholder de andre attributter (inkl. Primary key)
Hvilke måder kan man override optimizeren?
- Sige om den skal eller ikke skal bruge indeks
- Bestemme join rækkefølge eller join-algoritmerne
- Specificere executionplan i XML
Hvad skal man overveje før man overrider optimizeren?
- Størrelser på tabeller og fordeling på værdier kan ændre sig over tid
- SQL Servers teknikker og valg kan ændres i service packs/nye versioner
Hvad indebærer database design helt overordnet?
Alle database relaterede aktiviteter der foregår mellem den logiske modellering (UML analyse klasse diagram) og starten på programmeringen.
Hvordan vælges nøgler i forbindelse med database design? Hvad gør en primærnøgle god? Og hvor mange nøgler skal man overhovedet vælge?
En tabel kan have flere nøgler, men kun én vælges som primær.
En god primær nøgle:
○ Unik
○ Kort
○ Ændres sjældent
○ I praksis anvendes oftest en
dum nøgle (identity)
Hvad vil det sige at en nøgle er enten informationsbærende eller ikke-informationsbærende?
Informationsbærende:
- En eller flere attributter fra den logiske model (UML)
-Kaldes en klog nøgle
Ikke-informationsbærende:
- Typisk et tal (identity)
- Kaldes en dum nøgle
Hvad indebærer omformning i forbindelse med database design?
Efter valg af primærnøgler for alle klasser i den logiske model (UML), omformes den logiske model til tabeller.
Hvilke tre måder kan arv omformes fra den logiske model til tabeller i databasen?
1-tabel implementering
N-tabel implementering
N+1 tabel implementering
Hvad kendetegner 1-tabel implementeringen til omformning af arv fra den logiske model til tabeller i databasen?
Her samles alle attributter for både superklasse og subklasser i en tabel. Der defineres en “type”
Giver mange null-værdier
Hvad kendetegner N-tabel implementeringen til omformning af arv fra den logiske model til tabeller i databasen?
Superklassens attributter “trækkes ned” i hver subklasses tabel.
Ingen null-værdier
Giver redundans (superklassen er repræsenteret flere steder)
Hvad kendetegner N+1-tabel implementeringen til omformning af arv fra den logiske model til tabeller i databasen?
Her er der både en tabel for superklasse og alle subklasser. Sub tabellerne refererer så til supertabellen.
Ingen null-værdier
Kan give mange joins
Hvilken af de tre måder at omforme arv fra den logiske model bør anvendes i tabellerne i databasen?
Hvilken implementering der vælges afhænger af om arven er “tungere” i superklassen eller subklasserne.
Hvilke overordnede ting skal gøres i forbindelse med database design?
- Der vælges nøgler på baggrund af den logiske model.
- Det besluttes hvordan arv skal omformes
- Der normaliseres
- Det afgøres om der skal være historik, hvordan NULL værdier skal håndteres og om der skal bruges views.
Hvad er normalisering? Hvad er formålet med normalisering?
Efter omformning skal databasen normaliseres.
Her er målet at identificere og fjerne visse former for redundans.
Hvordan opnås første normalform?
- Normalform:
- Alle attributter er atomare. Dvs de kun indeholder én information.
- Ingen multiple value attributter
Hvordan opnås anden normalform?
- Normalform:
- 1. normalform
- Hvis der er en sammensæt nøgle, skal attributterne være funktionelt afhængige af hele nøglen og ikke kun dele af den.
Hvordan opnås tredje normalform?
- Normalform:
- 2. normalform
- Enhver attribut må kun være funktionelt afhængig af én nøgle. Altså må der ikke være funktionelle afhængighed mellem ikke-nøgler.
På hvilken normalform siger man normalt at en database er normaliseret? Findes der højere normalformer?
Når en database er normaliseret mener man typisk at den er på 3. normalform. Men der findes også højere normalformer: Boyce Codd, 4. og 5. normalform.
Hvilke overvejelser er der typisk i forbindelse med spørgsmålet om historik eller ej?
Når man afgør om der skal være historik stiller man sig selv spørgsmålet:
- Skal jeg kun kunne se den nyeste værdi (altså ingen historik)
- Eller skal jeg kunne se nyeste og tidligere værdier (altså med historik)
Hvordan indfører man historik på en database?
Man opretter en ekstra tabel til historik.
Ønskes dette ikke kan man i stedet gøre brug af logisk sletning:
- Her bruges update til at sætte en “deleted-bit” til true i stedet for reelt at slette data. På denne måde undgår man at gøre brug af en ekstra tabel. I stedet har man blot en ekstra bit kolonne.
Hvad er en teknisk attribut? Kom på et eksempel på en typisk teknisk attribut.
Det er normalt at tilføje tekniske attributter som ikke er en del af den logiske model (UML). Eks: Created by, Modified by osv.
Hvilke forskellige steder kan man validere data integritet?
- I databasen
- I applikationen
- Begge steder
På hvilke måder kan man validere data integriteten i databasen?
Generelle contstraints:
- Fire typer:
- Primary key
- Unique
- Foreign key
- Check
- Generelle constraints er lette at bruge
- Ikke-standardiserede faciliteter:
- Rules
- Er en slags check der kan
bindes til en specifik attribut.
- Rules
- Triggere
- AFTER-trigger
- Den normale form for
triggere vi har lært om, hvor
en trigger udføres efter en
bestemt hændelse. Eks:
Insert, Update, Delete. - INSTEAD-trigger
- Er en trigger der køres i
stedet for SQL-kommandoen
- AFTER-trigger
Hvad indebærer indkapsling med views i databasen?
I en del tilfælde vælger virksomhederne at placere et lag af views ovenpå tabellerne.
På denne måde kan man ændre i tabellernes udseende (oftest) uden at skulle ændre på programmerne overhovedet.
Implementeringen af disse views gøres nemmest inden programmeringen starter.
Hvad er en transaktion?
Et antal SQL sætninger der udgør en helhed og som følger ACID principperne.
Hvilke tre kommandoer er der i en transaktion?
Begin, rollback og commit
Hvad er vigtigt i forhold til den connection en transaktion udføres i?
Den connection der bruges skal være åben under hele transaktionen.
Hvad er ACID principperne?
Atomicity (alt eller intet)
Consistency (der kommer ikke “ulovlige” data i databasen når programmet bruges af flere)
Isolation (mellemresultater er usynlige for andre)
Durability
Hvordan påvirker samtidighedskontrol performance?
Samtidighedskontrol påvirker performance negativt hvis der bruges låsning
Hvad er forudsætningerne for, at der opstår samtidighedsproblematikker?
- Transaktioner kører samtidig
og/eller tilgår de samme data
Mindst en transaktion opdaterer eller sletter
Kan man på nogen måde lave inserts, updates og deletes uden at støde på samtidighedsproblematikker? I så fald, hvordan?
Kan undgås med blinde opdateringer:
- Insert, update eller delete uden foregående selects.
- Undgår typisk samtidighedsproblemer fordi sådanne oftest opstår efter læsning af nogle data og efterfølgende opdatering.
Hvad er forskellen på en implicit og en explicit transaktion?
- Implicit (enhver query er en transaktion)
- Explicit (der skrives begin tran/ rollback / commit explicit i query)
Hvordan kan transaktioner bruges i samspil med stored procedures?
Har ikke som sådan noget med en transaktion at gøre.
En stored procedure kan placeres indeni eller udenom en transaktion, eller have en transaktion i sig.
Hvilke to tilgange findes der overordnet til løse samtidighedsproblematikker?
Pessimistisk samtidighedskontrol (låsning)
eller optimistisk samtidighedskontrol (versionering)
Hvilke tre samtidighedsproblemer arbejder vi med?
Dirty read, lost update (non-repeatable read) og phantom read
Hvad er en dirty read? I hvilke tilfælde opstår den?
Der læses på en opdateret værdi der så efterfølgende rulles tilbage. Altså er der læst en værdi der ikke længere eksisterer.
Løses ved at låse den data der opdateres (Read commited)
Hvad er en lost update? I hvilke tilfælde opstår den?
To opdaterer den samme data på samme tid. Det er så kun den sidste opdatering der er den gældende, på den måde er den første transaktions ændringer gået tabt.
Sker typisk ved select + update transaktioner
Løses ved at låse den data der er læst med Repeatable Read
Hvad er en phantom read? I hvilke tilfælde opstår den?
Problemet opstår hvis en transaktion har læst data og inden transaktionen bliver færdig, indsætter en anden transaktion data, som den første transaktion ville have læst, hvis de var blevet indsat før.
Sker typisk ved select + insert transaktioner
Løses ved at låse hele datasættet med Serializable
Hvad er en shared lås?
Er en delt lås (også kaldet en læse lås). Bruges på SELECT operationer og deles mellem flere transaktioner.
Hvad er en eksklusiv lås?
Er en lås der kun kan bruges af en transaktion af gangen. Der er altså dermed ikke andre transaktioner der kan have hverken en eksklusiv eller shared lås samtidig.
Bruges ved insert, update og delete
Hvordan implementerer man låsning i databasen? Hvad er fordele og ulemper?
Ved at bruge isolation levels på transaktioner.
Fordelen er, at det løser alle samtidighedsproblemer.
Ulempen er at det kan give ventetider ved bruger interaktion med systemet.
Hvordan implementerer man versionering i databasen? Hvad er fordele og ulemper?
Kan enten gøres ved at programmøren selv skriver kode til at checke om data er ændret. Alternativt kan der sættes en ekstra attribut på tabellen af typen rowversion. Den sidste mulighed er at bruge isolation level “Snapshot”. På den måde foregår versioneringen bag ens ryg.
Versionering giver ingen ventid ved brugerinteraktion med systemet.
Til gengæld er risikoen for rollbacks større.
Hvad er fordelen ved at bruge snapshot til versionering?
Selve versioneringen foregår bag ens ryg, og er derfor let at implementere. Det eneste man skal huske er at reagere på update conflict fejlen i SQL server der har koden 3960
Hvad er granularitet? Hvilke tre niveauer af granularitet findes der? Hvordan implementeres de i SQL Server?
Handler om hvor meget data der låses
Tre niveauer:
- Record
- ROWLOCK
- Page
- PAGLOCK
- Tabel
- TABLOCK
Hvilken anden lås end shared og ekslusiv lås tilbyder SQL Server? Hvordan er den anderledes? Hvordan implementeres den i SQL Server?
Update lås.
Andre transaktioner må godt have en
SHARED lås på de pågældende data
samtidigt. De må ikke have en
UPDATE eller en EKSKLUSIV lås på
de pågældende data samtidigt.
Hedder en UPDLOCK i SQL Server.
Hvordan opnår man den bedst mulige performance ved brug af pessimistisk samtidighedskontrol?
Lad transaktionen bruge
* så få data som muligt
* i så kort tid som muligt
* med et så lavt isolation-level som
muligt
I hvilket tilfælde er det vores eget ansvar at bruge operationerne begin, commit og rollback?
Ved explicitte transaktioner.
Hvis man siger begin tran skiftes til
eksplicit transaktion og det er ens
eget ansvar at afslutte
transaktionen med rollback eller
commit.
Hvad er Oracle? Hvordan adskiller den sig fra MSSQL?
Verdens mest brugte relationelle database.
Meget striks med syntaks sammenlignet med MSSQL. Men kernen af SQL virker på samme måde i Oracle som i MSSQL
I de ældre versioner af Oracle findes Identity ikke
Programmeringssprogene PL/SQL og T-SQL har meget forskellig syntaks.
Hvad indebærer flytbarhed ifht. skift af DBMS?
Flytbarhed i forhold til DBMS handler om hvor enkelt eller
besværligt det er at flytte en applikation fra at bruge et DBMS-
mærke til et andet.
Hvilke tre teknikker er der til backup af en database?
Fuld backup, Differential backup og Log backup.
Hvad kendetegner en fuld backup af databasen?
Total backup af hele databasen som den ser ud på tidspunktet
Hvad kendetegner en differential backup af databasen?
En summeret backup - altså en backup af de seneste ændringer siden sidste fulde backup
Hvad kendetegner en log backup af databasen?
Backup af loggen over entries i databasen
Hvad er et backup device?
Der hvor backups gemmes
Når en backup gemmes får den et fil nummer, som så efterfølgende kan bruges hvis der skal laves restore
Hvad er forudsætninger for at kunne lave restore på databasen?
At der findes en backup af det der ønskes at lave restore på.
Hvilke parametre SKAL defineres på en restore kommando i SQL Server?
File, Replace (på den første restore), Norecovery (på alle, pånær den sidste restore), Recovery (på den sidste restore)
Hvad fortæller File parameteren i restore kommandoen noget om?
Definerer hvilken backup der skal restores
Hvad fortæller Replace parameteren i restore kommandoen noget om? Hvad er vigtigt at huske med denne parameter?
Sættes KUN på den første restore sætning. Sikrer at det der er i databasen i forvejen fjernes inden en fuld backup.
Hvad fortæller Norecovery parameteren i restore kommandoen noget om? Hvad er vigtigt at huske med denne parameter?
Sættes på alle undtagen den sidste restore kommando. Fortæller at der kommer flere restore kommandoer, og at databasen derfor endnu ikke må låses op.
Hvad fortæller Recovery parameteren i restore kommandoen noget om? Hvad er vigtigt at huske med denne parameter?
Sættes på den sidste restore sætning. Fortæller at der ikke kommer flere restore sætninger. Herefter er databasen igen låst op.
Hvad er roles i SQL Server?
Definerer rettighederne for brugerne af databasen.
Svarer til grupper af brugere. Gruppen kan så gives tilladelser
En bruger kan så være medlem af en eller flere grupper, og får dermed de tilladelser der er deri
Hvilke typer roles er der?
Public roles, database roles og application roles.
Hvilke to kategorier af database roles er der? Hvad kendetegner dem?
Fixed - er på forhånd defineret hvilke roller der er, og hvilke rettigheder de specifikke roller har
Userdefined - defineres af os. Er ikke forudbestemt.
Kom med eksempler på nogle fixed database roles i SQL Server
Db_ddladmin
□ Må create og droppe tabeller
□ Giver ikke samtidig adgang til at læse og skrive i dem
Db_accessadmin
□ Kan give adgang til andre
Db_datareader
□ Må læse alle databaser, også fremtidige
Db_datawriter
□ Må skrive i alle databaser, også fremtidige
Db_denydatareader
□ Ikke muligt at læse i databaser
Hvad viser billedet?
Definering af user defined roles.
På hvilke forskellige niveauer kan man give tilladelse i databasen?
På database niveau
På tabel niveau
På delmængde af tabel
På row level niveau
Hvordan giver man kun adgang til en delmængde af en tabel?
Implementeres ved at lave views på en delmængde af en tabel. Hvis en bruger får tilladelse til at påvirke viewet, får brugeren kun adgang til den delmængde viewet repræsenterer - og altså ikke hele den oprindelige tabel.
Hvad står ORM for?
Object Relational Mapping
Hvad er en ORM? Hvad bruges den til?
Oprindeligt lavet til relationelle databaser. Er et automatiseret program til kommunikation mellem applikation og database.
Kom med et eksempel på en ORM.
Entity Framework, LINQ
Hvad brugte man til at kommunikere mellem applikation og database før ORM?
JDBC (Java), ADO (.Net), osv.
Her bygger programmøren det hele selv. Det er mere komplekst og bøvlet
Hvad er vigtigt når man ønsker at persistere ændringer foretaget med Entity frameworket?
Save changes() sørger for at persistere ændringen.
Hvad er en navigation property i forbindelse med Entity Framework?
○ Kaldes også link attributter
○ Bruges til at skabe fremmed nøgle referencer fra databasen i model klasserne.
○ Der skabes tovejs referencer, altså får begge klasser en reference til den anden.
○ Når entity skaber klasse definitionen laves både en almindelig attribut der repræsenterer fremmednøglen (samt en collection på fremmednøglens klasse definition), og samtidig laves der en link attribut, eller navigation property, som er en link reference til den fremmede nøgles klasse. Det betyder dermed også, at der er en del redundans når Entity frameworket opretter klassedefinitioner.
Hvilken datatype returnerer LINQ’s GroupBy funktion altid?
En var - altså en uspecificeret type
Hvad er vigtigt at huske når man bruger LINQ’s Using funktion?
Connection til db åbner når querien startes, og lukkes igen lige efter den er udført. Derfor kan eventuelle variable ikke tilgås efter connection til db er lukket.
Hvad siger begreberne Lazy/Eager og Deffered/Immediate i Entity Frameworket noget om?
Det definerer forskellige tilgange til at hente data. Det handler dermed om hvor meget data der hentes, og hvornår.
I hvilke tilfælde er det interessant at snakke lazy vs eager approach til at hente data via Entity?
Spørgsmålet om lazy vs eager er kun interessant at snakke om i tilfælde hvor en given operation udføres i flere mindre LINQ queries.
Hvad er forskellen på Lazy og Eager approach til at hente data via Entity?
Handler om hvor meget.
- Lazy loading: ○ Henter kun almindelige attributter på et objekts klasse til en start ○ Henter først navigation properties når de skal bruges - Eager loading: ○ Både almindelige attributter og navigation properties hentes med det samme.
Hvordan sørger man for at der bruges eager loading fremfor lazy loading i Entity?
Eager loading kan bruges ved at benytte Include operation på query. Her kan de link attributter der ønskes hentet til start inkluderes.
Hvad er forskellen på Deffered og Immediate approach til at hente data via Entity?
Handler om hvornår.
- Deffered execution: ○ En LINQ query udføres først når resultatet af den rent faktisk skal bruges. - Immediate: En LINQ query eksekveres der hvor den bliver deklareret.
Hvordan sørger man for at der bruges immediate execution fremfor deffered execution i Entity?
Kan bruges ved at benytte funktioner som ToArray() på en given LINQ query.
Gøres dette hentes data op i det øjeblik
Hvilket approach er standard til at hente data via Entity?
Deffered/Lazy.
Altså gøres så lidt som muligt, så sent som muligt.
Hvad sker der hvis en navigation property hentes for anden gang via Entity?
Hvis en navigation property er blevet hentet en gang, så er de gemt i en cache og kan derfor bruges herfra efter første gang.
Hvilket approach er standard til at hente data via Entity i .Net Core? Hvad betyder det i praksis?
Bruger som udgangspunkt eager loading, og derfor bliver man tvunget til at skrive Include() i sin LINQ query hvis man skal bruge navigation properties.
Hvad er et dokument i en No-SQL database?
Er den enhed man gemmer. Svarer til en record i RDBMS
Hvad er en collection i en No-SQL database?
En samling af dokumenter. Svarer til tabeller i RDBMS
Hvilke to teknikker er der til at implementere fremmed nøgler i en No-SQL database? Nævn dem blot ved navn?
Redundant og Foreign keys.
Hvad går Redundant teknikken til at implementere fremmed nøgler i en No-SQL database ud på?
Her placeres det andet objekts attributter redundant i det første objekt. Det vil sige at noteres en medarbejder som ansat i mere end en virksomhed, vil hans data eksistere flere gange.
Mest brugte teknik af de to.
Hvad går Foreign keys teknikken til at implementere fremmed nøgler i en No-SQL database ud på?
Det første objekt får en reference til det andet objekts id.
Skal begrænses i antal, da det kan være svært at joine.
Hvad er et denormaliseret udtræk? Hvornår bruges det typisk?
Der kan laves et denormaliseret udtræk af en relationel database. Dette udtræk kan eks. Placeres i en mongoDB og herfra kan data så hentes med god performance
Opdateringer af databasen sker stadig primært i relationsdatabasen.
Teknikken bruges eks. også til datawarehousing.
Hvilken form for validering/check er indbygget i en No-SQL database?
Der er intet check på de data der indsættes.
Det er os selv der bestemmer hvor konsistent databasen skal være
Hvad definerer generelt set en No-SQL database?
- Intet check af data
- Er hurtige (dels fordi de faktisk er hurtige, og dels fordi de ikke checker noget og bruger denormalisering)
- Bedst brugt til semi strukturerede data, eller til lagring af stærkt denormaliserede data
Hvilke tre databasemodeller arbejder vi med? Hvad kendetegner dem?
Relations databaser:
○ Strukturerede data
○ Normalisering
○ Validering af data
Dokument databaser:
○ Ingen kontrol (validering) af data
○ Kan håndtere ikke-strukturerede data
○ Denormalisering
○ Satser på hastig afvikling (god performance)
Graf databaser:
○ Anvendes bedst i mere komplekse løsninger, da det i de fleste tilfælde er nemmere og bedre at løse simple problemstillinger med en almindelig relationsdatabase.
Hvad er datawarehousing?
Datawarehousing bruges til at gemme data (oprindeligt fundet via et almindeligt IT-system i en virksomhed) som skal bruges til at lave statistik, hente information og drage konklusioner på.
Hvad dækker begrebet OLTP over? Hvad står forkortelsen for?
Online transaction processing. Begrebet bruges i forbindelse med snakken om datawarehousing.
Repræsenterer det almindelige IT-system.
Data gemmes typisk i en relationel database
Hvad dækker begrebet OLAP over? Hvad står forkortelsen for?
Online Analyzing processing. Begrebet bruges i forbindelse med snakken om datawarehousing.
○ IT-system hvis formål er at hente information ud af de data OLTP systemet har samlet ○ Data kan både komme fra indtastede data direkte i OLTP systemet, eller det kan være såkaldt måledata der er indsamlet via eks. IoT ○ Disse informationer kan gemmes i det man kalder et datawarehouse.
Hvad er denormalisering i forbindelse med datawarehousing?
Data fra OLTP databasen denormaliseres og placeres i OLAP databasen
Hvad er forskellen på den data der ligger i OLTP databasen og den der ligger i OLAP databasen? Hvad er formålet med den hver i sær?
Samme data gemt forskelligt.
- Data i OLTP = Flere mindre opdateringer og ændringer med fokus på check
- Data i OLAP = Få men store dataudtræk til store og mere komplekse analyser
Er relations databasen egnet til at være en OLAP database?
Bedst egnet til OLTP systemet, men der er også lavet udvidelser til at håndtere OLAP systemer
Hvilken arkitektur bruges til datawarehousing?
Den multidimensionale model (stjernearkitekturen)
Hvad kendetegner den multidimensionale model som datawarehousing arkitektur?
Primær analyseområde findes (eks. Salg) og bliver dermed til fact tabellen. ○ Herefter defineres hvilke andre områder indenfor salg der også ønskes at analyseres på (eks. Produkt, Tid, Lokation).
Hvad er den største udfordring med datawarehousing?
Datakvalitet er den største udfordring.
Handler om hvor godt data i databasen stemmer overens med virkeligheden