Databasesystemer Flashcards

1
Q

Hvordan putte noe inn i en tabell

A

INSERT INTO student VALUES(‘Hans’, 18, ‘Lund’);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Endre en verdi flere steder
Endre verdier på flere verdier som passer med et tilfelle
Slette all data som passer med viss tilfelle
Query all data etter en viss verdi
Query data med andre navn

A

UPDATE student
SET name = ‘Bio’
WHERE major = ‘Biology’

UPDATE student
SET name = ‘Bio’
WHERE major = ‘Biology’ OR major = ‘Chemistry’

DELETE FROM student
WHERE student_id = 5

SELECT employee.name
FROM employee
WHERE employee.on_holiday = false

SELECT first_name as fornavn, last_name as surname
FROM employee

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Logiske operatorer

A

WHERE:
UPDATE student
SET name = ‘Bio’
WHERE major = ‘Biology’;

AND
SELECT title
FROM videgame
WHERE metascore > 80 AND plaotform = ‘PC’;

OR:
UPDATE student
SET name = ‘Bio’
WHERE major = ‘Biology OR major = ‘Chemistry’;

NOT
SELECT title
FROM videgame
WHERE NOT plaotform = ‘PC’;

DELETE:
DELETE FROM student
WHERE student_id = 5;

AS
Navnet man vil ha for referenase til noe, hvis man vil ha noe annet som refererer
SELECT first_name as forename, last_name as surname
FROM employee

LIKE
Samme som ==
SELECT *
FROM client 
WHERE client_name LIKE 'B%';
B%\_\_\_\_\_
B med fem tegn etter
%Mario%
Tablet har mario i seg
% kalles wildcard
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Hva er normalisering?
Hva skjer hvis man ikke normaliserer?

Hva er 1NF
Hva er 2NF
Hva er 3NF
Hva er BCNF

A

En måte å organisere data
Har som mål å redusere redundant data
Brukes for å ta vekk repetert data og for å vise at dataen gir logisk mening, altså er nyttig.

Applikasjon går treigere ettersom den må grave igjennom mer data som egentlig ikke har noe nytte
Det kan bli vansklig å håndtere og oppdatere databasen

Sletter repeterte grupper
Lager separate tabeller for hvert set med relatert data
Identifiserer hvert set av relatert data med en pimary key
Så hvis man har en kolonne, så skal man ikke ha flere mengder info på samme kolonne-rad, som en slags liste info.
man skal heller da lage en separat column for den informasjonen.

Tabell har ikke delevis avhengighet
Delevis avhengighet betyr at primary key ikke er fullt avhengig av data i andre columns, altså det er noen columns man kunne vært foruten.
Altså man la oss si pokemon en pokemon tabell, så burde man ikke ha noe slikt:
Eks | department id | employee id | office_location - Disse burde heller deles opp
| employee id | department id | og |department_id | office_location

Det skal ikke være “transitive dependency for non.prime attributes”
Hva betyr dette?
At alle non-prime attributes avhenger av prime attributet
Eks man burde ikke ha en subject_id og subject i samme kolonne, man burde heller bare ha subject_id, som så refererer til en subject-tabell der subject er.

Hvis A determinerer B, kan ikke B være en primærnøkkel.
Dette spesifiserer 3NF.
3NF sier at prime-atts skal determinere non-prime.
Altså:
3NF -
non-prime atts kan ikke determinere andre non-prime atts.
BCNF -
non-prime atts kan ikke determinere prime-atts

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Hva er surogate key
natrual key
primary key
foreign key

A

Surogate key
En nøkkel som ikke har noen virkelig relasjon til noe i databasen,
Men er heller der for å unikt kunne identifisere data i tabellen.
Eks id

Natrual key
En primary key som har en virkelig relasjon til ting i databasen.
Primary key’en i dette tilfelle fir faktisk info, og er for mer enn å bare identifisere
Annen info i tabellen.

Primary key
Nøkkel for å identifisere data i en tabell
Hva hvis man har to prime nøkkler?
Da kan bare de to nøkklene sammen identifisere data

Foreign key
Data som linker til info i en annen tabell.
Foreign key må referere til en primary key i en annen tabell

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Grupperingsfunksjoner

Grupperings syntax

A

SELECT platfrom, AVG(user_score) FROM games
GROUP BY platfrom

AVG
SUM
COUNT
MIN
MAX

Man bruker HAVING, fremfor Where, når utvalg er basert på grupperinger

SELECT platfrom, AVG(metascore)
FROM videogame
GROUP By platfrom
HAVING AVG(metascore) > 68

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Noen innebyggde funksjoner

Operatorer

A

SELECT [column]*10

SUM
TOTAL
DIV
AVR
AS - referere etter et annet navn
UPPER(COLUMN) - oppercase
FLOOR(column) - runder ned
ROUND() - avrunder
Operatorer:
Aritmetiske: *, /, +, -
Sammenligning  > < = <= >= <> LIKE
Null-test IS NULL
Boolske NOT, AND, OR
Intervall BETWEEN… AND
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Putte ting fra en tabell inn i en annen

A

INSERT INTO tabell1
SELECT DISTINCT kolonne
FROM tabell2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
Hva  gjør join
Syntax til JOIN
FULL OUTER JOIN
LEFT JOIN
RIGHT JOIN
INNER JOIN
A
Hva gjør JOIN?
Putter samme to tabeller
Det er altså noe man kan gjøre med SELECT, der man kan få opp info fra flere forskjellige tabeller
Man har:
INNER JOIN
LEFT JOIN
RIGHT JOIN

Hvilke rader fra tabeller blir kombinert i følgende scenarioer?
________________________________________________________________________________________
INNER JOIN
De radene som har lik key av de key’ene som sammenlignes.

SELECT youtube_channels.yt_profile.profile_name, youtube_channels.yt_vid.video_title, youtube_channels.yt_vid.veiws
FROM youtube_channels.yt_profile
INNER JOIN youtube_channels.yt_vid
ON youtube_channels.yt_vid.profile_id=youtube_channels.yt_profile.profile_id;

________________________________________________________________________________________

Hva er LEFT? - Den tabellen man selecter FROM, altså tabellen etter FROM
Hva er RIGHT? - Den tabellen man selecter mot, altså den tabellen man sammenligner med
SELECT * FROM tabell1 LEFT JOIN tabell2
Tabell 1 er til venste, mens tabell2 er til høyre

LEFT JOIN
Viser alle radene fra left-tabellen, men viser ting bare fra right-tabellen hvis radene matcher.
Hvis left-tabellen ikke har en match i right-tabellen, vil infoen bli vist som NULL.

SELECT youtube_channels.yt_profile.profile_name, youtube_channels.yt_vid.video_title, youtube_channels.yt_vid.veiws
FROM youtube_channels.yt_profile
LEFT JOIN youtube_channels.yt_vid
ON youtube_channels.yt_vid.profile_id=youtube_channels.yt_profile.profile_id;

RIGHT JOIN
Viser alle radene fra right-tabellen, men viser ting bare fra left-tabellen hvis radene matcher.
Hvis right-tabellen ikke har en match i left-tabellen, vil bli vist som NULL.

________________________________________________________________________________________

FULL OUTER JOIN
Viser begge tabellene.
Men vil også vise om cellene matcher, ved at
1. Hvis celler har en match blir de puttet øverst i seleksjonen
2. Hvis celler ikke har en match, vil de vise NULL, der de ville vist info fra en annen tabell.

Jeg vet ikke hvorfor syntax’en her ikke fungerer
Det har noe med ‘OUTER’

SELECT youtube_channels.yt_profile.profile_name, youtube_channels.yt_vid.video_title, youtube_channels.yt_vid.veiws
FROM youtube_channels.yt_profile
FULL OUTER JOIN youtube_channels.yt_vid
ON youtube_channels.yt_vid.profile_id=youtube_channels.yt_profile.profile_id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Hva er en vindu funksjon?
Hvordan fungerer over() med partition?
Synatx

A

Det lar en skap eet “vindu” til en tabell i en annen tabell. Man kan altså i select putte inn enda en row, som gir et “vindu” til noe man ikke kunne ha gjort utenom window funksjoner. Man kan eks ha liste over hver individuelle lønning, sammen med maxlønningen i samme query.

