I skal lave en database til en nystartet virksomheds webshop. Virksomheden sælger computere og udstyr til computere, som fx printere, routere og lignende. Virksomheden tilbyder også hjælp til installation og opsætning af computere.
Virksomheden har nogle leverandører, den har kunder, den har nogle ansatte/sælgere og den sælger selvfølgelig også varer. Og når man har varer, skal de jo også opbevares et sted, det plejer man at kalde et lager. Disse varer skal selvfølgelig også sendes til kunderne, så det kræver et overblik over, hvilke ordrer kunderne foretager. En sådan ordre burde nok inkludere kunder, varer, osv. Virksomheden vil af indlysende grunde også gerne kunne holde styr på betalingerne, både for de varer de har købt hos leverandørerne og fra kunderne, som køber produkterne.
Alle disse interessenter (+måske nogle flere?) kan I arbejde med, når I laver jeres database.
Man kan simpelthen ikke drive en salgsvirksomhed uden en database.
I kan fx lave en kundetabel.
I kundetabellen skal det blandt andet være muligt, at forespørge på følgende: Kundens navn og adresse, om kunden abonnerer på nyhedsbrev og meget andet!
Det skal også være muligt at forespørge i databasen på: leverandørernes navne, betalingsbetingelser, leveringsform, produkter etc. - resten er op til jeres fantasi.
Start med at få et overblik over opgaven i gruppen. Genlæs indledningen og beskrivelsen af virksomheden og dens interessenter samt behov.
Diskuter virksomheden og dens interessenter. Med udgangspunkt i beskrivelsen af virksomheden, skal I nu lave en model over alle entiteterne i databasen samt deres attributter. Gå tilbage til Lektion 3 og genopfrisk, hvordan I laver den første fase af et E/R-diagram med tabeller og entiteter. Der skal som minimum være 6-7 entiteter, men tænk jer grundigt om!
Afleveringen skal desuden indeholde en kravsspecifikation til databasen. Altså en analyse af virksomhedens behov, fx søge på kunderne, se hvem som har bestilt specifikke varer, hvilke ordrer, der er aktive (endnu ikke er leveret eller er i restordre), osv.
I kan se et eksempel på første del af E/R-modellen nedenfor. I kan med fordel tegne den i online-programmet draw.io.
I skal arbejde videre på jeres tabeloversigt og gøre den til et E/R-diagram vha. nedenstående 3 tilføjelser til modellen.
1. Start med at definere relationerne ved "tegne" en simpel streg mellem de entiteter, som skal have en forbindelse med hinanden. Tænk nøje over om det giver mening og om det er nødvendigt, at der er en relation mellem entiteterne.
2. Når vi har lavet vores relationer, skal relationsgraden bestemmes. En relationsgrad defineres som antalsforholdet mellem entiteterne, altså om en relationer kan have mange af den anden relation. Fx i en webshop, kan en kunde have mange ordrer, men en ordre kan kun haves af en kunde (ellers kommer man jo til at sælge den samme vare til flere forskellige kunder). Relationsgraden beskriver antalsforholdet mellem til relationer. Der er fire typer relationsgrader og de illustreres på følgende måde...
Når man skal skabe tabellerne i databasen skal kan relationsgraden netop bruges til at oprette relationelle tabeller ud fra følgende regler:
For det meste når der er tale om en-til-en relationer (hvilket er meget sjældent) kan de blot oprettes som kolonner i samme tabel.
Når der er tale om en-til-mange relationer kan de oftest laves ved at skabe en tabel for de "mange" og en tabel for "en". Tabellen for "mange" skal indeholde en kolonne, som indeholder primærnøglen fra "en"-tabellen.
Oftest når der er tale om mange-til-mange relationer, skal der skabes en helt tredje tabel, som indeholder primærnøgler fra de to andre tabeller
3. Nu mangler vi at bestemme medlemstypen - så er E/R-diagrammet færdigt. Medlemstype definerer om en relation kan eller skal være tilstede. Det har en betydning for hvordan databasen oprettes. Fx kan en kunde have en relation til ordrer (relationsgraden er kan), men ordrer skal have en relation (relationsgraden er skal), fordi en kunde kan jo godt være en del af databasen uden at købe noget fra webshoppen lige nu, men en ordre må ikke oprettes uden en kunde (fordi så er der jo ingen til at hverken betale eller modtage ordren).
Opgave 1 og 2 skal afleveres på Lectio senest 10.30.
I nu skal lave en tabelskitse med tabeleksempler over jeres tabeller.
Tabelskitser er et mere eller mindre endeligt udkast til tabellerne i databasen. Dvs. de skal optimalt set indeholde de kolonner (attributter), som tabellen kommer til at indeholde.
En tabelskitse er et entitetsnavn efterfulgt af de relevante attributter i en parentes.
Et tabeleksempel er en tabel (entitet) udført i Excell eller Word med eksempler på alle kolonnerne (attributterne).
Dog er det værd at bemærke, at tabelskitserne og -eksemplernes funktioner netop er, at skabe et overblik over de endelige tabeller og dermed fungerer som en form for tjekliste. Man kan derfor bruge dem til at spørge sig selv...
Ser tabellen rigtig ud, når den er udfyldt med eksempler?
Mangler der nogle kolonner, altså attributter, som burde være der?
Er der nogle af kolonnerne, som burde deles op i flere tabeller, fx adresse til vejnavn, husnummer og postnummer?
Burde by have sin egen tabel, hvor postnummer fungerer som primærnøgle? Kan man spare plads i databasen på denne måde? (se fx hvor mange gange man skal skrive en by i samme tabel, hvis flere kunder kommer fra samme by)
Tabelskitsen til entiteten elev er
Elev (Navn, Adresse, Fag, Klasse)
og den vil blive til følgende tabel. Bemærk, at der er skrevet data i tabellen i form af eksempler på elever og deres data:
Opgave 3 skal afleveres på Lectio senest 10.30.
Der er to former for nøgler i en database: Primær nøgler (primary keys) og fremmednøgler (foreign keys).
En primær nøgle er en kolonne i en tabel, der har en unik værdi og identificerer en enhed i tabellen. En primær nøgle kan f.eks. være et kundeId, vareId eller postnummer.
En fremmednøgle er en kolonne i en tabel, der bruges til at forbinde to tabeller. På den måde henviser en fremmednøgle til en unik kolonne for at identificere rækker fra en anden tabel. En fremmednøgle er altså en (primær)nøgle fra en anden tabel. Når den bruges i en anden tabel, som har sin egen primærnøgle, kaldes den en fremmednøgle, da den refererer til en anden tabel.
Der er regler for, hvordan nøgler skal navngives og skrives. De navngives altid med tabellens navn først efterfulgt af enten Id eller nummer, fx kundeId, teleAbonnementId, internetAbonnementId, etc.
Nøgler sammenskrives lige som alle andre kolonnenavne enten i camelCase eller snake_case.
camelCase: kundeId
snake_case: kunde_id eller kunde_Id
I skal nu konstruere jeres database i databaseprogrammet DB Browser (Har I brug for hjælp, kan I gense videoen nedenfor. Vær opmærksom på, at knappen "Insert a new record in the current tabel" er blevet ændret og har fået en ny placering siden videoen blev lavet).
Brug jeres E/R-diagram som model for jeres database. Hvis I opdager fejl og mangler i jeres oprindelige diagram, skal I huske at kommentere på dette og argumentere for jeres valg i den afsluttende screencast-O-Matic-video.
I skal som minimum oprette 10 rækker til hver tabel, så der er et ordentligt materiale til de afsluttende SQLite-øvelser.
Opgave 4 skal gerne være færdig senest 13.00. Skal ikke afleveres på Lectio!
I videoen kan du se, hvordan du opretter en ny database i programmet DB Browser.
I skal nu forberede de mest basale SQLite-kommandoer, så I er klar til at demonstrere dem i den afsluttende screencast-O-Matic-video. I kan genlæse om kommandoerne på Lektion 5 under øvelse 1-4. Som minimum skal I kunne...
Foretage en simpel søgning i en af jeres tabeller (SELECT * ... ).
Foretage en søgning, hvor I demonstrerer kendskab til "%"-tegnets funktion (SELECT * FROM... %... ).
Indsætte en ny række i en tabel af eget valg (INSERT INTO ... ).
Slette en række i en tabel af eget valg (DELETE FROM ... ).
Oprette en ny tabel med fire kolonner (CREATE TABEL ... ).
I må også meget gerne demonstrere søgninger, hvor I...
Foretager en søgning, hvor I finder de rækker, som har en værdi højere end (SELECT... WHERE... >... ).
Foretager en søgning, hvor I søger på mere end et kriterie (SELECT... AND/OR... ).
Foretager en søgning, hvor I bruger (SELECT... ORDER BY... ASC/DESC... )
Foretager en søgning, hvor I bruger (SELECT... INNER JOIN... ).
Opgave 5 skal gerne være færdig senest 14.00. Skal ikke afleveres på Lectio!
Videoen skal som minimum indeholde følgende...
Forklaring af hvad en database er.
Forklaring af forskellen på entiteter, relationer, attributter, relationsgrader og medlemstyper med tydelige eksempler fra jeres E/R-diagram. Forklar desuden jeres model og jeres valg.
Forklaring af primær- og fremmednøgler med udgangspunkt i jeres egen database.
Mindst 5 forskellige SQLite-kommandoer i egen database med forklaring på kommandoerne og hvad de gør.
Videoens varighed ca. 7 minutter.
Upload videoen til Youtube (gør den "Skjult" ikke privat) og aflever linket i et dokument på Lectio. Det er jeres ansvar, at jeres lærer kan få adgang til videoen gennem jeres aflevering på Lectio.
Opgave 6 skal afleveres på Lectio senest 14.30!