Heute dreht sich alles um das Erstellen von Datenbanken
...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
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.
Erstellt eine Tabelle in der Datenbank mit vier Spalten (ID, Name, Kontakt und E-Mail-Adresse).
www.appcamps.de
1 CREATE TABLE Temp_Agency
2 (AgencyID integer, AgencyName varchar (255), 3 ContactName varchar (255), Mail varchar (255))
1 DROP TABLE Temp_Agency
Aufgabe
Auf den nächsten Seiten findest du mögliche Lösungen. Überlege aber zuerst selbst, bevor du weiter klickst.
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
1 CREATE TABLE Temp_Agency
2 (AgencyID integer, PRIMARY KEY AUTOINCREMENT, 3 AgencyName varchar (255), ContactName varchar (255), 4 Mail varchar (255))
Aufgabe
Auf den nächsten Seiten schauen wir uns noch weitere Constraints an.
Schauen wir uns das Beispiel aus dem Startvideo an
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)?
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
1 CREATE TABLE Temp_Agency 2 (AgencyID integer, PRIMARY KEY AUTOINCREMENT, 3 AgencyName varchar (255) NOT NULL, 4 ContactName varchar (255), 5 Mail varchar (255), 6 CONSTRAINT UC_Mail UNIQUE (Mail))
1 DROP TABLE Temp_Agency
Aufgabe
...dann kommt noch eine letzte Folie zu Contraints.
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.
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
1 CREATE TABLE Temp_Agency 2 (AgencyID integer PRIMARY KEY AUTOINCREMENT, 3 AgencyName varchar (255) NOT NULL, 4 ContactName varchar (255) DEFAULT 'Arnold Hausmann', 5 Mail varchar (255))
1 DROP TABLE Temp_Agency
Aufgabe
Auf der nächsten Seite fügen wir Inhalte in die Tabelle ein.
... 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:
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:
1 CREATE TABLE Temp_Agency (AgencyID integer PRIMARY KEY AUTOINCREMENT, 2 AgencyName varchar (255) NOT NULL, 3 ContactName varchar (255) DEFAULT 'Arnold Hausmann', 4 Mail varchar (255), Price integer CHECK (Price <=50))
1 ALTER TABLE Temp_Agency 2 DROP CONSTRAINT UC_Mail
1 ALTER TABLE Temp_Agency 2 MODIFY ContactName DEFAULT 'Arnold Hausmann'
1 ALTER TABLE Temp_Agency 2 ADD Price integer CHECK (Price <=50)
Aufgabe
Auf der nächsten Seite findest du mögliche Lösungen. Überlege aber zuerst selbst, bevor du weiter klickst.
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:
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
1 INSERT INTO Temp_Agency 2 (AgencyName, ContactName, Mail, Price) 3 VALUES ( 'Cardinal', 'Philipp', 'philipp@cardinal.de', 40)
1 INSERT INTO Temp_Agency 2 VALUES 3 (1, 'Cardinal', 'Philipp', 'philipp@cardinal.de', 40)
Aufgabe
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.
Fügt die Agentur "Despacito" mit dem Kontakt Dario (dario@despacito.de) in die Datenbank ein. Die Firma nimmt 54 pro Stunde.
oder:
Fügt die Agentur "Malibu" mit dem Kontakt Maria in die Datenbank ein. Die Firma nimmt 36 pro Stunde.
www.appcamps.de
1 INSERT INTO Temp_Agency 2 (AgencyName, ContactName, Price ) 3 VALUES 4 ('Malibu', 'Maria', 36)
1 INSERT INTO Temp_Agency 2 (AgencyName, ContactName, Mail, Price ) 3 VALUES 4 ('Despacito, 'Dario', 'dario€despacito.de', 36)
Aufgabe
Auf der nächsten Seite findest du eine Lösung. Überlege aber zuerst selbst, bevor du weiter klickst.
www.appcamps.de
Aufgabe
Auf der nächsten Seite findest du eine mögliche Antwort. Überlege aber zuerst selbst, bevor du weiter klickst.
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
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
1 ALTER TABLE Orders 2 ADD CONSTRAINT FK_AgencyOrders 3 FOREIGN KEY (AgencyID) 4 REFERENCES Temp_Agency (AgencyID)