window funksjoner fungerer litt som group by, i det at man kan samle data for en ting, men window funksjoner skiller seg i det at man kan også ha individuell data.
[grupperingsverdi] over(partition by gruppering]

syntax:
select [det som skal ses],
[grupperingsverdi] over(partition by gruppering]
from [table]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hva gjør case

Syntax for case

A

Case gjør at man kan legge til enda en column i en query, der ting kategoriseres etter et tilfelle.

select [verdi], CASE
WHEN [verdi] [sammenligning] [verdi2] THEN [verdi i col]
WHEN [verdi] [sammenligning] [verdi2] THEN [verdi i col]
WHEN [verdi] [sammenligning] [verdi2] THEN [verdi i col]
ELSE [verdi i col]
END AS [navn på column]
FROM [table]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Hva gjør row_number?

A

Gir et row_number for hver row.
Hvis man ikke har noe i over(), får hele tabellen et row_number().
Hvis man bruker partition by i over, gis det et row_number for hver gruppering i over.
Dette gjør så man kan enklere referere til grupperinger, og gjøre ting med dem

gir row number for hver data i en query

ROW_NUMBER() OVER (
[PARTITION BY partition_expression, … ]
ORDER BY sort_expression [ASC | DESC], …
)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Hva gjør rank?

A

rangerer det som er i over() ved å legge til en ny column,

med et tall for rangeringen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Hva gjør dense_rank?

A

rank skipper duplicate verdier??

mens denserank skipper ikke duplicate verdier.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hva gjør lead og lag?

A

Skjekker det som er foran og det som er bak
Det lager enda en column, der man se kan disse verdiene.
Så eks row 3, vil ha en column som inkluderer en verdi i row 2 (hvis man bruker lag)

Eks:
1 id | company | value

SELECT company, value,
LAG(value, 2) OVER(ORDER BY sale) as previous_sale_value
FROM sale;

starter fra 2 rader over
1. ser her
2.
3.
4. gjeldende rad
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
Hvordan koble en mange-til-mange-tabell
utfordring 1:
En tabell har filmer,
en annen tabell ha skuespillere.
Query en tabell med alle skuespillere i en viss film

utfordring 2
Ha den samme tabellen, men nå spiller det ingen rolle
hvilken film det er snakk om.
Hvis alle filmer, og akuespillere som har spillt

A
SELECT a.name
FROM movie_has_actor mha
JOIN movie m ON mha.movie_id = m.id
JOIN actor a ON mha.actor_id = a.id
WHERE m.name = "[navn på film]"

SELECT a.name, m.title
FROM movie_has_actor mha
JOIN movie m ON mha.movie_id = m.id
JOIN actor a ON mha.actor_id = a.id;

Uten join:

select a.name, m.title
from movie_has_actor mha
where mha.moive_id = m.iD
and where mha.actor_id = a.id

17
Q

Hvordan fungerer HTTP?
Hva er HTTPS?
Ulemper og fordeler med HTTPS

A

HTTP:
Man sender en forspørsel: GET, man kan gi input: POST, og man kan gå tilbake svar: RESPONSE.
Eksempel på GET: Man går inn på en side, og ettersør adressen til siden.

POST:
Man fyller ut betalingsskjema.

RESPONSE:
Man får tilbake en nettside adresse fra en side.

HTTPS:
HTTPS krypterer det man sender over. Så etterhvert som man sender over data, blir dataen kryptert. Dette hindrer at folk man lese dataene man sender eller får.
1. Server/klient blir enig om krypteringsalgorithme
2. Klienten validerers serverens nøkkel
3. Server validerer klienten
4. De blir enige om kryperingsnøkkel

Ulemper og fordeler:
Fordeler:
Ser at parter er hvem de sier de er
Beskytter mot “man in the middle” attacks

Ulemper:
Kan gi falsk sence of security.
Beskytter ikke hvis partneren man snakker med faktisk er en scammer selv
Det kan være sikerhettshull i nettleser
Mottakeren kan gjøre ting med dataen man ikke vet om
Mottakeren kan være hacket

18
Q

Gjør følgende for å alltid ha riktige quiries:

A

Ha ALIAS for alle wueriene som blir brukt.
Gjlr hva fu kan for å få til dette.
Hvis du må putte en tabell som movie_has_actor
i FROM, så gjør det.

Ta JOIN på de queriene som du skal ha med.
Du linker mange til mange tabeller slik,
ved å JOINE kolonnene i linktabellen med id i de to andre tabellene
FROM link_table lt
JOIN table1 t1 ON t1.id = lt.table1_id
JOIN table2 t2 ON t2.id = lt.table2_id;

19
Q

Hvis https er bedre, hvorfor bruker da fortsatt noen http?
Hva er en cookie?
Hva brukes cookies til?
Set-cookie og sessjon
Hvordan få tak i cookie?
Hvordan få tak i sessionID?
Hvordan beskytte seg mot cookie-stjeling/sessionid stjeling?
Eksempler hvordan hvordan gjøre avlyttning?

A
1
Kapasitet
Kompleksitet i server
Hastighet for bruker
Sertifikater slitsomt/dyrt - Men https kan få tak i gratis i dag - viktig med hackere også
Gammel vane
Brannmurer/datanett
MEN: https får i dag bedre rangering

2
EU lov
Man må dga informere om cookies på nettsider
Det lagres på msskin til bruker
en måte server husker info fra hver enkelt bruker eks innloggingscookie
Bare samme webserver får tilgang til cookien på den siden
GET sidepath
HTTP generer et svar, med statusmelding. Set-Cookie
Get - Maskinen blir bedt til å lagre cookien. Når man logger inn neste gang, ses det igjennom cookies og ser om det er noen til den siden

3
hvilke annonser som er sett
brukerinnstillinger på sider
spore brukeren rundt på siden
handlekruver
har sett lisensavtale
sessionid
osv

4
Set-Cookie
Kan fortelle hvor lenge cookie skal vare før den slettes
Eks når man logger inn i nettbank, sesson utløper
Kan fortelle hvilken del av siden som skal ha tilgang til cookien
HttpOnly - forhindrer uthenting av cookie med javascript
Secure attributt - gjør at cookie kun oppgis med https forespørsel

Session - innlogget øit
Hvis en klarer å stjele ens sessionsID på en side, så har de tilgang til kontoen uten å logge inn
Dette fungerer bare hvis man ikke er aktiv, altså session er ikke slutt

5
Man kan overstyre cookie med eks en plugin
Med cookies kan man finne ut av ting som:
interesser, enheter de bruker, aktiviteter på tidspunkt…

6
Hvis det går via http (åpen kommunikasjon, har noen større adgang til å avlytte avsending av sessionid)
Det kan være plugin på nettleser med sikkerhetshull som kan mekkes av hacker
Man har tilgang til maskinenen
social engineering - få person til å gi cookie
Gjette - kanskje det lagres lunder noe lett på side eks basert person brukernavn

7
logg ut etter burk
ikke gi cookie til noen
ikke nedlast skadevare
Utviklere kan:
huske ipadresse avhengig i session
kjennetegn på bruker, som land, enhet, osv
De burde genereres randomt
Ha httponly
8
Cookies
ipadresse
plugin
avlytting på linje eks wifi
20
Q

Hva er XSS?
Hvorfor er det farlig å åpne bilde i epost?
Hva er input?
Hva er blacklisting og whitelisting?

A

Cross site scripting
Hacker side ved å feks putte javascript i noe i put, som henter ut alle cookiesene og sender det til en annen server

Bilder er en ekstern reeurs,
så hvis man har en sånn i eposten hentes det ekstern fra en side. slik at folk kan vite når man wå på bildet

- veien til all "hackinc"
Hva er input?
skjemalementer
brukerhandlinger
parametere i nettleser(GRT)
og post data
headerfelter
cookies

de tegnene vi ikke har tenkt på håndteres som:
whitelisting v blacklistkng
whitelisting : lett å glemme noe som er burde være lov
blacklistkng : mer srbeid pp forhånd, samt sjelden oppdatert

21
Q
Hva er noder?
Trådløse nettverks krypteringsstandarder
Hvordan hacker kan utnytte at datamaskiner kobler seg automatisk til beste tolkobling
Hacker angrep via proxyserver.
Hva er multifaktorisering?
A

