📘 T-SQL Grundkurs
Datenbanken · Tabellen · Datentypen · Schlüssel & Relationen
-- Datenbank "SchulungsDB" erstellen
CREATE DATABASE SchulungsDB;
GO
-- zur neu erstellten Datenbank wechseln
USE SchulungsDB;
GO
-- Tabelle "Kunden" mit Primärschlüssel "KundenID"
CREATE TABLE Kunden (
KundenID INT PRIMARY KEY, -- Eindeutige ID, automatisch NOT NULL
Vorname VARCHAR(50) NOT NULL,
Nachname VARCHAR(50) NOT NULL,
Email VARCHAR(100) UNIQUE,
Registrierungsdatum DATE DEFAULT GETDATE()
);
-- Mit automatischer IDENTITY
CREATE TABLE Produkte (
ProduktID INT IDENTITY(1,1) PRIMARY KEY,
ProduktName NVARCHAR(100) NOT NULL,
Preis DECIMAL(10,2)
);
Ein Kunde kann mehrere Bestellungen aufgeben, aber jede Bestellung gehört zu genau einem Kunden.
Die Tabelle Bestellungen erhält eine Spalte KundenID als Fremdschlüssel, der auf Kunden(KundenID) verweist.
📇 Tabelle Kunden (PK)
CREATE TABLE Kunden (
KundenID INT PRIMARY KEY,
Name VARCHAR(80)
);
📦 Tabelle Bestellungen (FK)
CREATE TABLE Bestellungen (
BestellID INT PRIMARY KEY,
Bestelldatum DATE,
KundenID INT,
FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID)
);
FOREIGN KEY (spaltenname) REFERENCES andereTabelle(primärschlüsselspalte)
Du kannst auch benannte Constraints verwenden: CONSTRAINT FK_Bestellung_Kunde FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID)
-- 1. Datenbank anlegen
CREATE DATABASE Kursportal;
GO
USE Kursportal;
GO
-- 2. Tabelle Kurse (Mastertabelle)
CREATE TABLE Kurse (
KursID INT IDENTITY(1,1) PRIMARY KEY,
Titel NVARCHAR(100) NOT NULL,
DauerTage INT,
Preis DECIMAL(8,2)
);
-- 3. Tabelle Teilnehmer (mit Fremdschlüssel auf Kurse)
CREATE TABLE Teilnehmer (
TeilnehmerID INT IDENTITY(1,1) PRIMARY KEY,
Vorname NVARCHAR(50) NOT NULL,
Nachname NVARCHAR(50) NOT NULL,
Email VARCHAR(120) UNIQUE,
KursID INT NULL, -- Fremdschlüsselspalte (NULL erlaubt, falls noch kein Kurs)
CONSTRAINT FK_Teilnehmer_Kurs FOREIGN KEY (KursID) REFERENCES Kurse(KursID)
);
-- (optional) INSERT Beispiel-Daten (keine Pflicht für den Kurs)
-- INSERT INTO Kurse (Titel, DauerTage, Preis) VALUES ('T-SQL Grundlagen', 3, 299.00);
-- INSERT INTO Teilnehmer (Vorname, Nachname, Email, KursID) VALUES ('Anna', 'Weber', Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. ', 1);
- IDENTITY sorgt für automatisch wachsende IDs.
- KursID in der Teilnehmer-Tabelle ist der Fremdschlüssel, der auf Kurse(KursID) verweist.
- Die Beziehung ermöglicht es, jeden Teilnehmer einem bestehenden Kurs zuzuordnen.
🔗 n:m (Many-to-Many) – z.B. Teilnehmer besuchen mehrere Kurse, und Kurse haben viele Teilnehmer. Hier benötigt man eine Verknüpfungstabelle (Join-Tabelle) mit zwei Fremdschlüsseln.
-- Beispiel n:m zwischen Teilnehmer und Kurs
CREATE TABLE KursTeilnehmer (
KursID INT FOREIGN KEY REFERENCES Kurse(KursID),
TeilnehmerID INT FOREIGN KEY REFERENCES Teilnehmer(TeilnehmerID),
Anmeldedatum DATE DEFAULT GETDATE(),
PRIMARY KEY (KursID, TeilnehmerID) -- zusammengesetzter Primärschlüssel
);
- Primärschlüssel (PK): Eindeutige ID pro Zeile, kein NULL, jede Tabelle sollte einen haben.
- Fremdschlüssel (FK): Verbindet zwei Tabellen, kann NULL sein (optional) und verweist auf einen PK einer anderen Tabelle.
| Befehl / Konzept | Beispiel |
|---|---|
| Datenbank erstellen | CREATE DATABASE MeineDB; |
| Datenbank wechseln | USE MeineDB; |
| Tabelle anlegen | CREATE TABLE Test (ID INT PRIMARY KEY, Name VARCHAR(50)); |
| Primärschlüssel nachträglich | ALTER TABLE Test ADD PRIMARY KEY (ID); |
| Fremdschlüssel hinzufügen | ALTER TABLE Bestellungen ADD FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID); |
| Spalte löschen | ALTER TABLE Test DROP COLUMN Name; |
-- Lösungsvorschlag:
CREATE TABLE Autoren (
AutorID INT PRIMARY KEY,
Name NVARCHAR(80) NOT NULL,
Geburtsjahr INT
);
CREATE TABLE Buecher (
BuchID INT PRIMARY KEY,
Titel NVARCHAR(150) NOT NULL,
Erscheinungsjahr INT,
AutorID INT,
FOREIGN KEY (AutorID) REFERENCES Autoren(AutorID)
);