i

Erzeugen der Zuordnungstabelle

Du hast es sicherlich gemerkt. Beide Vorgehensweisen - zusätzlicher Join über die Mailadresse bzw. über das Geburtsdatum - bringen nicht das gewünschte Ergebnis.

Das wäre eigentlich nicht schlimm - bedeutet es doch nur, dass wir 4 oder 5 von ca. 170 Karten nicht zuordnen könnten, also unter 3%. Bei großen Datenmengen wäre das vollkommen in Ordnung, es geht uns ja um "das große Ganze" und da könnten wir mit diesem Fehler leben.

Sichern der Zuordnung als Zuordnungstabelle

Das Ergebnis, die Zuordnung zwischen Zahlkarte und Person, wollen wir uns für die Zukunft sichern. Wie schon im ersten Kapitel geht das entweder als (statische) Tabelle oder als (dynamischer) View.

Mit folgendem SQL-Befehl erzeugst du eine neue Tabelle, die die Zuordnung enthält:

CREATE TABLE znrpnr as
SELECT z_karte.ZNR, m_person.PNR 
  FROM z_karte, m_person
 WHERE z_karte.Mail = m_person.EMail
   AND z_karte.Familienname = m_person.Name
   AND z_karte.Vorname = m_person.Vorname 
UNION 
SELECT z_karte.ZNR, m_person.PNR 
  FROM z_karte, m_person
 WHERE z_karte.GebDatum = m_person.GebDat
   AND z_karte.Familienname = m_person.Name
   AND z_karte.Vorname = m_person.Vorname 

Der Befehl CREATE TABLE ist selbsterklärend. Vielleicht erkennst du auch deine beiden SQL-Befehle wieder, die du im letzten Kapitel hoffentlich selbst hinbekommen hast. Neu ist der Befehl UNION in Zeile 7. Er stellt eine Mengenoperation auf den Abfrageergebnissen dar:

Mit dem Befehl UNION kann das Ergebnis zweier SQL-Abfragen mit gleicher Attributliste im SELECT zusammengeführt werden. Dabei werden Duplikate entfernt; dies entspricht der Vereinigungsmenge der beiden Mengen an gefundenen Datensätzen.

Erzeugen eines Zuordnungs-View

Die Tabelle hat den Vorteil, dass ein Zugriff darauf sehr schnell möglich ist; die Abfragen werden nicht neu ausgeführt. Das ist aber auch wieder genau der Nachteil, sollten sich die Ausgangsdaten ändern. Daher kann alternativ auch wieder ein Datenbank-View verwendet werden:

CREATE VIEW v_znrpnr as
SELECT z_karte.ZNR, m_person.PNR 
  FROM z_karte, m_person
 WHERE z_karte.Mail = m_person.EMail
   AND z_karte.Familienname = m_person.Name
   AND z_karte.Vorname = m_person.Vorname 
UNION 
SELECT z_karte.ZNR, m_person.PNR 
  FROM z_karte, m_person
 WHERE z_karte.GebDatum = m_person.GebDat
   AND z_karte.Familienname = m_person.Name
   AND z_karte.Vorname = m_person.Vorname 

Aufgabe

SQL Fenster In der online-Datenbank sind beide Varianten schon vorhanden, also die Tabelle znrpnr und der View v_znrpnr. Probiere einmal aus, ob es einen Unterschied macht, wenn man Tabelle oder View verwendet:

  1. Suche alle Einträge in Tabelle oder View, die zur Person "Carlo Winkelmann" gehören.
  2. Wann hat Herr Winkelmann eingekauft und wo?

Suche

v
1.4.5.5
www.inf-schule.de/information/datenbanksysteme/bigdata/zuordnungstabelle
www.inf-schule.de/1.4.5.5

Rückmeldung geben