Sending av data fungerer slik at det sendes innom “stasjoner” på veien.
Disse kalles noder
Hacker kan få tilgang til en av disse nodene, og dermed avlytte sendingene.
Større noder er cansklig å avlytte, så hackere bruker mer noder nærmere en bruker.

WEP:
Dene ldste, 64bit. Enkel å knekke
WPA og WPA-2 er bedre kryptert, men kan knekkes hvis man har enkle passord
WPA-2 med et godt passord snbefales

Datamaskinger vil koble seg til nettet med sterkest signal.
Det betyr at en hacker kan sette opp et nettverk vedsiden avnpersonen, og kalle nettet det samme som basestasjonen sitt.
En kan også bruke dette til å lage rt falsk nett, der en skal logge inn via en nettside (dom ofte er tilfelle på offentlige steder(. Der kan de ha det sånn at man dkal oppgi betalingsinformasjon

Hvis man gjør dette via en proxy server, vil det være vanskligere å spore den som står bak, fordi det vil se ut som om sbgrepet ble gjort av selve oroxyserveren.
Man kan gjøre avlytting av personnved å få person til å koble til ptoxyserver. Kan skje ved skadevare, eller social engineering
Man kna få til at personnkontakter feil DNS server
Dette kan gjlres ved å:
Være midtmann mellom person og FNS server, og endre forespørselen til avsender
Man kan endre den DNS serveren personen kontakter, med skadevare/social engineering

Multifaktorautetiseting
faktorer:
noe man hsr (mobil, kodebrikke, bankkort eks)
Noe man vet, passord, PIN
Noe du er (stemme, ansikt, fingeravtrykk eks)
HAR, VET, ER

22
Q
Hva er skadevare?
Oppbyggning til skadevare, og hva de forskjellige delene gjør
Hvordan beskytte seg mot skadevare?
Hva er inkubasjon?
Drivkrefter til å drive med skadevare?
Hva er adware, spywarem og rootkits?
A
Oppbyggning:
stridshode (warhead)
spredning (propagation)
kamuflasje (stealth)
nyttelast (payload)

strifshode:
inneholder oppskrift på hvordan skadevare skal få infisert maskinen.
Ved eks social engineering eller å utnytte hull i OS/programvare

spredning:
Hvordan skadevaren skal klare å infisere andre, og dermed spre seg videre.
Ved eks sending av epost eller meldinger på sosiale medier, spedning av
filer.

kamuflasje
At programmet gjemmer seg fra brannmur og antivirus program
ved at det f.eks angir sin oppførsel for å være en annen.

Nyttelast:
Jobben som skadevaren skal gjøre.

Forskjellige virustyper

Skadevare skiller seg primørt utifra hvordan det blir spredd
Virus:
Infiserer når bruker åpner infisert fil.
infisererer uinfiserte filer.
Sprer seg videre når bruker sender fil til en annen.

Orm:
Infiserer på samme måte som virus,
men finner offre selv,
eks via epostkontakter, gjetting, sosiale medier…

Trojaner:
Skjuler seg som en del av andre applikasjoner.
Sprer seg ikke på egenhånd, må være pakket inn med et virus eller orm
for dette.
Kan spres via social engineering.

Nettleserutvidelser:
Trojaner kan gjemme seg i plugin i nettleser.
Da vil brannmur ha vanskligere for å ta hånd om skadevaren,
ettersom det er tenkt at dette er nettleseren sin jobbb.
En slik skadevare kan få tilgang til cookies, historikk, utfyllt
skjemadata, osv.

Drive-by-download:
Her er det nok at man er inne på en nettside for at man blir infisert.
Det kan skje ved at nettside utnytter sikkerhetshull i nettleser.

Makrovirus:
Program kan tillate programmering i programmet,
det er ikke lagt til for å gjøre skade, men for at bruker
lettere kan bruke programmet.
Når programmet sendes til en annen, kan en ha programmet varen til å
gjøre noe skadelig.

Ha på så man kan se filtype til en fil. (Eks picture.png)
Ha minst mulige programmer og plugins i nettleser.
Vær kritisk til meldinger på epost og medier, selv fra kjente.
Oppdater programvare og OS

skadevare kan ha en dvaleperiode der den f.eks bare sprer seg,
uten at den utfører skader.
Dette kan f.eks være for å unngå deteksjon.

Ønske om hærverk - Folk gjør hærverk for morroskyld. kan eks slette
filer, ha pckomponenter unålig, skape for mye trafikk på nettverket
Økonomisk vinning - Ønske om å vinne økonomisk på skadavre, eks ransomware.

adware:
skadevare som viser ads
Kan gjøres i håp om at person kjøper produkter,
eller så er det sånn at man blir betalt hvert gang bruker klikker eller
får opp annonsene.

spionvare/spyware:
Overvvåker ting på pc,
Kan finne fram filer, bilder, bruke kamera, se på tastetrykk, finne
passord og brukernavn.

Rootkits:
Skadevare som enderer sentrale funksjoner i varer eller OS
Ofte re hensikten å skjule seg selv og en annen skadrevare.
Kan også legge til passorder slik at det blir oprettet bakdører

23
Q
Hva er self join, eksempel på en database der man kan bruke self join, syntax
Self join syntax
Hva er et view
Hvordan slette view?
Hvordan lage view
A
Self join:
Brukes for å koble en tabell sammen med seg selv
Når er dette nyttig?
La oss si man har en tabell, der en kolonne refererer til en annen kolonne.
eks
id | fornavn | leder
1  |  Hans   |
2  |  Lars   |  1

select v1.id, 2v.id, v1.pris
from vare v1 inner join vare v2
on v1.id = v2.id..

select vg1.id, vg1.title, vg.release_date, vg2.id, vg2.title, p1.name,
p2.name
from videogame vg1 inner join videogame vg2
on vg1.id < vg2.id and vg1.release_date = vg2.release_date
inner join platform p1 on vg1.platform_id = p1.id
inner join platform p2 on vg2.platofrom_id = p2.id
where 2020 <= YEAR(vg1.release_date);

Et veiw er en virituell tabell

Hvorfor bruker man veiws

  • Lagre spørringer i database
  • Bryte ned kompliserte spørringer
  • FOrenkle databasen i noen tilfeller
  • Representasjonsuavhengig

Man kan ikke bruke order og group by på view, hvorfor det?
Man kan oppdatere veiwet, uten å endre tabellen

DROP VIEW [navn]

CREATE VIEW [navn på view] AS

kropp til kode

Hva er with check option?
Hva er WITH CHECK OPTION?

WITH CHECK OPTION: Hvis man endrer tabell som gjør at et noen verdier
har lavere verdi enn det som selectes, så får man ikke lov
Derimot kan man endre den orginale tabellen, men man kan ikke endre veiwet.
CREATE VIEW dyre_varer AS
SELECT *
FROM vare
WHERE pris > 1000
WITH CHECK OPTION

Man kan ikke nå gjøre følgende
UPDATE dyre_varer
SET pris = 999
WHERE id = 1

Hva gjør SET SQL_SAFE_UPDATE = 0;

At man kan override WITH CHECK optiON

24
Q

Hva er relasjonsmodellen?
Hvordan er “snitt”, “union”, “krysspunkt” og “differanse” relatert til relasjonsmodellen?

Hva er representasjonsavhengighet?

Relasjonsmodellens bestandeler

Hva er Integritetsreglene?
Hva er identitetintegritet?
Hva er referanseintegritet?

HVa er:
seleksjon, projeksjon, mengdeoperatører, krysspunkt

Hva menes med at tabeller er som funksjoner?
Hva er funksjonelle avhengigheter?

Hva er en supernøkkel?
Hva er en kandidatnøkkel?

A

Hva er relajsonsmodellen?
Relasjonsmodellen bygger på mengdelære:
Mengden består av en samling elementer.
Union: to bobler som samles sammen
Snittet: Møtet mellom de to, der de har like verdier
Differansen, forskjellige verdier i hver tabell
Kryssprodukt: Elementer kan settes sammen fra hver tabell

Representasjonsavhengighet:
Det spiller ingen rolle hvordan dataen er sortert, gruppert, osv.
Programmene skal være uavhengig av hvordan den fyfiske dataen er lagret
(dette har vell med ting som at man ikke skal ha en kolonne for 10cm, og en for 1m eks)
Databasen er uavhengig av programmet man bruker, programmet bare henter ut data.
Eks hvis man oppdaterer designet av databasen, skal ikke det ha innvirkning på databasen

Man skal ha det sånn at for å finne ut av en viss data/tabell,
så må man ikke følge en slags sti, istedenfor kan man heller eks ha en relasjonstabell som viser relasjonen mellom tabell
er.
Man er ikke avhengig av å følge en bestemt sti.

Relasjonsmodellens bestanddeler
Hva er det relasjonsmodellen består av?
En form for datastruktur
Ikke som en graf, der man må følge en linje, men at alle dataer man lagrer, lagres som relasjoner
SQL:  Relasjonsmodellen:
Tabell: relasjon
Kolonne: attributt
Rad: tuppel

Integritetsregler:
Det vil si: Kontroll med primærnøkler og fremmednøkker (lovlig data, hva man har lov til å lagre data)
Unionskompatible (samme domene, data i en kolonne)?
Domene: alle data i en kolonne (er det int, er det bare tekst)
Den dataen man lagrer i en kolonne, må stemme overens med data man sier man kan lagre der.

Entitetintegritet:
Nøyaktig en primærnøkkel per relasjon (Primær nøkkel (den kolonnen som er unik i tabellen, identfiserer en rad))
Primærnøkkel skal ikke innholde nullmerker
Primærnøkkelen skal ikke inneholde flere like verdier

Referanseintefritet:
Unionskompatible attributter (eks hvis kolonne skal bare inneholde integers, skal alle data i den kolonnen være integers)
Fremmednøkkel, A, er delmengde av primærnøkkel, B (fremmednøkkel: kobler to tabeller sammen)

Matematisk programmeringsspråk:
Seleksjon - Velge en delmengde basert på betingelser (where)
Projeksjon - Velge bestemte attributter (select)
Mengdedeopertorer - Union, snitt, differanse
Kryssprodukt og koblinher - danner nye kombinasjoner

Atomære verdier:
Alle verdier skal være enkle verdier
En atomær verdi er en enkel verdi (den skal ikke være sammensatt)
Eks man skal ikke ha både en streng, og en int i samme kolonne.
Det er ikke tillatt med “tabeller i tabeller”, man skal ikke ha en liste som verdi, hvis man har dette, indikerer det oft
e mange-til-mange relasjon
I et sånt tilfelle har man da en tabell for å vise forholdet mellom de to tabellene som har en relasjon.

Tabeller = relasjon
S1 = {a, b, c}
s2 = {1, 2}
S1xS2 = {(a, 1), (a, 2), (b, 1), (b, 2)}
Funksjoner som tabeller:
Eks en funksjon mellom S1 og S2 er en relasjon over de tabellen,
som er sånn at de ikke inneholder to åat med like S1 verdier, og ulike S2 verdier
Altså: Hvis man finner a, vet man at den alltid skal peke på 1

Funksjonelle avhengigheter:
Det er en funksjonell avhengighet hvis det som står i en kolonne, alltid fører til
en annen verdi i en annen kolonne-
Eks ansattnr peker alltid til navn “Per”

Det er ikke alltid den funksjonelle avhengigheten kommer fra en kolonne,
men det kan være en gruppe med verdier som alltid gir det samme svaret

Primærnøkkler
Gitt tabell T,
En supernøkkel for T er en samling kolonner X slik a X -> A gjelder for alle kolonner A
En kandidatnøkkel er en minimal supernøkkel (den nøkkelen med færrest kolonner man må ha, for å hente ut nøyaktig data)
Database-designere velger en av kandidatnøklene som primærnøkkel.

Tabell Ansatt(AnsNr, PersonNr,Fornanv,Etternavn,Stilling)
kandidatnøkkler: AnsNr, PersonNr, disse kolonnene kan indikere annen data i kolonnen, eks fornavn og etternavn, AnsNr og
PersonNr er unikt

Tabell Vielse(BrudPNr, BrudgomPNr, Dato, Kirkenav)
BurdPNr og BrudgomPNr er ikke kandidatnr, fordi folk kan gifte seg igjen
Her er det: BrudPNr, BrudgomPNr, dato
man kan også ha: kirkenavn, dato (flere gifter seg ikke på samme dato)

25
Q

Hva er en ER-modell?
Hva består en ER-modell av?
Hvordan kan man vise en ER-modell oppskrevet (altså ikke ha noe visuelt)

Hva er en kravanalyse?

HVordan vite om noe skal være en entitet eller attributt?

Hva er en entitetsforekomst?
Hva er en entitetype?

Hva er kardinalitet?
Hvordan vises de forskjellige kardinalitetene?

Hva er minimums og maximumskranker?

Hva er svake og sterke forhold?

Løpenumre og svake entiteter

Hva menes med “hode/linje” mønster?

Hva er egenforhold?

A

Datamodellering - hva og hvorfor?
ER diagram burkes når man planlegger hva en database skal innholde,
og hvordan den skal se ut.
Skal være lesebar selv for lite IT-kyndige

ER (Entity relationship), og hva det består av
Et visuelt modellspråk som benyttes for å lage arkitekttegninger over databasen
Viser strukturen til databasem og fungerer som arkitekttegning
Består av:
Entitet - tabell
Attributter - kolonner
Identifikatorer - nøkler - Når attributt er både primær og fremmednøkkel, vises det ikke symbol for hva type nøkkel det e
r
Forhold - sammenheng (relasjonen mellom entitetene)

Man har også en annen måte enn ER å forklare database, ved å ramse opp slik:
Primærnøkkel vil ha understrek
Fremmednøkkel har stjerne over seg*
Nøkler som er både fremmed og primær, har stjerne*
Eks
Forlag(navn, kontakt, telefon)

Kravanalyse
Systematiserer hva et system skal gjøre
Analyserer krav fått til systemet,
utifra det lager man en analyse av hva det skall inneholde og gjøre

Faktainnsamling:
Studere rapporter, skjemaer, gjøre intervuer og gjennomføre spørreundersøkelser
For å finne ut hvordan databasen som fungere og inneholdet.

Eksempel på bibliotek system:
Krav:
Systemet skal ha opplysninger om lånere, bøker, utlån og forlag
De forskjellige tingene i hvert tema er attributter, som eks i ebok: ISBN, titel, forfatter…
Man har relasjonene mellom entitetene: for eks at et forlag kan ha flere bøker

Huskeregel for entitet:
En ting som vi vil lagre informasjon om,
det man vil vite mer om.

Huskeregel for attributt:
En entitet har et sett med intressante egenskaper,
disse er attributtene.

Identifikator er et attributt, eller samling av attributter,
som identifiserer hver unike rad.

Entitetsforekomst
Svarer til en rad i en tabell,
Altså alle attributtene i en rad

Entitetstypen:
Representerer mengden av forekomster -
og svarer dermed til hele tabellen.

Kardinalitet
1:N - en-til-mange:Ordre >——-|-Kunde (en kunde kan ha mange ordre)
1:1 : en-til-en: -|———–|-
M:N - mange-til-mange: >———-< : Her har man en tabell imellom som viser relasjonen

Minimus og maximuskranker
En avdeling kan ha minimum 0 og maksimum mange ansatte, mens en ansatt jobber i nøyaktig en avdeling
Hvordan viser man dette?
Kråkefor betyr mange, mens | betyr 1, og sirkel betyr 0
Ansatt >o-------------------|-|-Avdeling
En avdeling kan ha minimum 0 ansatte.
>0 - maximumskrav
-|-|- - mimimumskrav
Minimus og maximuskranker
En avdeling kan ha minimum 0 og maksimum mange ansatte, mens en ansatt jobber i nøyaktig en avdeling
Hvordan viser man dette?
Kråkefor betyr mange, mens | betyr 1, og sirkel betyr 0
Ansatt >o-------------------|-|-Avdeling
En avdeling kan ha minimum 0 ansatte.
>0 - maximumskrav
-|-|- - mimimumskrav

Løpenumre eller svake entiteter:
Her må man ha med en nøkkel fra den fremste entiteten
kino__________kinosal____________forestilling: her er primærnøkkel dato, kinosalnr, og kinonavn

Disse kan erstattes med surrogatnøkler (løpenumre)
kino________kinosal———–forestilling: Man ha innført et id i forestilling
Når slipper man en primær av lfere nøkler i forestilling

Hode/linje mønster
La oss si man har noen på papir som skal over til noe digitalt
Kalles ofte hode/linje,
fordi ofte på papir vises essensiell data øverst, så en oppramsning av data.
Dette er ofte et sterkt forhold
EKs:

Vitnemål:

karakter1
karakter2

vitnemål -|-|___________|< karakter

Egenforhold
Forhold som kun involverer en entitet

26
Q

Hvordan går nomralisinergsprosessen?
Hva er funksjonell avhengighet?
ER og normalisere

La oss si:
T(A,B,C,D)
A -> B, B -> D, C -> A
Svar på følgende:
Bestem kandidatnr
Hvilken normalform er tabellen på
Utfør normalisering til BCNF

Forklar følgende begreper:
Rendundands
Funksjonell avhengighet
Determinant

Paritell avhengighet
transisiv avhengighet
normalformer
normalisering

denomalisering

A
Normaliseringsprosessen:
Lager en tabell
Fjerner alle ikke-automære enheter - 1NF
Fjerne partielle avhengigheter - 2NF
Fjerne alle transitive avhengigheter - 3NF
Ser om det er mer rendundans

At noe determinerer noe annet:
A -> B
Eks karakter er funksjonelt avhengig av kurskode og studentNr

Normalisering og ER-modell
normalisere
tabell1(att1,att2,att3,…)
tabell2(att1,att2,att3,….)

ER-modell:
.png av modell

Hvis man bruker ER-modell, burde man se igjennom etterpå
at modellen passer innenfor normalformene.

Denormalisering
Ulempe med normalisering:
Små tabeller kan bli tregere og mer kompliserte å spørre etter,
fordi man må igjennom mange ledd osv videre

HVorfor denormaliserer?
Man slår sammen normaliserte tabeller
Man godtar kontrollert rendundans for å oppnå effektivt system
Man stopper nmprmalisering på 3NF for å unngå unødvendig tinge forretningsregler

Oppgave:
C er kadnidatnr, fordi C er ikke avhengig av noe annet.

Man går utfra at den fyller 1NF, fordi man ikke vet noe om verdiene
Den fyller 2NF, fordi
Det er transitive avhengigheter, fordi verdiene er ikke alene determinert av C (eks A determinerer B, B determinerer D)
Tabellen fyller altså fram til 2NF

Normaliseringsprosess: T(C, A), T1(A, B), T2(B, D)
Denne går innenfor 3NF.
Den går også innenfor BCNF fordi den kan bare brytes hvis det er en supernøkkel, men her er det ingen sammensatte primærn
økkler.

27
Q

Hva er delsporrigner
Delsporring i select, from, where
Hva er en vekselvirkende delsporring
IN i delsporring

Oppgave:
Det er et lop med flere deltakere
Finn navn, etternavn, og gjennomsnittelig lopstid for hver person

A
Delsporringer
Quiries der man ma sporre flere ganger,
for a finne noe info.
Eks
Delsporring i select-del:
select kundenr, etternavn, fornavn, 
	select max(ordredato)
	from ordre as o
	where o.kundenr = k.kundenr) as dato
from kunde as k
1 kundenr 1 etternavn 1 fornavn 1 maxordre 1
Delsporring i from-del:
select count(") as antallstillinger
from (
	select distinct stilling
	from ansatt
	) as stillingerIbruk
1 antallstillinger 1
delporring i where-delen:
Alle som tjener mer enn gjennomsnittet:
select "
from ansatt
where lonn > (select avg(lonn) from ansatt)

Delsporring ma:
Returnerer noyaktig en tabell med EN rad og EN kolonne,
for a kunne brukes sammen med >

Oppgave:
select fornavn, (
	select avg(Tid)
	from resultat
	where medlem.medlemsnr = resultat.medlemsnr) as gjennomsnitt
from medlem

Vekselvirkende delsporring:
Man gar hele tiden inn og ut av den ytre og indre tabellen,
Vekselvirkende fordi de “jobber sammen”

Eks
Finner varen i hver kateogri som koster minst:

select v1.vnr, v1.pris
from vare as v1
where v1.pris = (
	select min(v2.pris)
	from vare as v2
	where v1.katnr = v2.katnr
)

Dette er en vekselsporring,
fordi for hver verdi gar man igjennom hele tabellen i
den indre selecten

IN i delsporring:
Brukes for a se om noe er en del av et resultat
Brukes for a se om noe er i en quiery
Eks:
select “ from kunde
where kinde.id in (select kunde_id from ordre)

ALL i delsporring
SAmmenligner med alle resultatene som delsporring

SOME i delsporring
brukes for a finne en eller flere resultater i en sporring

Finner alle kunder med samme navn som en eller flere andre kunder
SELECT " 
from kunde as k1
where etternavn = some(
	select etternavn
	from kunde as k2
	where k1.kundenr <> k2.kundenr
)

EXISTS i delsporringer
Undersoker om den delsporring gir et ikke-tomt svar

Skal finne ansatte som ikke har deltatt pa noen prosjekter
select a."
from ansatt as A
where not exists(
	select "
	from prosjektdeltakelse as pd
	where pd.ansattnr = A.ansattnr
)
28
Q

Hva er primaerminne, sekundaerminne, og tertiaerminne
Hvorfor har man minne, primaerminne
Hva er mean time to failure
Hva er en post, forskjell pa MySQL og NoSQL i forhold til struktur
Hva er heap-lagring v sorterte filer
binær v sekvenisell oppslag

Oppgave
Man har 10.000 poster
Man vil ha 30% ledighet på en blokk
En blokk er en lagringsplass på disk.
En blokk er 4096 bytes.
Man har en entitet:
studentNr INT
fornavn char15
etternavn char30
telefon har12
brukernavn char5

Hvor mange oppslag må man gjøre sekvensielt v binært?

Hva er en indeks?
Hva er en primærindeks?
Hva er sekundærindeks?
Hva er flernivåindeks?
hva er bitmap indeks?
Hvordan lager man en index?
Hvordan sletter man en index?
Hvordan lager man en unik index, og hva vil det si?
Hvorfor bruker man index?
A

Primaerminne:
Beregninger

Sekundaerminne:
Permanent, disk

tertiaerminne:
Sikkerhetskopi, gjennopprettelse

Fordi det minne bruker mindre tid pa a lese og skrive, beregninger
DRAM: Aksesstid: 50ns
SSD: AksesstidL 50us
Harddisk: 5ms

Tiden et tar for en disk tar feil.
Dette er vanligvis 10 ar
Nar man har en stor database, har man flere disker.
Da kan feil inntreffe mye tidligere.
Far a forhindre a miste data, har man backup.

Speiling:
Der backupdataen er helt lik som daten i det orginale dataen.

RAID:
Man har flere disker i et RAID, disse danner en logisk disk.
Dette gir raskere og bedre effektivitet.
Man kan hente ut og skrive ut data flere steder i systemet samtidig.

POST:
Bestar a flere felt, en rad
Entitetsforekomst

Fil bestar av antall poster, hver post av et antall felt.
En fil er databasen

Dette bygger NoSQL pa.

MySQL: Ting lagres fysisk som filer
NoSQL: Er en filstruktur

I NoSQL bruker man emr at poster har spesifikke plasser,
istedenfor at man looper.
Dermed tar det lengre til a legge til info, fordi man kan ikke bare legge inn data.

Plassbehov
INT - 4 byte
CHAR(x) - x byte
VARCHAR(x) - nodvendige byte

Nar man har en stor database,
kan det vaere nodvendig a vite plassbehovet til databasen

Heap-/ikke sorterte filer
Postene organiseres i den fekkef;lgen de blir registrert

Ulempe med heap-filer:
Man ma gjore en sekvensielt sok - man ma soke igjennom all lagret info

Fordel:
Effektiv innsetting av nye rader

Sekvensiell/fortert filer
Postene ordnes med hensyn pa bestemt kolonne:

Ulempe:
innsetting og sletting tar lengre tiden, for a beholde rekkefolgen

Fordel:
Man kan soke med binaersok - Man gar til midten, og skjekker der.
Hvis man eks soker etter Karl, og finner Knut, sa vet man at Knut kommer etter Karl, sa da sletter man alt bak,
Hvis man sa finner Kalle, sletter man alt for, sa gar man igjen

Forskjell i oppslag binaert og sekvensielt
nar man har 10 000 poster
Vi vil ha 30% ledighet i hver blokk
En blokk er en del av en disk, en lagringsplass

studentNr INT
fornavn char15
etternavn char30
telefon har12
brukernavn5

Losning
4 + 15 + 30 + 12 + 5 = 66 bytes
En blokk har 4096 bytes
4096/66 = 62 poster per blokk

Man vil fylle en blokk 70 prosent full.
(70% * 62) / 100% = 43 poster per blokk

10.000/42 = 233 blokker.

Sekvensielt sok:
Hvis man gjor sekvensielt sok, ma man regne med
a ga igjennom halvparten av blokkene, statistisk sett.
233 / 2 = 117 oppslag for a finne det man er ute etter.

Binort sok:
For hver gang man soker, halverer man soket
233 -> 117 -> 58
Man bruker 2er logaritmen(233) for a finne svaret
log2(233) = 8 oppslag for a finne det man er ute etter.

Indeks:
Gir en referanse til et visst sted.
Kalles sokenokkel, og bestar av pekere.
Fra indekstabell, til der dataen er lagret.

Primaerindeks:
En indes der sokenokkelen samvarer med det feltet tabellen allerede er sortert pa.
Man har altsa sorterte indekser, som man kan forst gjore binaert sok pa.

Sekundaer indeks:
For a kunne soke hurtig med hensyn pa forskjellige kritertier.
Tette indekser => peker til hver post

Flernivaindeks
Indeks til indekser

Bitmap-index
Bruker bitmap monster

Det vikttigste her er primar og sekundaer indeks.

CREATE INDEX navn
ON tabell(attributt)

DROP INDEX navn

CREATE UNIQUE INDEX navn
ON tabell(attributt)
Unique gjor at man ikke far noen dobble indekser,
man har eks ikke en person som er lagret med samme tlfnr

Sammensatt index:
CREATE INDEX navn
ON tabell(att1, att2)
Dette gir en unik indeks sammensatt av att1 og att2.
Eks kan att1 og att2 vaere fornavn og etternavn

eks:
CREATE INDEX Etternavnidx
ON Kunde(Etternavn);

Indekser er noe man opretter
etter det man soker mye mot.
Eks hvis man ofte finner personer med bruk av navn og etternavn

29
Q

Hva er aggregering

Hvordan putte info fra en tabell, inn i en annen tabell:
Man har en tabell med prishistorikk, og en tabell for film.
HVordan kan man ta verdiene fra film, og putte inn i prishistorikk (prishistorikk har enda ikke noen verdier)

Man har to tabeller
En for utleie, en for film
Hvis en film har blitt utleid flere enn 1 gang,
skal prisen i film okes med 20 prosent.
Man har ingen verdi for ganger en film er utleid i utleid tabellen

Hva er OLTP og OLAP

Hva er ROLLUP og CUBE

ROLLUP og CUBE

Krysstabellsporringer

Vindusfunksjon

Hva er rekursjon

A

Hva er aggregering:
Gruppering, sortering
Hva bruke det til: a ta strategiske beslutninger, type historiske dataer

INSERT INTO prishistorikk(FNr, dato, pris)
select FNr, curdate(), pris
from film;

update film
set pris like pris " 1.2;
where FNr in (
	select FNr
	from utleie
	group by FNr
	having count(") > 1
	)

Eks for a kunne raskt hente ut info fra bedrift:
OLTP - On-Line transactional processing
Brukes der:
Man ofte oppdaterer databasen
Man gjor enkle sok mot
Hvis det er en na-situasjon. Vi vil vite hvordan ting er na. En slik database er pa hele tiden
Man kan gjore mange transaksjoner hurtig

Eks for a kunne lage strategiske beslutninger for en bedrift:
OLAP = On-Line analytical processing
Analyserer en virksomhet
Data er aggregert over tid
Det er lite oppdateringer
Gjor strategiske beslutninger
Hente ut statestikk
Store kompliserte datamengder, ressurskrevende sporringer

ROLLUP og CUBE
Brukes pa OLAP
Eks hvordan salg av varer utvikler seg over tid i forskjellige fylker
Man kan se for seg at info ligger i en stor kube, sa er info lagret der, eks x-verdi1, y-verdi2, z-verdi3

Slicing: EN skive fra datakube

Dicing: Mindre datakube

Rollup: Aggregerte data

Drilldown: forfiner en dimensjon

Krysstabellsporringer
Snur tabeller slik at verdier brukes som overskrifter
Man bytter plass pa rad og kolonne.
Dette er sa resultat skal blir mest mulig forstalig.

Eks pa krysstabellsporring
La oss si man har en tabell over ansatte,
hvordan finne lonn for kvinner og menn i forskjellige stillinger
: stilling : mann : kvinne

select stilling, kjonn, count(“) as antall, avg(arslonn) as snitt
from ansatt
group by stilling, kjonn

stilling, kjonn, snitt

Krysstabellsporring:
Her gjor man om kjonn fra et sttributt, til a bli en kolonne:

select stilling, round(avg(IF(kjonn=’K’), arslonn, NULL)), 2) as K,
round(avg(IF(kjonn=’M’), arslonn, NULL)), 2) as M
from ansatt
group by stilling;

stilling, manlonn, kvinnelonn

Krysstabellsporring gjor det lettere a se infoen.

Vindusfunksjon:
Brukes for a vise enkeltrader sammen med aggregert data
Kumulativ statestikk - statestikk om stadig vokser etterhvert som man far inn mer info
For a glatte ut tilfeldige variasjoner

Eks man har en tabell for priser igjennom tiden.
Sa brukes man en vinudsfunksjon for a se info for kun en viss maned

unbounded preceding betyr alt for
tallene betyr mengder rader for og etter
current row betyr den navaerende row
over spesifiserer vinduet
det er 3rader for og etter, ettersom det pluss navearende dag blir en uke

Viser regn for hver dag i en uke
select Dato, nedbor, sum(nedbor) over (order by dato rows 3 between unbounded preceding and 3 current row) as akkumelert)
from regn

