Inhaltsverzeichnis
1. Erläuterung der Aufgabenstellung
2. Spezifikation der Aufgabenstellung
3. Auswahl der Entitäten mit Attributen und Datentypen
4. Auswahl beispielhafter Beziehungen
5. ER- Modell
6. Nachweis der durchgeführten Normalisierung des ER- Modells
7. SQL- Script zum vollständigen Generieren der Tabellen entsprechend normalisiertem ER- Modell
8. SQL-Script zum Füllen der einzelnen Tabellen mit je 10 Datensätzen
9. SQL-Scripte für Datenabfrage
10. Script zum Erzeugen eines Paketes mit 8 Funktionen und 5 Prozeduren
11. Script zum Erzeugen von 2 Datenbanktriggern
1. Erläuterung der Aufgabenstellung
Die vorliegende Entwurfsarbeit bildet einen Ausschnitt einer komplexen Teile- Verwaltung ab. Es sollen hier ausgewählte Funktionen und Mechanismen einer Lagerverwaltung gezeigt werden. Um ein Lager und ein voll funktionierendes System aufzubauen genügen meine gezeigten Ansätze jedoch nicht aus. Die komplexen Zusammenhänge zwischen einer Disposition1 und der daraus generierten Bestellung werden in meiner Arbeit auch nicht berücksichtig. Es besteht jedoch die Möglichkeit eine „manuelle“ Bestellung auszulösen.
Eine detaillierte Spezifikation der zu lösenden Aufgaben meiner Arbeit folgt im nächste Abschnitt.
2. Spezifikation der Aufgabenstellung
Im folgenden Abschnitt werde ich beispielhaft erläutern worauf ich in meiner Arbeit Wert lege, welche Funktionalitäten sie beinhaltet und wieso ich gerade diese gewählt habe.
Für ein Unternehmen ist es heutzutage immer wichtiger Aufträge zu bekommen und diese dann so schnell wie möglich, mit bester Qualität zu bearbeiten. Damit eine reibungslose Produktion gewährleistet werden kann, ist es fast unerlässlich sein Unternehmen in einem sog. ERP- System2 abzubilden. In meiner Arbeit greife ich daraus folgende Module bzw. Funktionen heraus:
Teileerfassung (Stammdaten3) Kunden (Stammdaten) Lieferanten (Stammdaten) Adressen (Stammdaten) Bestellungen (Stammdaten) Bestellpositionen (Stammdaten)
Um die Grundfunktionalitäten darstellen zu können, reichen diese 6 Entitäten4 aus.
2.1. Welche Daten werden benutzt
Um einen besseren Einblick in die vorliegende Arbeit zu bekommen stelle ich die einzelnen Entitäten hier kurz vor:
2.2.1. Teil:
Unter dieser Entität werden Teile zusammengefasst, welche die gleichen Eigenschaften besitzen. Es wird also nicht jedes Teil explizit angelegt sondern einer bestimmten Teilegruppe zugeordnet. Es wäre z.B. nicht sinnvoll für eine Lagerverwaltung 50 Schaftfräser mit einem Durchmesser von 5mm einzeln anzulegen, sondern eher eine Teilegruppe mit der Anzahl gleicher Teile zu pflegen. Um einen Bezug zu einer gesamten Baugruppe zu schaffen wird zu jedem „Teil“ eine baugruppen_id eingetragen, die ihrerseits nur eine teil_id referenziert und somit
kennzeichnet zu welcher Baugruppe ein Teil gehört. Am Beispiel lässt sich der Zusammenhang besser erkennen. Nehmen wir an ein Teil (Abdeckhaube) hat die teil_id = 10 und eine baugruppen_id = 20. Dann würde das Teil (Fräser) mit teil_id = 30 und baugruppen_id = 10 zum Teil (oder Baugruppe) Abdeckhaube (teil_id = 10) gehören. Wir haben hier also die konkrete Zuordnung von Teilen zu einer bestimmten Baugruppe erreicht. Auf die weiteren Attribute und ihre Funktion gehe ich hier nicht ein, da sie sich erstens selbst erklären und ich zweitens im folgenden noch nähere Angaben dazu mache.
2.2.2. Lieferant
Zur Lieferantentabelle5 gibt es eigentlich nicht allzu viel zu sagen. Hier wird die Lieferzeit hinterlegt und eine Verknüpfung auf eine Adresse, worauf ich im Weiteren noch genauer eingehen werde.
2.2.3. Kunde
Die Tabelle Kunde ist ähnlich der Lieferantentabelle aufgebaut. Ein Verweis zu einer Adresse und das Lieferziel6 werden hier eingetragen. Wie auch in der Tabelle Lieferant habe ich mich entschlossen hier nur einige, zu Demonstrationszwecken ausgewählte Attribute zu benutzen. In der Praxis würden hier sicherlich noch mehr Informationen benötigt werden, auf die ich hier aber verzichte. Ich denke um die Funktionalitäten ausreichend zu gestalten reichen die von mir gewählten Attribute aus.
2.2.4. Adresse
Die Tabelle Adresse erfüllt eine Wichtige Rolle in diesem Datenbankentwurf. Ihre Attribute beschreiben wieder ausgewählte Merkmale einer Adresse. Hier werden u.A. Name, Wohnanschrift, Telefonnummer etc. hinterlegt. Um einen Bezug zu bekommen zu Kunden oder Lieferanten werden in den genannten Tabellen Fremdschlüssel eingebaut. Da ein Kunde „Klaus Meier“ auch für andere Produkte Lieferant „Klaus Meier“ sein kann ist das eine gute Möglichkeit diesen Zusammenhang zu schaffen. Des weiteren ist es so auch möglich z.B. eine Lieferadresse abweichend von der hinterlegten Kundenadresse zu referenzieren und eine Bestellung somit an eine Adresse X zu senden.
2.2.5. Bestellung
Eine Bestellung ist unerlässlich um seinen Lagerbestand wieder aufzufüllen. Deshalb habe ich auch in meiner Arbeit wert auf diese Funktionalität gelegt. Eine Bestellung beinhaltet Informationen zum Bestelldatum einer Adresse (in diesem Fall immer die Lieferadresse) und eines möglichen Rabattes einer Bestellung. Was genau aber bestellt wir, werde ich in einer weiteren Tabelle zusammenfassen.
2.2.6. Bestell_Position
Diese Tabelle nennt sich zwar Bestell_Position, könnte aber durchaus auch für Lieferungen, Materialscheine oder Stücklistenpositionen genutzt werden. Sie beinhaltet allgemeine Informationen zu einer Position auf genannten Dokumenten. Im Fall einer Bestellung werden hier also Bestell_Positionen charakterisiert. Damit alle Positionen auch zu einer Bestellung zugeordnet werden können, wird zu jeder
Abbildung in dieser Leseprobe nicht enthalten
2.2.7. Allgemeine Attribute
In allen Tabellen wird das Anlagedatum des jeweiligen Datensatzes gespeichert. Dieses Attribut werde ich zwar nicht benutzen, es hat aber durchaus eine Berechtigung.
2.2.8. Kurzbeschreibung der Implementierten Funktionen und Prozeduren F1 get_kunde_info:
In dieser Funktion wird der Einzelpreis aus der Tabelle TEIL gesucht, der zu dem Teil gehört, dessen teil_id der Funktion als Eingangsparameter übergeben wurde. Dieser Einzelpreis kann dann einer Variablen zugeordnet werden.
Bsp.: v_preis := get_kunde_info(10);
F2 get_kuerzeste_lieferzeit:
Diese Funktion liefert die kürzeste Lieferzeit, aus der Lieferantentabelle.
Bsp.: v_lieferzeit := get_kuerzeste_lieferzeit;
F3 get_mwst:
Diese Funktion gibt von einem als Eingangsparameter mitgegebenen Wert den Mehrwertsteueranteil zurück.
Bsp.: v_mwst := get_mwst(1000);
F4 get_bestellsumme:
Als Eingangsparameter für diese Funktion dient eine bestellung_id. Daraufhin werden die einzelnen Positionen „durchforstet“ und die Preise der Jeweiligen Teile mit deren Bestellanzahl multipliziert. Diese Positionssummen werden aufaddiert und ergeben somit die Bestellsumme. Mit welchen Maßnahmen dies realisiert ist, kann unter dem Gliederungspunkt 10 € F:4 nachgelesen werden.
Bsp.: v_summe := get_bestellsumme(10);
F5 get_rabatt:
Diese Funktion benutzt die eben beschrieben get_bestellsumme- Funktion um daraus abhängig von einer bestimmten Höhe des Preises einen Rabatt festzulegen. Eingangsparameter hier ist wiederum eine bestellung_id.
Bsp.: v_rabatt := get_rabatt(10);
F6 get_gesamtsumme_brutto:
Um auch die Bruttosumme einfach berechnen zu lassen, habe ich diese Funktion geschrieben. Als Eingangsparameter benötigt „sie“ eine Nettosumme (z.B. aus Funktion get_bestellsumme), einen Mwst-Wert und einen Rabatt (in %). Daraus wird dann wie folgt die Endsumme berechnet. Von der Nettosumme + Mwst wird der %- tuale Rabatt abgezogen.
Bsp.: v_summe_brutto := get_gesamtsumme_brutto(1050,168,1);
F7 anzahl_kunden:
Diese Funktion zählt die Anzahl der Datensätze7 in der Tabelle KUNDE und gibt diese dann zurück.
Bsp.: v_anzahl_kunden :=anzahl_kunden;
F8 anzahl_adressen:
Diese Funktion zählt die Anzahl der Datensätze in der Tabelle ADRESSE und gibt diese dann zurück.
Bsp.: v_anzahl_adressen :=anzahl_adressen;
P1 adresse_anlegen:
Mit Hilfe dieser Prozedur kann man einen Adressendatensatz in die Tabelle ADRESSE einfügen. Die Prozedur benötigt einige Eingangsparameter. Die „Firma, Vorname, Nachname, Strasse, Hausnummer, Telefon, Email“. Wenn man zur Laufzeit alle Daten eingeben möchte, sollte man die Prozedur wie folgt aufrufen.
Bsp.: adresse_anlegen('&v_firma', '&v_vorname', '&v_nachname', '&v_strasse', '&v_hausnummer', '&v_telefon', '&v_email');
P2 kunde_anlegen:
Diese Prozedur legt einen Kunden an. Da sich hinter einem KUNDE auch immer eine ADRESSE verbirgt, wird bevor der Kunde an sich gespeichert wird erst einmal eine Adresse mit der vorher beschriebenen Prozedur (adresse_anlegen) angelegt. Diese Adresse hat dann die höchste adresse_id. Dieses „Wissen“ nutze ich um dem Kunden auch die angelegte Adresse zuzuordnen. Diese Funktion könnte man auch so für Lieferanten implementieren. Allerdings müsste dann als Eingangsparameter nicht das lieferziel, sonder die lieferzeit übergeben werden.
Bsp.: execute kunde_anlegen(’&v_lieferzeit’);
P3 lagerstatistik:
Diese Prozedur gibt eine Lagerstatistik aus. Es werden alle TEILE mit ihrem jeweiligen Warenwert ausgegeben. Somit bekommt man einen Überblick wie viel Teile jeder „TEIL“eart vorhanden sind und welchen Warenwert sie haben. Des weiteren wird noch die Gesamtsumme des Lagerbstandes ausgegeben. Diese Statistik könnte man auch als Inventurliste verwenden.
Bsp.: execute lagerstatistik;
P4 print_bestellung:
Als einziger Eingangsparameter dieser Funktion muss ein bestellung_id
„mitgegeben“ werden. Es werden dann eine Reihe Informationen aus den Tabellen: TEIL, BESTELLUNG, BESTELL_POSITION und ADRESSE. Diese Informationen werden dann, Positionsweise zusammengefasst, ausgegeben. Für die einzelnen Zwischensumme, Mwst, Rabatt etc. werden teilweise o.g. Funktionen und Prozeduren verwendet.
Bsp.: execute print_bestellung;
P5 print_teilinfo:
Diese Prozedur gibt eine kurze Teileinfo aus. Die Bezeichnung und der Lieferant werden angezeigt.
Bsp.: execute print_teilinfo(10);
Des weiteren gehörten neben o.a.g. Funktionen und Prozeduren noch zahlreiche SQL- Abfragen und Scripte, auf die ich hier nicht näher eingehe. Sie sind unter dem Gliederungspunkt 9 nachzulesen.
Unter dem nächsten Gliederungspunkt finden Sie eine Übersicht über die von mir verwendeten Entitäten, deren Attributen und die zugehörigen Datentypen.
[...]
1 Disposition: Unter Disposition versteht man die Anforderung, Artikel zu beschaffen. Von wesentlicher Bedeutung ist dabei die Ermittlung der Menge der zu beschaffenden Artikel und die Auswahl des Lieferanten.
2 ERP-System: Enterprise- Ressource- Planing: Mit solchen Softwaresystemen, sog. Warenwirtschaftsprogramme können Lager, Aufträge, Buchhaltung u.v.m. eines Unternehmens in einer Software nachgebildet und verwaltet werden. Die bekanntesten Beispiele sind wohl: SAP, proALPHA, KHK etc.
3 Stammdaten: von mir ausgewählte Attribute.
4 Entität: Ist eine Gruppierung von Attributen mit gleichem Bezugsobjekt: z.B. Mitarbeiter, Haus, Abteilung, Teil. Ist also „irgend etwas“ von dem es sich lohnt, Informationen zu haben. (Auto: Prof. Dr. Horst Heineck)
5 Tabelle: In Datenbanksystemen werden Entitäten durch Tabellen beschrieben, wobei die Attribute in separaten Spalten abgebildet werden.
6 Lieferziel: Ist eine pauschale Zeitspanne (in Tagen), die der Kunde auf seine Lieferung „wartet“. Bestell_Position eine bestellung_id eingetragen. Somit kann man alle Positionen genau zu einer Bestellung zuordnen.
Häufig gestellte Fragen
Was ist das Ziel dieses Dokuments?
Dieses Dokument dient als umfassende Sprachvorschau für eine Entwurfsarbeit, die einen Ausschnitt einer komplexen Teile-Verwaltung abbildet. Es werden ausgewählte Funktionen und Mechanismen einer Lagerverwaltung gezeigt.
Welche Themen werden in diesem Dokument behandelt?
Das Dokument behandelt unter anderem die Erläuterung der Aufgabenstellung, die Spezifikation der Aufgabenstellung, die Auswahl von Entitäten mit Attributen und Datentypen, die Auswahl beispielhafter Beziehungen, das ER-Modell, den Nachweis der durchgeführten Normalisierung des ER-Modells, SQL-Scripte zur Tabellengenerierung und Datenbefüllung, SQL-Scripte für Datenabfragen sowie Scripte zur Erzeugung von Funktionen, Prozeduren und Datenbanktriggern.
Welche Entitäten werden in diesem Dokument betrachtet?
Die betrachteten Entitäten umfassen Teil, Lieferant, Kunde, Adresse, Bestellung und Bestellposition.
Welche Bedeutung hat die Tabelle "Teil"?
Die Tabelle "Teil" fasst Teile mit gleichen Eigenschaften zusammen und ordnet sie Baugruppen zu. Eine baugruppen_id referenziert eine teil_id und kennzeichnet die Zugehörigkeit eines Teils zu einer Baugruppe.
Welche Rolle spielt die Tabelle "Adresse"?
Die Tabelle "Adresse" spielt eine wichtige Rolle, da sie Informationen wie Name, Wohnanschrift und Telefonnummer speichert und über Fremdschlüssel in den Tabellen "Kunde" und "Lieferant" referenziert wird. Dadurch können Kunden und Lieferanten mit Adressen verknüpft werden.
Was sind die implementierten Funktionen und Prozeduren?
Es gibt verschiedene implementierte Funktionen und Prozeduren, darunter Funktionen zur Abfrage von Einzelpreisen (get_kunde_info), zur Ermittlung der kürzesten Lieferzeit (get_kuerzeste_lieferzeit), zur Berechnung der Mehrwertsteuer (get_mwst), zur Berechnung der Bestellsumme (get_bestellsumme), zur Festlegung von Rabatten (get_rabatt) und zur Berechnung der Bruttogesamtsumme (get_gesamtsumme_brutto), sowie Prozeduren zum Anlegen von Adressen (adresse_anlegen), zum Anlegen von Kunden (kunde_anlegen), zur Ausgabe einer Lagerstatistik (lagerstatistik), zum Drucken einer Bestellung (print_bestellung) und zum Drucken einer Teileinfo (print_teilinfo).
Was ist der Zweck der Datenbanktrigger?
Das Dokument erwähnt die Erzeugung von Datenbanktriggern, liefert aber keine detaillierte Information darüber, welche Funktionen diese Trigger erfüllen.
Was bedeutet der Begriff "Disposition" im Kontext dieses Dokuments?
Disposition bedeutet die Anforderung, Artikel zu beschaffen, einschließlich der Ermittlung der Menge und der Auswahl des Lieferanten.
Was bedeutet ERP-System im Kontext dieses Dokuments?
Ein ERP-System (Enterprise-Ressource-Planning) ist ein Softwaresystem, mit dem Lager, Aufträge, Buchhaltung u.v.m. eines Unternehmens in einer Software nachgebildet und verwaltet werden können.
- Arbeit zitieren
- Stephan Feltel (Autor:in), 2003, Prototypenverwaltung mit Oracle, München, GRIN Verlag, https://www.grin.com/document/108515