Zum Hauptinhalt springen

Tabellen Erstellen

Datenbank erstellen

CREATE DATABASE

Mit dem Befehl CREATE DATABASE kann eine neue Datenbank erstellt werden.

CREATE DATABASE ef_reto;

DROP DATABASE

Die Datenbank kann mit dem Befehl DROP DATABASE auch wieder gelöscht werden:

DROP DATABASE ef_reto;
Wichtig

Bitte löschen Sie nur Datenbanken, die Sie selber erstellt haben!
Der Einfachheit halber haben Sie auf der Kursdatenbank EDU-DBs EF alle Rechte...

1. Datenbank erstellen

Erstellen Sie eine eigene Datenbank mit nach folgendem Schema ef_name, wobei Sie natürlich Ihren eigenen Namen verwenden. Wenn der Befehl erfolgreich ausgeführt wurde, sollte Ihre Datenbank nach dem Aktualisieren der Verbindungen angezeigt werden.

Tabellen erstellen

CREATE TABLE

Tabellen werden mit dem Befehl CREATE TABLE erstellt. Die Spalten werden mit dem Namen und dem Datentyp definiert.

CREATE TABLE persons (
id INT,
name TEXT,
alter INT,
beschreibung TEXT
)

Konvention Der Name der Tabelle wird immer im Plural geschrieben.

Datensätze einfügen

INSERT INTO

Mit dem Befehl INSERT INTO können Datensätze in die Tabelle eingefügt werden.

INSERT INTO persons 
(id, name, alter, beschreibung)
VALUES
(1, 'Maria Muster', 42, 'Ein ganz normaler Mensch'),
(2, 'Hans Monster', 55, 'Ein ganz monströser Mensch');
2. Datensätze einfügen

Datenbank

mit der eigenen Datenbank verbinden!

👉 https://db-sql.ch/connections/d68ea3c2-eb9f-4454-aa19-9c00764757b5

Erstellen Sie eine Personen-Tabelle mit einigen selbst gewählten Attributen und fügen Sie einige Datensätze ein. Halten Sie das Query unten fest.

Was passiert, wenn Sie nun nochmals die gleichen Datensätze einfügen?

Tabellen löschen

DROP TABLE

Um eine Tabelle zu löschen, wird der Befehl DROP TABLE verwendet.

DROP TABLE persons;

Constraints

Constraints sind Regeln, die auf die Daten angewendet werden. Sie können auf die Spalten oder auf die ganze Tabelle angewendet werden. So wird sichergestellt, dass die Daten in der Tabelle immer korrekt sind.

Damit kann bspw. auch verhindert werden, dass wie oben geschehen, die gleichen Datensätze mehrmals eingefügt werden.

PRIMARY KEY

Primärschlüssel - Die Datenbank stellt sicher, dass der verwendete Schlüssel eindeutig ist und nicht NULL ist.

NOT NULL

Die Spalte darf nicht NULL sein.

UNIQUE

Der Wert in der Spalte muss eindeutig sein.

DEFAULT

Der Standardwert, der verwendet wird, wenn kein Wert angegeben wird.

SERIAL

Automatisch generierter Wert, der bei jedem neuen Datensatz um 1 erhöht wird. Beim Primärschlüssel muss dadurch beim Erstellen eines Datensatzes kein Wert angegeben werden.

DEFAULT CURRENT_TIMESTAMP

Der aktuelle Zeitstempel wird als Standardwert verwendet.

Obige Tabelle könnte also auch wie folgt definiert werden:

CREATE TABLE persons (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
alter INT,
beschreibung TEXT DEFAULT 'Keine Beschreibung vorhanden',
erstellt_am TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)

Die Eingabe wird wegen der automatischen ID's etwas einfacher. Bemerken Sie zudem, dass automatisch von der Datenbank ein Zeitstempel gesetzt wird.

INSERT INTO persons 
(name, alter, beschreibung)
VALUES
('Maria Muster', 42, 'Ein ganz normaler Mensch'),
('Hans Monster', 55, 'Ein ganz monströser Mensch');
3. Tabelle mit Constraints

Datenbank

mit der eigenen Datenbank verbinden!

👉 https://db-sql.ch/connections/d68ea3c2-eb9f-4454-aa19-9c00764757b5

Erstellen Sie Ihre Personen-Tabelle erneut (zuerst Löschen...)

  • verwenden Sie einen seriellen Primärschlüssel

  • stellen Sie sicher, dass benötigte Felder gesetzt werden müssen

  • Fügen Sie für mindestens ein Attribut einen Standardwert

  • Fügen Sie ein erstellt_am (oder created_at) Feld hinzu, welches automatisch mit dem aktuellen Zeitstempel gefüllt wird.

  • Fügen Sie einige Datensätze ein - passen Sie am besten das Query von oben an.

Was passiert nun, wenn Sie die Restriktionen verletzen? Probieren Sie es aus und halten Sie einige Fehlermeldungen fest.

Verknüpfte Tabellen

Beim Erstellen von Tabellen können nebst Primärschlüsseln auch Fremdschlüssel definiert werden. Damit wird sichergestellt, dass die Daten in den verknüpften Tabellen immer konsistent sind. Dies ist mitunter einer der wichtigsten Gründe, eine relationale Datenbank zu verwenden.

CREATE TABLE personen (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
alter INT,
beschreibung TEXT DEFAULT 'Keine Beschreibung vorhanden',
erstellt_am TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE adressen (
id SERIAL PRIMARY KEY,
strasse TEXT NOT NULL,
hausnummer TEXT NOT NULL,
plz TEXT NOT NULL,
ort TEXT NOT NULL,
person_id INT REFERENCES personen(id)
);

REFERENCES <tabelle>(<spalte>)

Mit dem Befehl REFERENCES wird ein Fremdschlüssel definiert. In diesem Beispiel wird sichergestellt, dass die person_id in der Tabelle adressen immer auf einen gültigen Datensatz in der Tabelle personen verweist.

Es kann auch im Nachhinein ein Fremdschlüssel hinzugefügt werden:

ALTER TABLE adressen
ADD FOREIGN KEY (person_id) REFERENCES personen(id);
-- ^ Spalte fkey ^ Tabelle(Spalte pkey)

Entfernen von Constraints

ALTER TABLE adressen
DROP CONSTRAINT fkey_adresse_personen_id;