: dato : nedbor : gjennomsnitt for akkumelert regn igjennom uka

Finne top 10 dyreste filmer, og rangere dem
select “, rank() over (order by pris desc), as rangering
from vare
limit 10;

Rekusjon
Rekursiv sporring kan kan gjores i sql nar man vet hvor mange ledd man har i tabellen

Eks en rekrusiv linje, er hvis man ser pa et barn for a finne forelder, sa ser pa forelder for a finne bestefar
En ting bygger altsa pa en annen ting.

Man ma vite mengde ledd man skal ha, fordi man gar igjennom tabellen flere ganger.
Hvis man har en stor database, kan det ta mye tid

Bygg en database, der hele slektstreet er inkludert

select s1.PNR, s1.Navn, s1.Mor, s2.Far as Farfar, s2.Mor as Farmor
from slekt s1 left outer join slekt s2 on s1.Far = s2.PNr;

30
Q

Hva er identifiserende og ikke-identifiserende relasjoner?

A

Identifiserende forhold:
Forhold der en tabell avhenger av en annen.
Eks hvis det er en entitet for kino, og en entitet for kinosal. Så er dette et identifiserende forhold, fordi en kinsosal vil avhenge av at det finnes en kino.

Ikke-identifiserende forhold:
Forhold der entiteter til ikke avhenger av hverandre. For eksempel en entitet for kino og en entitet for person. Ingen av disse elementene avhenger av den ene for å finnes.

