Praxis Teil III 
Wir wollen: 
Aufgabe:  
Weiter Normalisieren  
 Ein eigenes ER Modell aufstellen (Auf dem Papier oder gemeinsam an der Tafel?) 
Daten in Excel erfassen und einlesen 
  
Eine weitere Tabelle bilden (Adressen) 
  Trennen von CD und Interpreten 
  Sinnvolle Indexe anlegen  
    Eine Select per EXPLAIN überprüfen  
  Verschiedene Joins ausprobieren  
  - Welche Interpreten haben meine CDs? 
  - Wer hat welche CD mit welchem Interpret ausgeliehen? 
  - Welche CDs sind NICHT ausgeliehen 
  
 
  Analyse der Aufgabe: Probleme? Fragen? Optimieren?  
   
  
Exemplarische SQL Statments 
CREATE TABLE ausgeliehen (
  cd_id int(10) unsigned NOT NULL default '0',
  ausleiher_id int(10) unsigned NOT NULL default '0',
  name varchar(46) NOT NULL default '',
  PRIMARY KEY  (cd_id,ausleiher_id),
  UNIQUE KEY cd_id (cd_id)
) 
INSERT INTO ausgeliehen VALUES (1, 1, 'Thomas');
INSERT INTO ausgeliehen VALUES (2, 1, 'Thomas');
INSERT INTO ausgeliehen VALUES (3, 2, 'Hans');
INSERT INTO ausgeliehen VALUES (4, 2, 'Hans');
ALTER TABLE ausgeliehen ADD INDEX(name)
ALTER TABLE cd.ausgeliehen CHANGE name Vorname VARCHAR(46) NOT NULL  
SELECT titel, interpret, name from cdsammlung c JOIN ausgeliehen a WHERE c.id = a.cd_id 
SELECT titel, interpret, name FROM cdsammlung c LEFT JOIN ausgeliehen a ON c.id = a.cd_id WHERE a.cd_id IS NULL 
CREATE TABLE Adressen (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
vorname VARCHAR(64) NOT NULL, 
nachname VARCHAR(64) NOT NULL, 
telefon VARCHAR(32) NOT NULL, 
email VARCHAR(32) NOT NULL,
UNIQUE (`id`)
); 
ALTER TABLE `ausgeliehen`
  DROP `Vorname`;
INSERT INTO `adressen` (`id`, `vorname`, `nachname`, `Telefon`, `email`) VALUES ('', 'Thomas', 'Butz', '0179/6997522', 'tbee@tbee.de'); 
INSERT INTO `adressen` (`id`, `vorname`, `nachname`, `Telefon`, `email`) VALUES ('', 'Hans', 'Muster', '08150', 'muster@musterman.de'); 
select * 
from cdsammlung c 
LEFT JOIN ausgeliehen a 
ON c.id = a.cd_id 
JOIN adressen d 
WHERE a.ausleiher_id = d.id
select * from 
cdsammlung c 
LEFT JOIN ausgeliehen a 
ON c.id = a.cd_id 
LEFT JOIN adressen d 
ON a.ausleiher_id = d.id
 
  
  
      |