View
102
Download
0
Category
Preview:
Citation preview
Relationale Datenbanken III
Mit SQL Datenbanken erzeugen und Daten in eine Datenbank eintragen
Beispiel Tabellen ReisebüroPerson: {[PersNr, Name, Adresse]}
Kunde: {[PersNr, Kaufkraft, GebDatum]}
Mitarbeiter: {[PersNr, Gehalt]}
Transportmedium: {[MedienNr, Bezeichnung, Preis]}
Land: {[LandNr, Name, Sprache, Währung, Vorwahl]}
Reiseziel: {[ZielNr, LandNr, Name, Preis]}
Beratung: {[KundeNr, MitarbeiterNr]}
Buchung: {[KundeNr, MitarbeiterNr, MedienNr, ZielNr, Datum]}
Datentypen?PersNr : INT (ganze Zahl)
ebenso: MedienNr, LandNr, ZielNr, MitarbeiterNr
Name : VARCHAR(256) (Zeichenkette, maximal 256 Zeichen)
ähnlich: Sprache : VARCHAR(32)Währung : VARCHAR(3)Vorwahl : VARCHAR(6)
Adresse : TINYTEXT (kleiner Textblock)
Kaufkraft : ENUM('sehr gross','gross','mittel','gering') (Auswahl)
ähnlich: Bezeichnung : ENUM('Zug',
'Flugzeug','Bus','Schiff','Auto','anderes')
GebDatum : DATE (Datum)
ebenso: Datum
Gehalt : DECIMAL(10,2) (Dezimalzahl mit max. 10 Vor- und 2 Nachkommastellen)
ebenso: Preis
Datenbank erzeugen und benutzen
DROP DATABASE reisebuero;
CREATE DATABASE reisebuero;
USE reisebuero;
falls eine alte, missratene Version dieser Datenbank vorher gelöscht werden muss:
CREATE DATABASE reisebuero;
USE reisebuero;
Tabellen erzeugenCREATE TABLE Person (
PersNr INT NOT NULL auto_increment, Name VARCHAR(256) COLLATE latin1_german1_ci default NULL, Adresse tinytext COLLATE latin1_german1_ci,
PRIMARY KEY (PersNr)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;NOT NULL: leere Werte sind verbotendefault NULL: standardmässig auf NULL setzen
auto_increment: jeder neue Eintrag bekommt automatisch eine um 1 höhere Nummer als der letzte Eintrag
PRIMARY KEY (PersNr): PersNr darf nicht leer (NULL) sein, muss eindeutig sein
DEFAULT CHARSET: welche Zeichencodierung verwendet wird
COLLATE: welche Textsortierreihenfolge verwendet wird
ENGINE: welche Datenbankmaschine zugrunde gelegt wurde.
Weitere Tabellen erzeugenCREATE TABLE Kunde (
PersNr INT NOT NULL,
Kaufkraft enum('sehr gross','gross','mittel','gering') default NULL, GebDatum date default '0000-00-00',
PRIMARY KEY (PersNr),
FOREIGN KEY (PersNr) REFERENCES Person (PersNr) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
FOREIGN KEY: Fremdschlüssel
REFERENCES: bezieht sich auf Tabelle (Element)
ON DELETE CASCADE: lösche diesen Eintrag, falls der Bezug nicht mehr existiert (wird die Person gelöscht, löscht man damit auch den entsprechenden Kunden)
Weitere Tabellen erzeugenCREATE TABLE Mitarbeiter (
PersNr INT NOT NULL, Gehalt decimal(10,2) NOT NULL default '0.00',
PRIMARY KEY (PersNr),
FOREIGN KEY (PersNr) REFERENCES Person (PersNr) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
CREATE TABLE Transportmedium (
MedienNr INT NOT NULL auto_increment, Bezeichnung enum('Zug','Flugzeug','Bus','Schiff','Auto','anderes') default NULL, Preis decimal(10,2) NOT NULL,
PRIMARY KEY (MedienNr),
UNIQUE (Bezeichnung)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
UNIQUE: Gleicher Wert darf nicht mehrfach vorkommen
Weitere Tabellen erzeugenCREATE TABLE Land (
LandNr INT NOT NULL auto_increment,
Name VARCHAR(256) collate latin1_german1_ci NOT NULL, Sprache VARCHAR(32) collate latin1_german1_ci NOT NULL, Waehrung VARCHAR(3) collate latin1_german1_ci NOT NULL, Vorwahl VARCHAR(6) collate latin1_german1_ci NOT NULL,
PRIMARY KEY (LandNr), UNIQUE (Name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
CREATE TABLE Reiseziel (
ZielNr INT NOT NULL auto_increment, Name VARCHAR(256) collate latin1_german1_ci default NULL, Preis decimal(10,2) NOT NULL default '0.00', LandNr INT NOT NULL default '0',
PRIMARY KEY (ZielNr),
FOREIGN KEY (LandNr) REFERENCES Land (LandNr) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;ON DELETE RESTRICT: Ein Land darf nicht gelöscht werden, solange es dort noch ein Reiseziel gibt
CREATE TABLE Beratung (
KundeNr INT NOT NULL, MitarbeiterNr INT NOT NULL,
PRIMARY KEY (KundeNr, MitarbeiterNr),
FOREIGN KEY (KundeNr) REFERENCES Kunde(PersNr) ON DELETE CASCADE, FOREIGN KEY (MitarbeiterNr) REFERENCES Mitarbeiter(PersNr) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
CREATE TABLE Buchung (
KundeNr INT NOT NULL, MitarbeiterNr INT NOT NULL, MedienNr INT NOT NULL, ZielNr INT NOT NULL,
PRIMARY KEY (KundeNr, MitarbeiterNr, MedienNr, ZielNr),
FOREIGN KEY (KundeNr) REFERENCES Kunde(PersNr) ON DELETE CASCADE, FOREIGN KEY (MitarbeiterNr) REFERENCES Mitarbeiter(PersNr) ON DELETE CASCADE, FOREIGN KEY (MedienNr) REFERENCES Transportmedium(MedienNr) ON DELETE CASCADE FOREIGN KEY (ZielNr) REFERENCES Reiseziel(ZielNr) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
Weitere Tabellen erzeugen
Wie gibt man das jetzt wirklich ein? Internet Explorer starten Seite https://www.gymmuenchenstein.ch/phpMyAdmin
aufrufen Benutzername test, Passwort mp1abe2013 eingeben Tab SQL wählen Eingeben: CREATE DATABASE test_Ihr-Vorname auf OK klicken 2. Browserfenster oder 2. Browsertab öffnen auf www.gymmuenchenstein.ch/weiss gehen Aktuell-Link MP 1ABe folgen Datei reisebuero.txt ansehen gesamten Dateiinhalt in die Zwischenablage kopieren zurück ins phpMyAdmin-Fenster Datenbank mit ihrem Namen wählen, Tab SQL wählen Inhalt der Zwischenablage einfügen, OK klicken. aktualisieren (mit )
Damit wir alle an einer DB arbeiten Bei phpMyAdmin abmelden (mit ) Auf die Seite
www.gymmuenchenstein.ch/weiss/SQL.php gehen Benutzername reisebuero, Passwort mp1abe2013
eingeben Tabelle "reisebuero" wählen
Datensätze in Tabellen einfügenINSERT INTO Person (Name, Adresse) VALUES ('Bruno
Buess', 'Baselstrasse 33, 4142 Münchenstein');
Das Feld PersNr wird automatisch eingefüllt, weil es die Eigenschaft auto_increment hat!
INSERT INTO Mitarbeiter (PersNr, Gehalt) VALUES (1, 6395.15);
Aufgabe:
Füllen Sie gemeinsam die verschiedenen Tabellen der Datenbank!
Recommended