Ikke-identifiserende forhold har en striplet linje.
Identifiserende forhold har en hel linje.

31
Q

Hva er de forskjellige relasjonene i en ERmodell
Hva betyr striplet linje v ikke-striplet line
Hva vil det si at en tabell har symbolet for en relasjon ved seg
en-og-bare-en-relasjon v en-relasjon

A
Når dette symbolet vises: <
representerer det: 
/_
\
Altså det er en strek i midten.

De forskjellige relasjonene:

  • ————-|- : en
  • ———–< : mange
  • ———-|-|- : en(og bare en)
  • ——o-|- : null eller en
  • ———|< : en eller mange
  • ————o< : null eller mange

Striplet linje betyr at forholdet er svakt.
Altså at entitet1 ikke avhenger av entitet2.
Eks på entiteter der en entitet avhenger av en annen:
entitet kinsosal avhenger av entitet kino.
- - - - - - -

Den entiteten som har symbolet ved siden av seg, viser at relasjonen den motstående entiteten har til entiteten med symbolet.
Eks:
En post kan ha kun en kommune.
En kommune kan ha en eller mange poster.
POST >|----|-|- KOMMUNE
en-og-bare-en-relasjon v en-relasjon
Analogi:
En-og-bare-en-relasjon
En student har kun et rom.
Når studenten er ferdig på skolen,
blir rommet gitt til kun en annen student.

