Datenbanken

Heute dreht sich alles um das Erstellen von Datenbanken 

 

 

Bevor du loslegst...

...verwende die Ursprungs Datei der Datenbank, die du zu Beginn des Kurses von deiner Lehrkraft bekommen hast.

Lokale Kopien, mit gelöschten oder veränderten Datenbank-Einträgen kannst du nicht verwenden, um die kommenden Übungen zu machen.

 

 

www.appcamps.de

Aufgabe

  • Lies dir die Infobox zu Datentypen durch.
  • Gib den oben aufgeführten SQL Befehl selbst ein und schau dir das Ergebnis an. 
  • Hat alles geklappt? Super! Dann führe die Query unten aus, um die Tabelle Team_Agency wieder zu löschen:

 

 

Super! Nun kannst du Tabellen erstellen und löschen. Auf den nächsten Seiten schauen wir uns an, wie man Tabellen noch weitere Informationen mitgeben kann. Hier findest du den Spickzettel zu dieser Sitzung.

Schauen wir uns zunächst noch einmal das Beispiel
aus dem Startvideo an:

CREATE TABLE Temp_Agency 
(AgencyID integer, AgencyName varchar(255), 
ContactName varchar(255), Mail varchar(255))

Erstellt eine Tabelle in der Datenbank mit vier Spalten (ID, Name, Kontakt und E-Mail-Adresse).

Es werden unterschiedliche Datentypen genutzt, um z.B. eine Zahl oder einen Text abzuspeichern. Für Zahlen verwendet du einen Integer und für Texte eine Varchar . Weitere Infos zu diesen und anderen Datentypen findest du auf w3schools hier und später im Abschlussvideo.

DROP TABLE Temp_Agency

www.appcamps.de

Aufgabe

  • Lies dir die Infobox zu Constraints durch.
  • Gib den oben aufgeführten SQL Befehl selbst ein und schau dir das Ergebnis an. 
  • Hat soweit alles geklappt? Super! Dann überlege dir nun, ob es in dem Beispiel sinnvoll sein könnte, auch noch andere Constraints zu setzen. Schau dir dazu diesen Link an.

Auf den nächsten Seiten findest du mögliche Lösungen. Überlege aber zuerst selbst, bevor du weiter klickst.

Schauen wir uns zunächst noch einmal das Beispiel
aus dem Startvideo an:

CREATE TABLE Temp_Agency 
(AgencyID integer 
PRIMARY KEY AUTOINCREMENT, 
AgencyName varchar(255), 
ContactName varchar(255), 
Mail varchar(255))

Erstellt eine Tabelle in der Datenbank mit vier Spalten (ID, Name, Kontakt und E-Mail-Adresse). Die ID wird nun auto-incremented und als Primärschlüssel gesetzt.

Um die Spalten genauer zu definieren werden, Constraints genutzt. So kannst du z.B. bestimmen, dass eine Spalte der Primärschlüssel ist oder dass sie auto-incremented wird. Weitere Infos dazu findest du auf w3schools und auf den nächsten Folien.

www.appcamps.de

Aufgabe

  • Gib die hier aufgeführten SQL Befehle selbst ein.

Auf den nächsten Seiten schauen wir uns noch weitere Constraints an. 

Mit Constraints kannst du Eigenschaften von Spalten definieren

Schauen wir uns das Beispiel aus dem Startvideo an

CREATE TABLE Temp_Agency 
(AgencyID integer 
PRIMARY KEY AUTOINCREMENT, 
AgencyName varchar(255)
NOT NULL, 
ContactName varchar(255), 
Mail varchar(255),
CONSTRAINT UC_Mail UNIQUE (Mail))

Bevor wir die Tabelle mit Inhalt füllen, betrachten wir noch weitere Arten von Constraints. Zuerst müssen wir unsere Tabelle aber wieder löschen. Das kennst du schon:

 

 

 

Was könnte noch sinnvoll sein? Vielleicht wollen wir die Eingabe eines Wertes in einer bestimmten Spalte erzwingen (NOT NULL). Oder darf ein bestimmter Wert nur ein Mal vorkommen (UNIQUE)? 

DROP TABLE Temp_Agency

