Hallo Keozor,
Beim ER-Modell
Muss man die Objekttypen in eine bestimmte Reihenfolge
bringen?
ich bin mir nicht ganz sicher, was du meinst. Eine bestimmte Reihenfolge haben die Objekttypen in einem ER-Modell nicht.
Woran erkenne ich, welches Objekttyp mit welchem zu tun hat?
„Zu tun hat“ beschreibt einen Beziehungstyp zwischen zwei (oder mehr) Objekttypen. Wo Beziehungen zwischen Objekten bestehen, gibt dir deine Miniwelt vor, die du modellieren willst. Natürlich kann man im Prinzip zwischem allem und jedem Beziehungen sehen (was wahrscheinlich dein Problem ist), aber in dein ER-Modell nimmst du nur die für deinen Anwendungszweck/für deine gewählte Abstraktionsebene wichtigen Beziehungen.
Beispiel: Mitarbeiter erbringt eine Leistung, die einem
Auftrag zugeordnet werden kann. Der Auftrag kann in
Unteraufträge gegliedert werden.
Wenn dir so etwas als textuelle Beschreibung vorgegeben wird, musst du aufpassen, dass du nicht zuviel Vorwissen aus der realen Welt mit einbeziehst. Hauptsächlich musst du dich auf die Beschreibung stützen.
Es gibt da folgende Technik. In so einer textuellen Beschreibung sind Kandidaten für Objekttypen häufig Substantive; Kandidaten für Beziehungstypen sind Verben/Prädikate. Die kann man sich am besten farblich markieren. Ich nehme hier im Beispiel mal fett für Substantive und kursiv für Verben:
Mitarbeiter erbringt eine Leistung , die einem
Auftrag zugeordnet werden kann. Der Auftrag kann in
Unteraufträge gegliedert werden.
Daraus kann man in diesem Beispiel leicht die Objekttypen ablesen:
Es gibt 4 Objekttypen: Mitarbeiter, Leistung, Auftrag,
Unterauftrag
Anhand der Verben sieht man dann, dass folgende Beziehungen in diesem Text beschrieben werden:
a) Mitarbeiter --erbringt–> Leistung
b) Leistung --ist-zugeordnet–> Auftrag
c) Auftrag --ist-gegliedert-in–> Unterauftrag
Das sind genau die drei Beziehungstypen aus deinem Buch:
Verbunden wurde das so im Buch:
Mitarbeiter->Leistung->Unterauftrag->Auftrag
Klingt logisch,aber ich hätte noch versucht den Mitarbeiter
mit dem Auftrag zu verbinden…
Wie gesagt, „klingt logisch“ ist ein schlechtes Argument, weil du so mit deinem Wissen argumentierst, wie Mitarbeiter, Aufträge etc. „normalerweise“ funktionieren und zusammenhängen. Das kann aber in dem Fall, den du hier zu modellieren hast, leicht (oder ganz) anders sein.
gibt es da irgendwie einen Tipp oder eine Merkhilfe wie man
sich das am besten klar machen kann?
Substantive und Verben suchen; daraus Objekttypen erstellen sowie Beziehungstypen, die beschrieben sind (und unvoreingenommen an das ganze herangehen, die Allgemeinbildung größtenteils ausblenden).
Dann habe ich Schwierigkeiten bei der Kardinalität.
Mitarbeiter -> Leistung
(1:n)
Von wo liest man das? Also von welcher Richtung?
Jeden Beziehungstyp kann man prinzipiell in beiden Richtungen lesen. Hier: Ein Mitarbeiter erbringt viele Leistungen. Eine Leistung wird von maximal einem Mitarbeiter erbracht.
Eine Leistung kann von mehreren Mitarbeiter erbracht werden ->
ich hätte da jetzt m:n hin geschrieben…
Wenn du das so sagst, müsstest du auch n:m benutzen.
Das ist aber falsch…
Ob das falsch ist, hängt ganz davon ab, wie es in der „Welt“, die du modellierst, aussieht. Dein Beispieltext von oben sagt nichts zu den Kardinalitäten.
Beim Relationenmodell:
Ich hab Schwierigkeiten bei der Normalisierung.
- verstehe ich, man spaltet alle Spalten so weit auf,so dass
nur jede Spalte einen Wert immer hat
(Zunächst muss ich etwas pedantisch sein: Im Relationenmodell gibt es keine Spalten und Tabellen, nur Attribute und Relationenschemata.)
Ja, ein Relationenschema ist in 1NF, wenn keine mehrwertigen Attribute auftreten.
- Hier versuche ich, die Spalten in „Themengebiete“ zusammen
zu fassen…
Hmm, das riecht schon wieder nach dem bösen Vorwissen. Im Endeffekt läuft die ganze Normalisierung darauf hinaus, dass unabhängige „Themengebiete“ auch in unterschiedlichen Relationenschemata landen, um Redundanzen und Änderungsanomalien zu vermeiden. Aber du kannst nicht durch grobes Abschätzen von „Themengebieten“ zu einer 2NF kommen.
Welche Definition der 2NF kennst du? Die, die ich kenne, basiert auf funktionalen Abhängigkeiten (FAs). Diese funktionalen Abhängigkeiten zwischen Attributmengen sind alles, was du an Wissen über die Welt benutzt. Entweder sind dir die FAs im Rahmen einer Aufgabe vorgegeben oder du musst sie vorab selbst bestimmen.
In 2NF muss dann jedes Nichtschlüsselattribut von jedem Schlüsselkandidaten voll funktional abhängig sein. Ziel ist es also, Abhängigkeiten von (nur) Schlüsselteilen zu eliminieren und dadurch wieder Entitymengen (im ER-Sinne) in eigene Relationen zu bringen.
- Hier schaue ich, ob unter den Nichtschlüsselwerten
Abhängigkeiten untereinander sind… Und wenn ja, spalte ich
die in neue Tabellen auf.
Ja, die Bestimmung der transitiven „Abhängigkeiten“ läuft aber wieder auf Grundlage der vorher bestimmten FAs.
es ist irgendwie abstrakt und es gibt keine einheitliche Vorgehensweise…
Ja, Normalisierungstheorie ist sehr abstrakt. Aber einheitliche Vorgehensweisen gibt es; es gibt sogar Algorithmen, die dir aus einer Menge von Attributen und einer Menge von funktionalen Abhängigkeiten ein Schema in 3NF automatisch herstellen. Dafür musst du aber die Abbildung von „Welt“ in Formalismen schon gemacht haben und dein sonstiges Wissen über die „reale Welt“ ausblenden. Ich denke, das macht dir am meisten zu schaffen.
Ich hoffe, ich konnte dir etwas helfen. Sicher hast du noch Nachfragen; dann schieß mal los …
Andreas