en-relasjon
En student har en login.
Når studenten er ferdig, forsvinner også loginen.

Jeg sliter med dette, men i de aller fleste tilfeller bruker man en-og-bare-en-relasjonen.
-|-|———–
Det er veldig sjeldent man trenger -|—–
relasjonen.

32
Q

Hva er self join?
Hvorfor skal self join gå an i det hele tatt?

Oppgave:
employee:
id
empt_name
manager_id

List alle ansatte, sammmen med navnet
til en sin manager

A

At man queryer en tabell med seg selv

Self join
Hvorfor bruker man det?
Det brukes hvis man har en entitet med rader,
der et attributt kan referere til et annet
attributt til en annen rad i samme entitet.
For eksempel:
employee:
id
empt_name
manager_id

der manager_id kan referere til en annen
ansatt sin id. manager_id er en foreign key,

Men hvorfor har man ikke bare en manager entitet?
Fordi da kan det bli mange entiteter å liste opp.
Da må man kanskje ha det slik:
employee–manager–manager2–manager3…

Oppgave:
select emp1.id, emp1.emp_name, emp1.manager_id, emp2.emp_name
from employee emp1
inner join employee emp2
on emp1.manager_id = emp2.id

Hvis la oss si eb employee ikke har en ansatt,
må man bruke left join for å vise dette. Siden da kan
man vise alle ansatte, uansett om manager_id har
et treff eller ikke mot id.

