Eine Tankstellenkette 4 4.1 Eine Tankstellenkette Beschreibung des Gegenstandsbereichs Eine Tankstellenkette möchte in allen größeren Orten der Region Tankstellen einrichten und die relevanten Daten in einer Datenbank speichern. In Kleinkennstenich (Kreis Hintermberg, 2 000 Einwohner) gibt es noch keine Tankstelle, in Benzhausen (Kreis Mobilland, 75 000 Einwohner) bereits drei Tankstellen. Eine dieser Tankstellen befindet sich in der Rennstraße 77 (PLZ 98765) und hat eine Fläche von 3 700 m2. Sie hat 13 Mitarbeiter, über die Personalnummer, Name und Adresse gespeichert werden. Ein Mitarbeiter kann mehreren höchstens drei - Tankstellen zugeordnet sein. Mitarbeiter können andere Mitarbeiter anleiten, wobei ein Mitarbeiter mehrere Chefs haben kann und ein Chef mindestens 3 Mitarbeiter anleitet. Jede Tankstelle der Kette kann selbst wählen, von welchem Großhändler sie den Kraftstoff bezieht. Der Großhändler „Peter Petrolius AG“ ist für die Kette von großem Interesse, auch wenn er noch mit keiner Tankstelle zusammenarbeitet. Zu jedem Großhändler wird über den unikalen Firmennamen hinaus noch die Anschrift des Hauptsitzes gespeichert. Die oben genannte Tankstelle hat 8 Kraftstofftanks, wobei der Tank mit der Nummer 3 ein Fassungsvermögen von 70 000 l und einen Füllstand von 35 % hat. Er enthält den Kraftstoff mit der Bezeichnung „Superbenzin bleifrei“. Der Kraftstoff „Superbenzin bleifrei“ hat eine Oktanzahl von 95 und kostet heute an allen Tankstellen der Kette 1,029 Euro. Die Tankstelle verfügt über 12 Zapfsäulen. Eine Zapfsäule ist jeweils mit genau 4 Kraftstofftanks verbunden, ein Tank kann mehrere Zapfsäulen speisen. Der Tank 8 ist vorübergehend stillgelegt: Er enthält keinen Kraftstoff und versorgt keine Zapfsäule. Es werden Angaben über die Tankvorgänge gespeichert. Zu jedem Tankvorgang muss ersichtlich sein, an welcher Zapfsäule welcher Kraftstoff in welcher Menge getankt wurde und wie hoch der Tankpreis war. Notfalls kann dem Tankvorgang auch das betankte Fahrzeug zugeordnet werden - jedoch nur dann, wenn das Bezahlen 1 Eine Tankstellenkette „vergessen“ wurde. So wurde beispielsweise in der betrachteten Tankstelle am 11.11.1001 um 11.11 Uhr an der Zapfsäule 11 ein blauer VW Golf mit dem polizeilichen Kennzeichen „GAUN ER 007“ betankt, ohne dass bezahlt wurde. Das ist besonders ärgerlich, weil dieses Fahrzeug schon zum dritten Mal einem Tankvorgang zugeordnet wurde. Weiterhin ist zu beachten: 2 Die Tankstellen der Kette werden nur in Orten und nicht auf freier Strecke eingerichtet. Eine neu eingerichtete Tankstelle hat noch keine Mitarbeiter eingestellt und hat noch zu keinem Großhändler Kontakt. Später kann sie dann aber nur von einem Großhändler den Kraftstoff beziehen. Die Kraftstofftanks und die Zapfsäulen werden innerhalb einer Tankstelle jeweils durchnummeriert. Es gibt somit innerhalb der Kette sehr viele Tanks bzw. Zapfsäulen mit der Nummer 1. Eine Tankstelle hat mindestens 4 Kraftstofftanks und mindestens 2 Zapfsäulen. Kraftstoff einer Sorte kann sich in mehreren Tanks befinden. Ein Kraftstoff ist in wenigstens einem Tank vorhanden. An einer Zapfsäule kann zu einem Zeitpunkt nur ein Tankvorgang stattfinden. Einer neu installierten Zapfsäule wurde noch kein Tankvorgang zugeordnet. Es werden nur solche Fahrzeuge gespeichert, die wenigstens einem „finanzierungsfreien“ Tankvorgang zugeordnet wurden. Eine Tankstellenkette 4.2 Konzeptionelles Datenmodell Ort Ortsname Kreis Einwohnerzahl [3,*] leitet an verfügt über liegt in Großhändler Firmenname Hauptsitz wird angeleitet von Mitarbeiter Personal-Nr Name Adresse [1,3] ist zugeordnet Tankstelle PLZ Straße/Hausnr Fläche arbeitet zusammen mit hat [2,*] verfügt über bezieht Kraftstoff von gehört zu [4,*] hat Kraftstoff Kraftstoff-Bez Oktanzahl Aktueller Preis ist in gehört zu [4,4] ist verbunden mit enthält wird verwendet für erfolgt mit Kraftstofftank Tank-Nr Fassungsvermögen Füllstand Tankvorgang Zeitpunkt Menge Tankpreis Zapfsäule Säulen-Nr versorgt wird genutzt für erfolgt an erfolgt für wird zugeordnet zu Fahrzeug Pol. Kennzeichen Typ Farbe 3 Eine Tankstellenkette Bemerkungen: 4 Da nicht gesichert ist, dass es in einem Postleitzahl-Bezirk nur eine einzige Tankstelle gibt, wird der Objekttyp „Tankstelle“ durch die Kombination der Eigenschaften „PLZ“ und „Straße/Hausnr“ identifiziert. Die Kraftstofftanks und die Zapfsäulen werden innerhalb einer Tankstelle jeweils durchnummeriert. Deshalb erfolgt die Identifizierung des Objekttyps „Kraftstofftank“ (bzw. „Zapfsäule“) durch die Kombination der Beziehungstyp-Richtung „Kraftstofftank gehört zu Tankstelle“ (bzw. „Zapfsäule gehört zu Tankstelle“) und der Eigenschaft „Tank-Nr“ (bzw. „Säulen-Nr“). An einer Zapfsäule kann zu einem Zeitpunkt nur ein Tankvorgang stattfinden. Deshalb ist der Objekttyp „Tankvorgang“ durch die Kombination aus der Beziehungstyp-Richtung „Tankvorgang erfolgt an Zapfsäule“ und der Eigenschaft „Zeitpunkt“ identifizierbar. Die Speicherung des Tankpreises im Objekttyp „Tankvorgang“ bedeutet keine Redundanz. Der aktuelle Preis des Kraftstoffs ändert sich nämlich häufig, so dass sich aus der Kenntnis des Kraftstoffs und der getankten Menge später nicht mehr der Tankpreis rekonstruieren lässt. Ein und dasselbe Fahrzeug kann mehreren „finanzierungsfreien“ Tankvorgängen zugeordnet werden. Deshalb muss die Beziehungstyp-Richtung „Fahrzeug wird zugeordnet zu Tankvorgang“ die Kardinalität N aufweisen. Es wird angenommen, dass eventuell ein neuer Kraftstoff gespeichert werden muss, der noch für keinen Tankvorgang verwendet wurde. Deshalb ist die Beziehungstyp-Richtung „Kraftstoff wird verwendet für Tankvorgang“ optional. Eine Tankstellenkette 4.3 Transformation in das logische Datenschema Zunächst werden die Objekttypen in Tabellen transformiert (Transformationsregel T01). Danach erfolgt die Transformation der Beziehungstyp-Richtungen, die als identifizierende Elemente für die „schwachen“ Objekttypen verwendet wurden (Transformationsregel T02). Im Ergebnis dieser beiden Transformationen ergeben sich die folgenden vorläufigen Tabellen-Typbeschreibungen: Ort(Ortsname+Kreis,Einwohnerzahl) Tankstelle(PLZ+Straße/Hausnr,Fläche) Mitarbeiter(Personal-Nr,Name,Adresse) Großhändler(Firmenname,Hauptsitz) Kraftstofftank(PLZ+Straße/Hausnr+Tank-Nr,Fassungsvermögen,Füllstand) Kraftstoff(Kraftstoff-Bez,Oktanzahl,Aktueller Preis) Zapfsäule(PLZ+Straße/Hausnr+Säulen-Nr) Tankvorgang(PLZ+Straße/Hausnr+Säulen-Nr+Zeitpunkt,Menge,Tankpreis) Fahrzeug(Pol. Kennzeichen,Typ,Farbe) Dabei wurden folgende Fremdschlüssel in die Primärschlüssel aufgenommen: Primärschlüssel des Objekttyps PLZ+Straße/Hausnr PLZ+Straße/Hausnr Tankstelle Tankstelle PLZ+Straße/Hausnr+Säulen-Nr Zapfsäule wird Primärschlüssel aufgenomme von n in Kraftstofftank Zapfsäule Tankvorgang 5 Eine Tankstellenkette Im nächsten Schritt werden die dualen Beziehungstypen in das relationale Datenbank-Modell transformiert (Transformationsregeln T03 bis T12). Dann erfolgt die Transformation des CM:CN- RekursivBeziehungstyps von „Mitarbeiter“ gemäß der Transformationsregel T19. Die veränderten Typbeschreibungen sind jeweils durch einen Stern gekennzeichnet: Ort(Ortsname+Kreis,Einwohnerzahl) * Tankstelle(PLZ+Straße/Hausnr,Firmenname,Ortsname+Kreis,Fläche) * Personal-Zuordnung(PLZ+Straße/Hausnr+Personal-Nr) Mitarbeiter(Personal-Nr,Name,Adresse) * Anleitung(Personal-Nr+Chef-Personal-Nr) Großhändler(Firmenname,Hauptsitz) * Kraftstofftank(PLZ+Straße/Hausnr+Tank-Nr,Kraftstoff-Bez, Fassungsvermögen,Füllstand) * Rohrverbindung(PLZ+Straße/Hausnr+Säulen-Nr+ [PLZ+Straße/Hausnr+] Tank-Nr) Kraftstoff(Kraftstoff-Bez,Oktanzahl,Aktueller Preis) Zapfsäule(PLZ+Straße/Hausnr+Säulen-Nr) * Tankvorgang(PLZ+Straße/Hausnr+Säulen-Nr+Zeitpunkt, Kraftstoff-Bez,Menge,Tankpreis) * Unbezahlter Tankvorgang(PLZ+Straße/Hausnr+Säulen-Nr+Zeitpunkt, Pol. Kennzeichen) Fahrzeug(Pol. Kennzeichen,Typ,Farbe) 6 Eine Tankstellenkette Bemerkungen: Die folgenden 1:N-Beziehungstypen können lediglich unter Semantikverlust als 1:CN-Beziehungstypen, also gemäß der Transformationsregel T09, repräsentiert werden: Tankstelle Kraftstofftank Tankstelle Zapfsäule Die Kardinalitäts-Beschränkungen lassen sich erst recht nicht durchsetzen. Es kann also durch die Tabellen-Typbeschreibungen nicht gesichert werden, dass eine Tankstelle mindestens 4 Kraftstofftanks hat, eine Tankstelle über wenigstens 2 Zapfsäulen verfügt. Der C:N-Beziehungstyp zwischen „Kraftstoff“ und „Kraftstofftank“ lässt sich nur als C:CN-Beziehungstyp repräsentieren. Die Tabellen-Typbeschreibung kann also nicht garantieren, dass sich jeder Kraftstoff in mindestens einem Kraftstofftank befindet. Für den C:CN-Beziehungstyp stehen nun zwei Transformationsregeln zur Verfügung: a) Transformationsregel T10 (die meisten Kraftstofftanks enthalten einen Kraftstoff), b) Transformationsregel T11 (die meisten Kraftstofftanks sind leer). Natürlich kann sich eine Tankstelle nur den Fall a) leisten. Deshalb wurde keine Koppel-Tabelle eingeführt. Stattdessen wurde in die Tabelle „Kraftstofftank“ ein nicht-eingabepflichtiger Verweis auf den „Kraftstoff“ aufgenommen (deshalb der Kursivdruck!). Der C:N-Beziehungstyp zwischen „Fahrzeug“ und „Tankvorgang“ lässt sich wiederum nur als C:CN-Beziehungstyp repräsentieren. Die Tabellen-Typbeschreibung lässt dann unsinnigerweise die Speicherung eines Fahrzeugs zu, das keinem Tankvorgang zugeordnet wird. Für den C:CN-Beziehungstyp stehen Transformationsregeln zur Verfügung: wiederum zwei 7 Eine Tankstellenkette a) Transformationsregel T10 (den meisten Tankvorgängen wird ein Fahrzeug zugeordnet, d.h. fast alle Kunden der Tankstelle „vergessen“ das Bezahlen), b) Transformationsregel T11 (den meisten Tankvorgängen wird kein Fahrzeug zugeordnet, weil die Kunden ordnungsgemäß bezahlt haben). Im Interesse der Tankstelle wollen wir annehmen, dass der Fall b) vorliegt. Deshalb wurde eine Koppel-Tabelle „Unbezahlter Tankvorgang“ eingeführt, durch die die wenigen „finanzierungsfreien“ Tankvorgänge mit dem jeweiligen Fahrzeug in Verbindung gebracht werden (im Unterschied zum PowerDesigner, s. Abschnitt 4.4!). Für den C:CN-Beziehungstyp zwischen „Großhändler“ und „Tankstelle“ stehen wiederum zwei Transformationsregeln zur Verfügung: a) Transformationsregel T10 (die meisten Tankstellen beziehen Kraftstoff von einem Großhändler), b) Transformationsregel T11 (die meisten Tankstellen stehen noch mit keinem Großhändler in Kontakt). Sicherlich wird der Fall a) vorliegen. Deshalb wurde keine Koppel-Tabelle eingeführt. Stattdessen wurde in die Tabelle „Tankstelle“ ein nicht-eingabepflichtiger Verweis auf den „Großhändler“ aufgenommen (deshalb der Kursivdruck!). Die folgenden M:CN-Beziehungstypen können lediglich unter Semantikverlust als CM:CN-Beziehungstypen, also gemäß der Transformationsregel T12, repräsentiert werden: Tankstelle Mitarbeiter Kraftstofftank Zapfsäule Die Kardinalitäts-Beschränkungen lassen sich erst recht nicht durchsetzen. Es kann also durch die Typbeschreibungen der Koppel-Tabellen „Personal-Zuordnung“ bzw. „Rohrverbindung“ nicht gesichert werden, dass ein Mitarbeiter mindestens einer und höchstens 3 Tankstellen zugeordnet ist, eine Zapfsäule mit genau 4 Kraftstofftanks verbunden ist. 8 Eine Tankstellenkette In der Tabelle „Rohrverbindung“ müsste der Primärschlüssel der Tankstelle (PLZ+Straße/Hausnr) eigentlich zweimal auftauchen: a) im Verweis auf die Zapfsäule, die über die Tankstelle identifiziert wird: PLZ+Straße/Hausnr+Säulen-Nr b) im Verweis auf den Kraftstofftank, der ebenfalls über die Tankstelle identifiziert wird: PLZ+Straße/Hausnr+Tank-Nr Da jedoch Zapfsäule und Kraftstofftank zur selben Tankstelle gehören, muss deren Primärschlüssel natürlich nicht doppelt aufgeführt werden. Er wurde deshalb beim Verweis auf den Kraftstofftank in eckige Klammern gesetzt: [PLZ+Straße/Hausnr+] Tank-Nr Als zusätzliches Attribut wird lediglich die „Tank-Nr“ aufgenommen. Diese bildet gemeinsam mit den Attributen „PLZ+Straße/Hausnr“ aus dem Verweis auf die Zapfsäule den Verweis auf den Kraftstofftank. Der CM:CN-Rekursiv-Beziehungstyp des Objekttyps „Mitarbeiter“ wird gemäß der Transformationsregel T19 durch die Koppel-Tabelle „Anleitung“ repräsentiert. Allerdings lässt sich die Kardinalitäts-Beschränkung nicht darstellen. Es kann also durch die Typbeschreibung der Koppel-Tabelle nicht durchgesetzt werden, dass ein Chef mindestens 3 Mitarbeiter anleitet. 9 Eine Tankstellenkette „Physisches Datenmodell“ des PowerDesigner 9.0 4.4 Ort Ortsname Kreis Einwohnerzahl Anleitung Personal-Nr Chef-Personal-Nr Mitarbeiter Personal-Nr Name Adresse Personal-Nr = Personal-Nr Personal-Nr = Chef-Personal-Nr PLZ = PLZ Straße/Hausnr = Straße/Hausnr Ortsname = Ortsname Kreis = Kreis Großhändler Firmenname Hauptsitz Tankstelle PLZ Straße/Hausnr Firmenname Ortsname Kreis Fläche Personal-Nr = Personal-Nr Personal-Zuordnung PLZ Straße/Hausnr Personal-Nr PLZ = PLZ Straße/Hausnr = Straße/Hausnr Zapfsäule PLZ Straße/Hausnr Säulen-Nr Firmenname = Firmenname PLZ = PLZ Straße/Hausnr = Straße/Hausnr Kraftstofftank PLZ Straße/Hausnr Tank-Nr Kraftstoff-Bez Fassungsvermögen Füllstand Rohrverbindung PLZ = PLZ PLZ Straße/Hausnr = Straße/Hausnr Straße/Hausnr Tank-Nr = Tank-Nr Säulen-Nr Tank-Nr Kraftstoff-Bez = Kraftstoff-Bez Kraftstoff-Bez = Kraftstoff-Bez Kraftstoff Kraftstoff-Bez Oktanzahl Aktueller Preis PLZ = PLZ Straße/Hausnr = Straße/Hausnr Säulen-Nr = Säulen-Nr PLZ = PLZ Straße/Hausnr = Straße/Hausnr Säulen-Nr = Säulen-Nr Tankvorgang PLZ Straße/Hausnr Säulen-Nr Zeitpunkt Pol. Kennzeichen Kraftstoff-Bez Menge Tankpreis Fahrzeug Pol. Kennzeichen Typ Farbe Pol. Kennzeichen = Pol. Kennzeichen 10 Eine Tankstellenkette Bemerkung: Dem PowerDesigner stehen keine Angaben über die Häufigkeit zur Verfügung, mit der die Optionalität einer Beziehungstyp-Richtung realisiert wird. Er kann deshalb bei der Transformation des C:NBeziehungstyps zwischen „Fahrzeug“ und „Tankvorgang“, der ja als C:CN-Beziehungstyp repräsentiert werden muss, keine Auswahl unter den Transformationsregeln T10 (selten realisierte Optionalität) und T11 (häufig realisierte Optionalität) treffen. Er repräsentiert einen C:CN-Beziehungstyp immer nach der Transformationsregel T10. Deshalb wurde – entgegen unserer Darstellung im Rahmen der Tabellen-Typbeschreibungen (Abschnitt 4.3) - im „physischen“ Datenmodell in die Tabelle „Tankvorgang“ ein nichteingabepflichtiger Verweis auf das „Fahrzeug“ aufgenommen (deshalb der Kursivdruck!): * Tankvorgang(PLZ+Straße/Hausnr+Säulen-Nr+Zeitpunkt, Pol. Kennzeichen,Kraftstoff-Bez,Menge,Tankpreis) 11 Eine Tankstellenkette 4.5 12 Datenbank-Struktur für Access 2000