Introduktioner til databaser
Det ligger lidt uden for dette sites rammer at beskrive databaser indgående - det er der skrevet tykke bøger om. Men man kan ikke komme uden om brugen af databaser i grundlæggende C# så der er nødt til at være lidt information. Se nedenstående, samt siderne om SQLite og brug af System.Data.SQLite.Core, som en ren introduktion.
Information til undervisere
Det er naturligvis vigtigt at kuristen ved hvad en database er - svært at skrive en C# applikation uden. Men det er også vigtigt bemærke, at kursisten bør lære brugen af ORM og ikke direkte kommunikation med databaser. ORM kræver dog viden om objektorienteret programmering så mere om det senere. Kig evt på Brug af System.Data.SQLite for et simpelt eksempel fra “gamle dage”. Nogen gange er det rart at prøve lidt kode som ikke har for mange abstraktionsniveauer.
Databaser
En database er en struktureret samling af data. Den bruges til at gemme og administrere store mængder information. Databaser bruges til at understøtte forskellige aktiviteter, såsom online shopping, banktransaktioner, sociale medier, forskning, og mange andre anvendelser.
Her er nogle af de mest almindelige termer relateret til databaser:
-
Data: Rå, uorganiserede fakta, der har brug for at blive behandlet. Data kan være noget simpelt som et nummer eller en sætning, eller noget mere komplekst som en video, et billede, eller et helt dokument.
-
Database Management System (DBMS): En software, der bruges til at styre databaser. Et DBMS hjælper med at skabe, hente, opdatere og administrere data i en database. Eksempler på DBMS’er inkluderer MySQL, SQLite, Oracle Database, Microsoft SQL Server og mange andre.
-
Relationel Database: En type database, der organiserer data i tabeller, der kan linkes - eller relateres - baseret på data, der er fælles mellem dem. Denne type database bruger SQL (Structured Query Language) til at manipulere dataene.
-
SQL: Det mest almindelige programmeringssprog til at håndtere data i relationelle databaser. SQL bruges til at hente, indsætte, opdatere, og slette data fra en database.
-
Tabel: I relationelle databaser, er en tabel en samling af dataelementer, organiseret i rækker og kolonner.
-
Række (eller Record): En enkelt, struktureret dataenhed i en tabel. For eksempel, i en tabel over medarbejdere, kan hver række repræsentere en medarbejder.
-
Kolonne (eller Field): En kategori af data i en tabel. I en tabel over medarbejdere, kan kolonnerne være “Fornavn”, “Efternavn”, “Email”, etc.
-
Primær Nøgle: En unik identifikator for hver record i en tabel. Ingen to rækker i en tabel kan have den samme primære nøgle, hvilket hjælper med at sikre, at hver record i en tabel er unik.
-
Fremmed Nøgle: En kolonne (eller gruppe af kolonner), der er brugt til at linke sammen to tabeller. En fremmed nøgle i en tabel peger på en primær nøgle i en anden tabel.
-
Indeks: En datastruktur, der forbedrer hastigheden af datahentningsoperationer i en database. Indekser fungerer på samme måde som indekset i en bog - de gør det nemmere og hurtigere at finde bestemt information.
Forståelsen af disse grundlæggende databasebegreber og -termer vil hjælpe dig med at navigere i verdenen af databaser. Der er mange flere detaljer og avancerede koncepter inden for database management, men disse grundlæggende termer er et godt udgangspunkt.
Databaser og C#
C# tilbyder flere forskellige metoder til interaktion med databaser, både i en forbundet og frakoblet tilstand. Disse metoder involverer brugen af flere centrale klasser, herunder DataSet
, DataTable
, og DbCommand
.
Disconnected Mode
DataSet
og DataTable
klasser tillader C#-udviklere at arbejde med databaser i en frakoblet tilstand. Det vil sige, at data hentes fra databasen og opbevares i hukommelsen, mens den bliver manipuleret. Når alle operationer er udført, synkroniseres ændringerne tilbage til databasen. Dette kan være fordelagtigt, fordi det mindsker tiden, hvor en live-forbindelse til databasen er nødvendig, hvilket kan forbedre ydeevnen.
Connected Mode
DbCommand
og relaterede klasser (SqlCommand
for SQL Server, OleDbCommand
for OLE DB datakilder, osv.) repræsenterer SQL-udtryk eller lagrede procedurer, der skal udføres i databasen. Disse klasser anvendes i en forbundet tilstand, hvilket betyder, at alle ændringer af data sker direkte og øjeblikkeligt på databasen.
ORM
Mens disse metoder er effektive, er det vigtigt at bemærke, at størstedelen af moderne databaseudvikling i C# i dag foregår gennem brugen af ORM’er (Object-Relational Mapping).
Info
ORM kræver viden om objektorienteret programmering som du måske ikke besidder endnu. Se derfor dette som en introduktion.
Object-Relational Mapping (ORM) er en programmeringsteknik, der udnytter objektorienteret programmering til at kommunikere med databaser. Kort sagt, hjælper en ORM med at oversætte mellem to måder at repræsentere data på: som objekter (i dit program) og som rækker og tabeller (i din database).
Lad os bryde det ned lidt:
Objekter: I objektorienteret programmering repræsenterer vi ting (entiteter) som objekter. Et objekt er en instans af en klasse, der indeholder både data (egenskaber) og handlinger (metoder). For eksempel, kan du have en klasse Bil
, der har egenskaber som Farve
, Model
og År
, og metoder som Kør
, Stop
, og Parker
.
Relationelle databaser: I en relationel database er data organiseret i tabeller, der består af rækker og kolonner. Hver tabel repræsenterer en bestemt type entitet, og hver række i tabellen repræsenterer en instans af den entitet. For eksempel, kan du have en tabel Biler
, hvor hver række repræsenterer en specifik bil.
En ORM hjælper med at oversætte mellem disse to repræsentationer. Det betyder, at du kan arbejde med dine data i form af objekter i dit program, og ORM’en vil tage sig af at gemme disse objekter i databasen som rækker i en tabel.
En af de store fordele ved ORM’er er, at de gør det lettere at arbejde med databaser. Du kan skrive kode, der arbejder med objekter, som er naturligt for de fleste programmeringssprog, og ORM’en vil tage sig af at oversætte denne kode til SQL for at interagere med databasen.
For eksempel, i stedet for at skulle skrive SQL-kode for at gemme en bil i databasen, kan du bare lave et Bil
objekt og fortælle ORM’en at gemme det. ORM’en vil derefter generere den nødvendige SQL, sende det til databasen og håndtere eventuelle resultater.
Det er vigtigt at bemærke, at mens ORM’er kan gøre det lettere at arbejde med databaser, de også kan tilføje en vis kompleksitet, især for større, mere komplekse systemer. Men generelt er de et meget kraftfuldt værktøj, der kan hjælpe med at gøre din kode renere, mere læsbar, og nemmere at vedligeholde.