Erstellt eine Tabelle in der Datenbank mit vier Spalten (ID, Name, Kontakt und E-Mail-Adresse). Es muss immer ein Agenturname angegeben werden (da NOT NULL) und die E-Mail-Adresse kann bei den unterschiedlichen Agenturen niemals identisch sein (da UNIQUE).

www.appcamps.de

Aufgabe

  • Gib die hier aufgeführten SQL Befehle selbst ein.

...dann kommt noch eine letzte Folie zu Contraints. 

Mit Constraints kannst du Eigenschaften von Spalten definieren

 

CREATE TABLE Temp_Agency 
(AgencyID integer 
PRIMARY KEY AUTOINCREMENT, 
AgencyName varchar(255)
NOT NULL, 
ContactName varchar(255)
DEFAULT "Arnold Hausmann", 
Mail varchar(255))

Bevor wir uns mit weiteren Constraints beschäftigen, löschen wir die Tabelle erst noch mal:

 

 

Uns fällt auf, dass wir nicht bei jeder Firma einen Kontakt haben. Deswegen möchten wir, dass standardmäßig der Kontakt der Firma eingetragen wird, über die unser Online-Shop die Zeitarbeitsfirmen bucht. Dafür soll außerdem die E-Mail-Adresse nicht mehr auf UNIQUE gesetzt sein, damit diese für den Standardkontakt auch mehrfach eingetragen werden kann.

 

 

 

 

 

 

 

DROP TABLE Temp_Agency

Erstellt eine Tabelle in der Datenbank mit vier Spalten (ID, Name, Kontakt und E-Mail-Adresse). Es muss immer ein Agenturname angegeben werden und der Kontakt von Herrn Hausmann wird automatisch eingefügt, wenn keine andere Mail angegeben wird.

Beachte! Normalerweise kann man Constraints nachträglich ändern. Das klappt bei einigen Editoren allerdings nicht zuverlässig. Daher löschen wir die Tabelle immer und legen sie neu an.

www.appcamps.de

Aufgabe

  • Gib den hier aufgeführten SQL Befehl selbst ein.

Auf der nächsten Seite fügen wir Inhalte in die Tabelle ein.

Mit Constraints kannst du Eigenschaften von Spalten definieren

 

ALTER TABLE Temp_Agency
ADD Price integer CHECK (Price<=50)

... und so Spalten ergänzen:

Ergänzt die Tabelle Temp_Agency um die Spalte Preis (Price). Beim Eintragen der Werte wird überprüft, ob der Preis höchstens bei 50 liegt.

Normalerweiser könntest du Constraints so löschen und ändern:

ALTER TABLE Temp_Agency 
DROP CONSTRAINT UC_Mail
ALTER TABLE Temp_Agency
MODIFY ContactName DEFAULT "Arnold Hausmann"

Achtung! Doch leider gibt es bei sqliteonline.com ein Problem, sodass dies nicht möglich ist.

www.appcamps.de

Wir wollen nun aber trotzdem, dass auch in unserem Beispiel keine Firmen aufgenommen werden, die einen höheren Stundenlohn als 50 veranschlagen. Demnach fügen wir den CHECK Constraint einfach gleich beim Erstellen der Tabelle hinzu:

CREATE TABLE Temp_Agency (AgencyID integer PRIMARY KEY AUTOINCREMENT, 
AgencyName varchar(255) NOT NULL, 
ContactName varchar(255) DEFAULT "Arnold Hausmann", 
Mail varchar(255), Price integer CHECK (Price<=50))

Aufgabe

  • Gib den ersten oder den zweiten aufgeführten SQL Befehl selbst ein und schau dir das Ergebnis an. 
  • Füge mindestens zwei weitere Agenturen ein. Lass deiner Fantasie freien Lauf und kreiere entweder deine eigene Agentur oder lass dich von Firmen inspirieren, die du kennst.  
  • Was passiert, wenn du keine E-Mail-Adresse angibst?
  • Teste außerdem was passiert, wenn du versuchst, eine Agentur einzutragen, die einen Stundenlohn von 54 veranschlagt. 

Auf der nächsten Seite findest du mögliche Lösungen. Überlege aber zuerst selbst, bevor du weiter klickst.

Mit dem INSERT INTO - Befehl kannst du neue Zeilen
in Datenbanktabellen einfügen

