Databasesystemer Flashcards
(38 cards)
Hvordan putte noe inn i en tabell
INSERT INTO student VALUES(‘Hans’, 18, ‘Lund’);
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
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
Logiske operatorer
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
Hva er normalisering?
Hva skjer hvis man ikke normaliserer?
Hva er 1NF
Hva er 2NF
Hva er 3NF
Hva er BCNF
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
Hva er surogate key
natrual key
primary key
foreign key
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
Grupperingsfunksjoner
Grupperings syntax
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
Noen innebyggde funksjoner
Operatorer
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
Putte ting fra en tabell inn i en annen
INSERT INTO tabell1
SELECT DISTINCT kolonne
FROM tabell2
Hva gjør join Syntax til JOIN FULL OUTER JOIN LEFT JOIN RIGHT JOIN INNER JOIN
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;
Hva er en vindu funksjon?
Hvordan fungerer over() med partition?
Synatx
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]
Hva gjør case
Syntax for case
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]
Hva gjør row_number?
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], …
)
Hva gjør rank?
rangerer det som er i over() ved å legge til en ny column,
med et tall for rangeringen.
Hva gjør dense_rank?
rank skipper duplicate verdier??
mens denserank skipper ikke duplicate verdier.
Hva gjør lead og lag?
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
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
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
Hvordan fungerer HTTP?
Hva er HTTPS?
Ulemper og fordeler med HTTPS
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
Gjør følgende for å alltid ha riktige quiries:
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;
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?
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
Hva er XSS?
Hvorfor er det farlig å åpne bilde i epost?
Hva er input?
Hva er blacklisting og whitelisting?
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
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?
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
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?
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
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
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
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?
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)