33
Q

Hva gjør exists?
Syntax
Hvordan få det motsatte av exists?
exists v in

A

Ser etter om noe eksisterer i et subquery eller ikke

select..
from…
where exists ([subquery])

Det motsatte vil si at man får de verdiene
som ikke har et treff i et subquery
select...
from...
where not exists ([subquery])

exists gir en boolean verdi.
den generelle forskjellen er at:
man bruker in når queryen er liten,
og exists når queryen er større

34
Q

Hva er en transaksjon?
Hvilke oppgaver kan det brukes til?

syntax:

Hvordan:
Lage transaksjon
bekrefte transaksjon
angre transaksjon

Oppgave
Du skal vippse en venn penger,
etter at han har betalt en pizza for dere.
Kelner <= Venn <= Du
Skriv den logiske operasjonen som utføres mot en database

ACID egenskapene

Logging av transaksjoner
Hva det brukes til
Kommando for å reversere effekt
Kommando for å gjennoppta avbrutt transaksjon
måter å gjøre transaksjonen på
A

En logisk operasjon mot en database,
som består av en eller flere sql-spørringer

Håndtere flere brukere
Sikkerhetskopiering
Gjenoppbyggning

CREATE PROCEDURE (navn)
AS
BEGIN TRY
	BEGIN TRANSACTION
		query.. på table1
		query på table2
		query på table3
	COMMIT TRANSACTION
END TRY
BEGIN CATCH
	ROLLBACK TRANSACTION - skjer hvis feil oppstår
END CATCH

START TRANSACTION
COMMIT
ROLLBACK

Pizza koster 300kr.

Kontoer
| Id | Person | KontoBeløp |
   1   kelner    1000
   2   du        400
   3   venn      560
CREATE PROCEDURE overførPenger
AS
BEGIN TRY
	BEGIN TRANSACTION
		UPDATE TABLE kontoer
		WHERE Person = 'venn'
		SET KontoBeløp = KontoBeløp - 300; 
	UPDATE TABLE kontoer
	WHERE Person = du
	SET KontoBeløp = KontoBeløp - 150;
		UPDATE TABLE kontoer
		WHERE Person = 'kelner'
		SET KontoBeløp = KontoBeløp + 300;
	COMMIT TRANSACTION
END TRY
BEGIN CATCH
	ROLLBACK TRANSACTION
END CATCH

ACID-egenskaper
Atomicity - alt behandles som en unit
consistency - base bringes fra et state til et annet
isolation - database blir på samme måte som om quriene hadde gått hver for seg
durability - endringene forblir, selv om databasen går ned.

Loggin av transaksjoner:
Gjerne loggfører man alle transaksjoner som gjøres.
Dette blir lgt i en transaksjonslogg fil
Brukes til å ha oversikt over oppgaver utført, feilretting og gjennopprettning.
For eksempel:
| Transaksjon | Hva | Hvor | Gammel verdi | Ny verdi

Kommandoer:
UNDO - reverserer effekten av transaksjonene, leser loggen bakløengs
REDO - gjennomføre avbrutte transaksjoner på nytt, leser logg forlengs

måter å gjøre:
umiddelbar oppdatering - database oppdaterer underveis i transaksjonen
utsatt oppdatering - databasen oppdateres når alle operasjonene er registrert i loggen

35
Q
Databasesamtidighet:
Hva er en prosess?
Hvordan kan man gjøre flere oppgaver samtidig?
Hva er flerbrukerdatabaser
Hvordan kan man forsikre om at prosesser fullføres helhetlig
Forskjellige låser
Granularitet 
Tofaselåsing
Isolasjonsnivåer
A

Utførelse av et program
Nettleser, excel, epost osv.

Tidsdeling

Flere som benytter samme database
som skriver samme sql spørringer
kommunikasjon via applikasjoner

samtidige transaksjoner

Man utfører alle prosessene “samtidig”,
endringene tar ikke sted før alle spørringene har
tatt sted.

Leselås
En leser avleser data
En leselås stenger ute andre skrivere men slipper til andre lesere

Skrivelås
En skriver oppdaterer data
En skrivelås stenger ute alle andre

Granularitet – hvor stor del av databasen som låses

Idé – alle transaksjoner ber om låser på samtlige dataelementer i starten av sitt
forløp, og opphever alle låser til slutt.

Tofaselåsing – låser får ikke settes etter at den første er opphevet

Vraglås
Når man har det slik at for å låse opp data,
trenger man at data fra et annet sted er låst opp,
men det får å låse opp det stede, trenger den orginale dataen
som skal låses opp.
Dette fører til at dataen aldri vil låses opp.

Hvordan løse vranglås:
Forhindre at vranglås oppstår
Tidsstempler
Last in, first served

Oppdage og løse opp vranglås
Ventegraf
Sykler, avbryte en transaksjon og starte den senere

Isolasjonsnivåer:
Usikker lesing (dirty read) – lese data før data er bekreftet

Ikke-repeterbar lesing (nonrepetable read) – kan lese av ulike svar fordi en
verdi er endret og bekreftet

Fantomer (phantoms) – nye rader satt inn av annen transaksjon oppdages

Isolasjonsnivå | Usikker lesing | Ikke-repeterbar | lesing Fantomer
Serializable Nei Nei Nei
Repeatable read Nei Nei Ja
Read committed Nei Ja Ja
Read uncommitted Ja Ja Ja

Optimistisk låsing
Tidsstempler
Tidspunkt for siste oppdatering gis alle radene i databasen

Sammenlikne tidsstempler:
Overskrive
Godta endringer
Manuelt «flette» data

36
Q

Hvordan er oppbyggningen på en database?
Hva er en systemkatalog?

Hvordan henger database sammen med databaseadministrator, sluttbruker, og utvikler?

Hva er:
SQL tolker
Systemkatalog
Spørreoptimalisator
SQL-maskin
Bufferhåndterer
Filhåndterer
Adgangskontroll
Redigeringskontroll
Integritetskontroll
Samtidighetskontroll
Loggskriver

Hva er noen ansvar og rutiner til en DBA

Hva er fullstendig v inkrementell
Hva er varm v kald
Hva er fysisk v logisk

Hvilke ansvar har DBA i forhold til brukere i databasesystemet