INSERT INTO Temp_Agency 
(AgencyName, ContactName, Mail, Price) 
VALUES 
("Cardinal", "Philipp", 
"philipp@cardinal.de", 40)

Fügt die Agentur "Cardinal" mit der ID 1 und dem Kontakt Philipp (philipp@cardinal.de) in die Datenbank ein. Die Firma nimmt 40 pro Stunde.

oder:

INSERT INTO Temp_Agency 
VALUES 
(1, "Cardinal", "Philipp", 
"philipp@cardinal.de", 40)

Fügt die Agentur "Cardinal" mit dem Kontakt Philipp (philipp@cardinal.de) in die Datenbank ein. Die Firma nimmt 40 pro Stunde.

www.appcamps.de

Aufgabe

  • Gib die aufgeführten SQL Befehle selbst ein und schau dir die Ergebnisse an. 
  • Du verhandelst mit der Agentur Despacito und sie bieten dir einen Preis von 49 an. Füge die Agentur entsprechend in die Datenbank ein.
  • Hat soweit alles geklappt? Super! Dann überlege dir nun, wie der passende ERM Ausschnitt aussehen würde. Tipp: Die Tabelle darf natürlich nicht allein dastehen - sie braucht eine Verbindung zu Bestellungen (Orders). Schließlich soll die Agency ja Bestellungen abwickeln.

Brauchst du etwas "Starthilfe"? Auf der nächsten Seite findest du den ERM-Ausschnitt zu den MitarbeiterInnen als Beispiel. Überlege aber zuerst selbst, bevor du weiter klickst.

Mit dem INSERT INTO - Befehl kannst du neue Zeilen
in Datenbanktabellen einfügen

INSERT INTO Temp_Agency 
(AgencyName, ContactName, Price) 
VALUES 
("Malibu", "Maria", 36)

Fügt die Agentur "Despacito" mit dem Kontakt Dario (dario@despacito.de) in die Datenbank ein. Die Firma nimmt 54 pro Stunde.

oder:

INSERT INTO Temp_Agency 
(AgencyName, ContactName, Mail, Price) 
VALUES 
("Despacito", "Dario", 
"dario@despacito.de", 54)

Fügt die Agentur "Malibu" mit dem Kontakt Maria in die Datenbank ein. Die Firma nimmt 36 pro Stunde.

www.appcamps.de

Aufgabe

  • Überlege dir, wie der passende ERM Ausschnitt für die Zeitarbeitsfirma (Temp_Agency) aussehen würde. Du kannst dich am ERM Ausschnitt oben orientieren. 

Auf der nächsten Seite findest du eine Lösung. Überlege aber zuerst selbst, bevor du weiter klickst.

Beispiel ERM Diagramm für Mitarbeiter und Bestellung.

www.appcamps.de

Aufgabe

  • Lies dir die Infobox zu ERMs durch. 
  • Prüfe, ob dein Modell so aussieht wie oben dargestellt.
  • Mach dir dazu Gedanken, ob eine Agentur in deiner Datenbank schon eine bestimmte Bestellung bearbeiten kann. Musst du eventuell noch eine Spalte in der Tabelle Orders ergänzen?

 

Auf der nächsten Seite findest du eine mögliche Antwort. Überlege aber zuerst selbst, bevor du weiter klickst.

ERM Diagramm für Zeitarbeitsfirma und Bestellung.

ERMs (Enitity-Relationship-Models) werden genutzt, um die Struktur einer Datenbank zu planen. Auf diese Weise können Redundanzen (unnötige Wiederholungen) vermieden werden, das Aktualisieren der Datenbank ist einfacher und es können Fehler vermieden werden. Hier findest du weitere Informationen zum Thema Datenbankmodellierung.

www.appcamps.de

ERM Diagramm für Zeitarbeitsfirma und Bestellung.

Erweitert die Tabelle Orders mit dem Fremdschlüssel AgencyID.

ALTER TABLE Orders
ADD CONSTRAINT FK_AgencyOrders
FOREIGN KEY (AgencyID) 
REFERENCES Temp_Agency(AgencyID)

Der Fremdschlüssel AgencyID muss noch in die Tabelle eingetragen werden.

Theoretisch geht das über diese Query:

 

 

 

 

Achtung: Leider gibt es bei dieser Art der Abfrage bei SQL-Editoren häufig Probleme. 

www.appcamps.de