WEBVTT 00:00.606 --> 00:05.948 [Automatisk tekstet av Autotekst med NB Whisper. Kan inneholde feil.] Hei, og velkommen til denne videoserien som skal dekke pensum i IN2090 databaser og datamodellering. 00:06.648 --> 00:12.910 Denne uka skal vi gi en introduksjon og motivasjon for kurset, og i denne f?rste av tre videoer skal vi fokusere p? databaser. 00:14.951 --> 00:18.992 F?rst skal vi forklare hvorfor, og eventuelt n?r, man burde bruke databaser. 00:20.253 --> 00:23.634 Enkelt sagt s? er databaser noe som skal holde p? og manipulere data. 00:24.474 --> 00:29.556 Men n?r en skriver programmer i Python eller Java, jobber dere med data hele tiden i form av variabler. 00:30.387 --> 00:36.512 Her har vi en variabel handlekurv, som er en Python-liste best?ende av fire elementer - gulrot, ost, jus og melk. 00:37.273 --> 00:42.176 Og dette er jo data, s? hvorfor holder det ikke ? bruke Pythons lister eller Javas collections? 00:42.717 --> 00:44.819 Vel, det er tre hovedgrunner til det. 00:45.499 --> 00:47.521 Den f?rste handler om dataenes levetid. 00:48.141 --> 00:53.566 Variabler, slik som lista over, blir lagra i hovedminnet, ogs? kalt RAM, Random Access Memory. 00:54.286 --> 00:59.010 Denne typen minne blir sletta hver gang programmet avsluttes, maskinen restartes, eller lignende. 00:59.724 --> 01:02.926 Det er mange typer data man ?nsker ? bevare gjennom en slik oppstart. 01:04.086 --> 01:06.507 Den andre grunnen handler om skalerbarhet av lagringsplass. 01:06.527 --> 01:10.029 1 GB med harddiskminne er mye billigere enn 1 GB med hovedminne. 01:10.169 --> 01:13.450 S? dersom du har store datamengder, gir det mening ? lagre disse p? harddisk. 01:14.991 --> 01:17.712 Den siste grunnen handler om separasjon av kode fra data. 01:18.333 --> 01:22.975 Variabler i et program, slik som handlelista over, er kun tilgjengelig i programmer hvor variablene er definert. 01:23.335 --> 01:27.357 Den er derfor ikke tilgjengelig fra andre Python-programmer, Java-programmer, C-programmer osv. 01:28.573 --> 01:32.675 Ofte ?nsker man at mange programmer skal bruke og manipulere samme data. 01:33.335 --> 01:38.337 De m? derfor trekkes ut av programmene og gj?res tilgjengelige p? en m?te som gj?r at de kan brukes av flere programmer. 01:39.858 --> 01:43.800 Men merk at alle disse problemene er l?st av filsystemet. 01:44.560 --> 01:47.221 Filer er lagra p? harddisk og overlever omstart. 01:47.261 --> 01:50.283 De er ogs? separat fra programmer som bruker dem. 01:50.323 --> 01:52.644 S? hvorfor ikke bare bruke filer? 01:53.564 --> 01:55.645 Her ser man to m?ter ? utf?re den samme operasjonen p?. 01:56.118 --> 01:58.879 Som er ? oppdatere verdier i ¨Śn fil basert p? verdiene i en annen fil. 01:59.219 --> 02:01.640 Til venstre ser man dette gjort med Python og filer. 02:01.961 --> 02:05.022 Mens til h?yre ser man det samme gjort med et sp?rrespr?k over en database. 02:05.802 --> 02:09.444 Poenget med dette eksempelet er ? vise at databaser forenkler operasjoner p? data. 02:10.344 --> 02:15.827 Sagt p? en litt annen m?te - databaser er et abstraksjonslag mellom programmer og brukere og filsystemet. 02:16.627 --> 02:20.629 Databaser gj?r det langt enklere ? s?ke i og manipulere data p? et bestemt format. 02:21.109 --> 02:24.831 Den gj?r det ogs? enklere ? spesifisere strukturen til dataene, alts? metadataene. 02:25.469 --> 02:29.351 I tillegg f?r man langt mer effektiv uthenting og skalerbar lagring. 02:30.211 --> 02:36.353 Alt fra s?king i, manipulering av data, tilgangskontroll, sjekke korrekthet og integritet osv. 02:36.934 --> 02:38.454 Alt dette h?ndteres av databasen. 02:39.775 --> 02:42.676 En database er alts? en samling data p? et bestemt format. 02:42.716 --> 02:46.617 Og det finnes ulike databaser tilpasset ulike typer data eller formater. 02:47.598 --> 02:48.178 Man har f.eks. 02:48.678 --> 02:52.960 dokumentdatabaser som fokuserer p? dokumenter og effektivt s?k i store mengder tekst. 02:53.677 --> 03:02.118 Key value stores, som fokuserer p? n?kkelverdipar, slik som JSON, Python dictionaries, Java Hash maps osv. 03:02.458 --> 03:08.620 Grafdatabaser, som fokuserer p? grafer og kan effektivt finne stier mellom gitte noder i veldig store grafer. 03:09.480 --> 03:17.641 Og man har relasjonsdatabaser, ogs? kalt relasjonelle databaser, som fokuserer p? data i tabellform, eller mengder av tupler. 03:17.681 --> 03:23.162 Vi skal kun jobbe med relasjonelle databaser, men mye av det du l?rer, vil du ogs? kunne anvende p? andre typer databaser. 03:24.787 --> 03:28.910 Hva er en relasjonell database? 03:29.010 --> 03:30.972 En samling med tabeller. 03:31.412 --> 03:34.975 Her p? bunnen ser man et eksempel p? en slik tabell. 03:36.316 --> 03:39.419 Man bruker ofte ordet tabell og ordet relasjon om hverandre. 03:39.739 --> 03:43.662 Litt senere skal vi se at det er en forskjell p? disse ordene. 03:45.003 --> 03:50.768 En tabell har da et navn, s?nn som customers her. 03:51.669 --> 03:53.330 Den har en samling med kolonner. 03:55.336 --> 04:00.559 Og den har en samling med rader, som utgj?r dataene i tabellen. 04:02.440 --> 04:09.584 En kolonne har et navn, som customer name, og en type, som int, eller tekst. 04:09.664 --> 04:14.047 Typen sier hvilke verdier man kan putte inn i kolonnen. 04:14.087 --> 04:16.608 Tabellene leses slik dere er vant til. 04:17.209 --> 04:21.791 For eksempel har Anna Konsuma f?dselsdato 9.10.1978. 04:25.401 --> 04:28.364 Er relasjonelle databaser bare det samme som regneark? 04:28.964 --> 04:30.385 Begge er bare en samling tabeller. 04:30.906 --> 04:32.968 Men svaret er naturligvis nei. 04:34.089 --> 04:37.832 I motsetning til regneark har relasjonelle databaser en rigid struktur. 04:38.493 --> 04:39.033 F.eks. 04:39.073 --> 04:43.537 m? dataene ha riktig type i henhold til kolonnene, og alle kolonnene m? ha et navn, osv. 04:43.557 --> 04:48.962 Databaser har et avansert sp?rrespr?k for manipulering og uthenting av data. 04:50.003 --> 04:52.505 Man har programmatiske grensesnitt, alts? API-er, 04:52.722 --> 04:54.483 for interaksjon med databasen fra f.eks. 04:54.643 --> 04:56.424 Python, Java, osv. 04:57.365 --> 05:02.147 Databaser har ogs? en rekke sikkerhets- og kontrollmekanismer for ? kontrollere hvem som har tilgang til dataene. 05:02.827 --> 05:08.410 Databasen vil ogs? sikre integriteten til dataene, s?nn at man ikke plutselig mister eller ?delegger data eller lignende. 05:10.171 --> 05:14.174 I tillegg st?tter databaser langt st?rre og mer kompliserte datamengder. 05:15.754 --> 05:22.158 Hittil i denne videoen har vi brukt ordet database litt feil, for egentlig er jo en database som sagt bare en mengde data p? et bestemt format. 05:22.585 --> 05:25.067 Det er alts? ikke et program eller et system man interagerer med. 05:25.807 --> 05:33.173 Et databasesystem, derimot, er et program eller system som lar brukere definere, lage, vedlikeholde og kontrollere tilgangen til databasen. 05:33.873 --> 05:37.196 S? databasesystemet er alts? programmet som lar oss bruke en database. 05:38.257 --> 05:44.081 Og et relasjonelt databasesystem er naturlig nok et databasesystem over relasjonelle databaser. 05:44.101 --> 05:49.445 Merk derimot at man ofte bruker ordet database s?nn som vi har gjort i denne videoen, alts? b?de overfor dataene ... 05:49.906 --> 05:52.787 Og av og til kombinasjonen av programmet og dataene. 05:54.028 --> 06:02.031 Hvorfor fokuserer vi p? relasjonelle databaser og ikke grafdatabaser eller andre typer databaser i dette kurset? 06:02.071 --> 06:06.132 Fordi relasjonelle databaser er den mest brukte databasetypen. 06:06.653 --> 06:09.014 Det er det mange grunner til. 06:09.034 --> 06:11.334 Nesten all data kan naturlig representeres som tabeller. 06:15.794 --> 06:20.437 Mye av dataene vi blir presentert for i det daglige, er p? tabellform. 06:20.958 --> 06:21.358 F.eks. 06:21.458 --> 06:30.985 alt fra data p? Wikipedia, v?rmelding p? YR, telefonkatalogen, rutetabeller for kollektivtrafikk, data i nyhetsartikler osv. 06:31.125 --> 06:33.247 Alt det er ofte p? tabellform. 06:34.068 --> 06:37.210 Det er ogs? enkelt ? spesifisere strukturen til tabeller. 06:42.654 --> 06:49.278 Den rigide strukturen tabellene gir oss, lar databasesystemet hente ut og manipulere data veldig effektivt. 06:50.559 --> 06:53.761 Tabellstrukturen lar oss ogs? kontrollere tilgang p? mange m?ter. 06:54.341 --> 06:54.641 F.eks. 06:54.881 --> 06:58.984 kan en bruker bli tilgang p? tabellniv?, kolonneniv? og p? radniv?. 06:59.744 --> 07:03.847 Relasjonelle databaser gir oss mange former for sikkerhet og kontroll over dataene. 07:06.068 --> 07:09.550 Det finnes ogs? situasjoner hvor man ikke b?r bruke relasjonelle databaser. 07:10.196 --> 07:10.636 F.eks. 07:10.676 --> 07:16.699 dersom dataene ikke har noen klar struktur, som man enkelt kan representere med tabeller, som ren tekst, video eller lyd. 07:17.339 --> 07:22.242 I slike tilfeller b?r man kanskje heller bruke databaser tilpasset de formatene. 07:24.623 --> 07:25.323 Dersom man f.eks. 07:25.343 --> 07:36.229 er interessert i hvilke relasjoner gitte individer har, fremfor hvilke individer som har gitte relasjoner, alts? om man er interessert i sp?rsm?l av typen 'Hva er relasjonen mellom Ola og Kari?' 07:36.709 --> 07:38.990 i stedet for 'Hvem er mor til Ola?' '. 07:39.616 --> 07:42.097 Da b?r man heller bruke grafdatabaser. 07:43.417 --> 07:48.659 Eller dersom man m? lese inn store, men kjente mengder data hver gang. 07:49.399 --> 07:54.040 I et spill vil man ofte laste inn ny grafikk og lyd hver gang man g?r inn i en ny sone. 07:54.601 --> 07:58.662 I slike tilfeller er det kanskje mer naturlig ? bruke filsystemet og filer direkte. 08:00.162 --> 08:04.904 Et sp?rrespr?k er et slags programmeringsspr?k man bruker for ? kommunisere med databasen. 08:05.484 --> 08:09.425 Og nesten alt man ?nsker ? gj?re med databasen, gj?res via et s?nt sp?rrespr?k. 08:10.469 --> 08:14.891 Kommunikasjonen foreg?r gjennom queries p? engelsk. 08:15.311 --> 08:19.033 Man kan tenke p? disse som sp?rsm?l eller kommandoer til databasen. 08:20.394 --> 08:28.878 De fleste sp?rrespr?k er deklarative, som betyr at man beskriver hva man vil vite, fremfor hvordan man skal finne svaret. 08:28.918 --> 08:34.621 I Python og Java beskriver man hvordan man skal komme frem til et svar, ved ? gi datamaskinen en liste med kommandoer den skal utf?re. 08:39.417 --> 08:45.958 I deklarative spr?k beskriver man bare hva man er interessert i. S? blir det opp til databasesystemet ? finne ut hvordan man skal komme frem til svaret. 08:48.079 --> 08:50.419 I dette kurset skal vi l?re sp?rrespr?ket SQL. 08:50.799 --> 08:52.279 Det st?r for Structured Query Language. 08:52.820 --> 08:56.280 Og SQL er det desidert mest brukte sp?rrespr?ket for relasjonelle databaser. 08:57.080 --> 09:01.941 Til h?yre her ser man en eksempelsp?rring i SQL som finner alderen til personen med navn Kari. 09:03.522 --> 09:05.622 SQL har ogs? funksjonalitet for manipulering. 09:06.049 --> 09:08.410 Alts? oppdatere, sette inn, slette osv. 09:08.690 --> 09:10.111 av data og metadata. 09:10.872 --> 09:20.056 Sp?rringer i SQL kan enten skrives og kj?res direkte, slik man skriver og kj?rer Python og Java-kode, eller man kan skrive programmer, f.eks. 09:20.096 --> 09:22.978 i Python eller Java, som genererer SQL-sp?rringer. 09:23.318 --> 09:23.758 F.eks. 09:23.798 --> 09:28.061 basert p? en brukers input i et GUI, eller klikk p? en nettside osv. 09:28.101 --> 09:30.802 Vi skal l?re begge disse m?tene ? skrive SQL-sp?rringer p?. 09:32.056 --> 09:35.018 Neste video gir en introduksjon og motivasjon til datamodellering.