Syntax for å:
Lage en bruker
Gi bruker rettigheter
Lage roller

Hva er paralell og distribuerte databaser

Hva er:
delt minne
delt disk
ingen deling

Hva er følgende:
Distribuert databasesystem
Horisontal fragmentering
vertikal fragmentering
lpmbinert? fragmentering
replikering

Hvilke måter kan man ha en database i skyen?
Hvorfor vil man i tilfeller bruke noen måter istedenfor andre?
Hvilke fordeler kan skylagring ha ovenfor fysisk lagring?

spørreoptimalisering og kostnadsbasert optimalisering

A

Oppbyggning av databasen: (metadata)
Strukturen på databasen, størrelse på celler osv.
info om hvor ting er lagret.
navn på kolonner og tabeller.

Systemkatalog:
Data som vedlikeholdes av databasen selv, uten at man trenger å ta hensyn til det.
Hvilke brukere som har tilgang til deler av data.
Om bruker har rettighet til å gjøre visse ting.

Databasesystemer og brukergrupper:
DBA (databaseadministrator) - De som jobber med systemet i SQL.
Sluttbrukere - Alle som snakker med databasesystemer, gjerne gjennom en applikasjon (eks side eller app)
Utvikler - De som utvikler en applikasjon for å kommunisere med databasen.

Prinsipper i DBHS
Bilde i presentasjon 19
Går ut på hvordan system skal fungere og virke
Disse prosessene skjer automatisk.
- SQL tolker skjekker syntax.
- Systemkatalog har info om ting som er i databasen,
Hvis sql tolker og systemkatalogen fungerer,
- så det videre til spørreoptimalisator.
Denne finner den mest effektive måten å løse spørringen som kommer inn.
- Sendes til sql-maskin, her utføres spørringen

SQL-tolker, spørreoptimalisator og sql-maskin avhenger man av hver gang
man gjør det sql spørring.

Filhåndterer og bufferhåndterer:
Buffer: kontrollerer hvilke blokker som er lest inn i minne. HVilken info ligger i minnet. Når leses det og srives til minne.
Dette er fordi: Det er dumt å spørre etter samme spørring flere ganger, istedet kan man ha resultet i minne.

Filhåndterer: Det som gjør at man skriver direkte til disken.

Disse fem utfører prosessen med å gjøre en sqlspørring, og lagre den på disk.

Eks når man kjører spørring i workbench, ser man tiden som har gått neddi gjørnet.
Disse prosessene foregår i bakgrunnen.

Adgangskontroll - skjekker lovlig brukernavn og passord når man bruker database.
Rettighetskontroll - ser om det bruker gjør, om den har rettighet til det.
Integritetskontroll - Skjekker i forhold til valideringsregler.

Samtidighetskontroll - Setter låser, låser opp låser, setter opp ventekøer. - disse prosessene skjer i systemet, ikke noe administrator gjør.
Loggskriver - Skriver transaksjonslogg. Transaksjonslogg er eks nyttig for å gjenopprette data hvis det skjer noe - dette skjer også i bakgrunnen.

Oppgaver til databaseadministrator:
Overordnet ansvar for drift og installasjon,
ansvar for sikkerhetskopier og hvordan det skjer, eks på skytjeneste eller på serverpark.

Strategiske beslutninger - designet av databasen, hva den inneholder, kardinaliteter,
nøkkler (eks fremmed og primær).

Tekniske rutiner:

  • valg og installasjon av databasehåndteringssystem, eks workbench.
  • hvor mange disker, hvordan lagre og opprettholde.
  • kapasitetsplanlegging,
  • brukeradministrasjon, hva bruker skal kunne gjøre, fjerne og legge til brukere
  • sikkerhetsopiering og gjennoppbygning
  • overvåkning, oppetid, transaksjoner som gjøres, om hendelsene er lovlige.

Sikkerhetskopiering og gjenoppbyggning:
Fullstendig v inkrementell:
Fullstendig - kopiere hele database hver gang man gjør sikkerhetskopi
inkrementell - kopierer ting som har blitt endret siden sist kopi
Man kan også kombinere disse.

Varm v kald kopiering
varm - kopiering mens databasen er i bruk. - kan gjøre det noe komplisert, fordi man kopierer mens det skjer endringer, eller endringer kan glippe,
men kanskje noe som må gjøres for systemet alltid skal være oppe. gjør gjerne dette på det minst aktive tidspunktet

kald - krever at brukere logger av database, og database tas ned, før man gjør en kopi

fysisk v logisk kopi
fysisk - baserer sikkerhetskopiering på de fysiske filene.
logisk - eksporterer data i database ved å kjøre sql spørringer, som update, insert…, til eks en tabell som heter “historiske priser”

ved fysisk er man sikker på at man får med hele kopi av databasen.
ved logisk kopiering er man uavhengig av filformat

Brukeradministrasjon
Objekter - hvilke deler av data skal man ha tilgang til
Rettigheter - hva har man lov til å gjøre (eks bare leserettigheter, skriverettigheter, om man kan lage tabeller)
Brukere - oprettelse, sletting, og håndtering av brukere

Lage bruker:
Dette gjøres også feks gjennom applikasjon
CREATE USER brukernavn IDENTIFIED BY passord

lage brukerrettigheter:
CREATE ROLE
GRANT rolle TO bruker
EKs: GRANT SELECT ON avdeling TO Ola
En tabell kalles "avdeling"
Dette gir leserrettigheter til "Ola"
Flere typer:
SELECT
UPDATE
INSERT
DELETE
ALTER TABLE

REVOKE - fjerner brukerrettigheter

Lage en rolle:
La oss si rollen skal hele utvikler
CREATE ROLE utvikler

CREATE SESSION
CREATE ANY TABLE
ALTERANY TABLE
INSERT ANY TABLE

Klient/tjener-arkitektur
SQL
->
Klient databasetjener

37
Q

Hva gjør ANY/SOME
Hva gjør ALL
Hva gjør IN
Hva gjør EXISTS

A
ALL -
Ser på alle verdier i en spørring
eks:
SELECT arbeider.lønn
FROM arbeider
WHERE lønn > ALL(
	SELECT arbeider.lønn
	FROM arbeider
	where stillin = 'sekretær'
)
SOME - 
Ser om i forhold til en eller flere
eks hvis vi skal finne kunder med
samme navn som en eller flere kunder:
select kunde.navn
from kunde as k1
where navn = SOME(
	select kunde.navn
	from kunde as k2
	where k1.navn = k2.navn
)
EXISTS -
Ser om noe eksiterer i en annen tabell:
Eks la oss se om en ansatt er på et prosjekt i det hele tatt
select ansatt.navn
from ansatt
where navn EXISTS(
	select prosjekt.deltaker
	from prosjekt
	where prosjekt.deltaker = ansatt.navn
)

IN - Forekommer verdien i delspørringen?
SOME/ANY - Er verdien større/lik/mindre noen av verdiene i delspørringen
ALL - Er verdien større/lik/mindre alle verdiene i delspørringen
EXISTS - Gir delspørringen et ikke-tomt resultat?

38
Q

Recap 2NF og 3NF
Hva er BCNF?

La oss si:
student_id | subject | professor

En student kan ha flere subjekter.
Man har bare en lærer i hvert fag
student_id og subject er superkey, fordi de to kolonnene kan determinere all unik info.

Hvorfor bryter denne tabellen med BCNF?
Hvordanf ikser man tabellen?

A

2NF
Ingen partielle verdier.
Altså et attributt kan ikke være avhengig av bare dler av en supernøkkel

3NF
Ingen transitive verdier.
Altså en ikke-primærnøkkel kan ikke determinere en ikke-primærnøkkel

For at noe skal være i BCNF, må følgende stemme:
1. Det må være på tredje normalform.

  1. For en hver avhengighet A -> B, så burde A være en supernøkkel.
    Altså en ikke-primærnøkkel kan ikke determinere en primærnøkkel.
Tabellen bryter BCNF, fordi:
professor kan determinere subject.
Man har altså:
(student_id, subject) -> professor
men også:
professor -> subject
Man fikser tabellen slik:
Gjerne brekker man opp tabeller som ikke er innenfor en normalform.
Man kan gjøre slik:
\+student_id | professor_id
\+professor_id | professor | subject