Fremdschlüssel als Schlüsselattribut in Workbench?

PCore

Benutzer
Beiträge
14
1729589123358.webp
Hey,
ich bin gerade völlig verwirrt. Ich versuche mich gerade etwas in MySQL Workbench einzuarbeiten, aber ich komme an einer Stelle nicht weiter. Zwischen Schüler und Klasse haben wir ja eine 1:n Beziehung. Hier ergibt das Sinn. Beide Enitäten können unabhängig voneinander existieren? Aber nehmen wir mal an ich möchte nicht, dass ein Schüler ohne Klasse existiert. Dann müsste ich doch angeben, dass die KlassenID in Schüler NOT NULL ist? Und dann müsste die Linie durchgezogen sein? Aber eine durchgezogene Linie kriege ich nur hin, wenn ich KlassenID auch zum Schlüsselattribut mache? Aber wenn ich KlassenID auch zum Schlüsselattribut mache, dann kann ich die SchülerID ja mehrfach einfügen? Wo liegt mein Denkfehler?

Bitte um Hilfe. Danke
 
Werbung:
Vorweg: Ich habe keine Ahnung von Workbench.
Was meinst Du genau damit?
wenn ich KlassenID auch zum Schlüsselattribut mache?
Was Du beschreibst, ist ein Vorgang in Workbench, wie ändert sich dadurch das tatsächliche Datenmodell (Create Script der Tabellen)?

Ich weiß nicht, wann die Linie durchgezogen dargestellt wird, also nach welche workbench Logik das geschieht und was gestrichelt oder durchlaufend bedeuten soll.
Die Not NULL Definition erzwingt wie Du schreibst, dass eine Klasse angegeben sein muss. Damit ist es technisch dann wohl so, wie es in der Realität ist und aus meiner Perspektive korrekt. Wie welches Tool das darstellt, ist da m.E. zweitrangig.

Oder anders: Was ist Dir an der Stelle wichtig?
Willst Du ein richtiges Datenmodell?
Willst Du ein hübsches Diagramm?
Willst eine korrekte Darstellung nach UML oder anderen Vorgaben?
 
Primär möchte ich natürlich eine richtige Datenbank, die keine inkonsistenten Daten zulässt. Aber ich möchte das irgendwie auch verstehen, ob ich das mit der durchgezogenen Linie jetzt entweder falsch verstanden habe (Ich habe es mir jetzt aber 6 mal durchgelesen und ich verstehe so) oder ob MySQL Workbench da irgendwie ausschert, was die Syntax angeht. Die Datenbank kriege ich schon hin. Nur möchte ich auch immer wissen was ich tue :)

"ne gestrichelte Beziehungslinie gibt z. B. an, dass beide Entitäten unabhängig voneinander sind, eine durchgezogene Linie symbolisiert abhängige Entitäten." Quelle: • ERM Grundlagen & Beispiele

So steht es überall anders auch.
 
Mmh, nicht schön formuliert. Eine Fremdschlüsseldefinition (schüler.klassenid > klasse.klassenid) ist ja wohl eine Abhängigkeit, ggf. optional, wenn der Fremdschlüssel NULL sein darf. Die Klasse selbst ist da eher unabhängig, sie kann auch ohne oder mit einem Schüler existieren.
Das Problem ist hier vielleicht, dass Deine Grundlagenkurse nicht unbedingt dafür gemacht sind, zu Deinem ausgewählten Tool zu passen.
Mir ist jedenfalls nicht bekannt, dass mySQL und seine Tools einen besonders ausgeprängten Hang zur Standardkonformität haben. Ich würde es eher als Malwerkzeug sehen, nicht als Modellierungswerkzeug.
 
Also heißt, es ist durchaus realistisch, dass ich das korrekt verstanden habe.... Aber es in MySQL Workbench in der Notation einfach anders dargestellt wird?
Mmh, nicht schön formuliert. Eine Fremdschlüsseldefinition (schüler.klassenid > klasse.klassenid) ist ja wohl eine Abhängigkeit, ggf. optional, wenn der Fremdschlüssel NULL sein darf. Die Klasse selbst ist da eher unabhängig, sie kann auch ohne oder mit einem Schüler existieren.
Das Problem ist hier vielleicht, dass Deine Grundlagenkurse nicht unbedingt dafür gemacht sind, zu Deinem ausgewählten Tool zu passen.
Mir ist jedenfalls nicht bekannt, dass mySQL und seine Tools einen besonders ausgeprängten Hang zur Standardkonformität haben. Ich würde es eher als Malwerkzeug sehen, nicht als Modellierungswerkzeug.
 
durchaus realistisch, dass ich das korrekt verstanden habe
Ja, die Modellierung und was sie bewirken soll. Mit den Besonderheiten von workbench kann ich Dir nicht weiterhelfen, würde und werde ich nie benutzen, wenn ich nicht beruflich dazu gezwungen werde.
Zusammenfassung:
Workbench kann man nutzen, muss sich aber über nichts wundern, ebenso mySQL selbst.
Die folgende Beschreibung (der Kurs) hat spezifisch mit Workbench nichts zu tun (gut),
dass beide Entitäten unabhängig voneinander sind, eine durchgezogene Linie symbolisiert abhängige Entitäten.
ich halte sie an der Stelle für etwas unglücklich.
Eine Abhängigkeit gibt es bei einem Fremdschlüssel immer, sie manifestiert sich immer in der Foreign Key Clause* des Table Create Scripts und wird durch nur "Not NULL" modifiziert. Darüber Hinaus ist die Abhängigkeit gerichtet bzw. verschiedener Ausprägung. "beide Entitäten unabhängig voneinander .., .. abhängig" gibt das nicht wieder. Eine Hauptentität (Parent) kann gut ohne Child auskommen, umgekehrt eher nicht.
Unabhängige Entitäten würde ich nur so nennen, wenn sie in einem Diagramm gar nicht verbunden sind (auch nicht indirekt).

Disclaimer: Ich bin kein Dozent oder sowas, die Konventionen für offizielle Darstellungen nach Chen, UML, .. müsste ich selbst nachschlagen.

* Sie manifestiert sich natürlich noch viel mehr im Betrieb und das ist genau das, was man mit guter Modellierung erreichen will. Verletzte Abhängigkeiten werden mit Fehlern beim Einfügen, Löschen oder Ändern von Datensätzen quittiert, so soll es sein. Undefinierte Abhängigkeiten, also gleiche Datenstruktur, gleiche Daten, jedoch fehlende Foreign Key Angaben trotz logischem Zusammenhang führen zu Null Konsequenzen bei Missachtung dieser nun mehr nur gedachten Zusammenhänge.
Das ist sehr wesentlich und wird anfangs oft nicht verstanden oder manchmal absichtlich nicht umgesetzt (aus fragwürdigen Gründen). Die Folge sind nahezu unweigerlich:
1. inkonsistente Daten, 2. die fahrlässige Ignoranz eines Superpower Features, das man mit der Datenbankfunktionalität geschenkt bekommt.
3. aufwändige, teure und unzuverlässige Workaround-Programmierung, wenn man auf 1. nicht wirklich verzichten will.
 
Danke für deine Antwort. Ich verstehe was du sagst (Glaube ich zumindest) und ich denke, ich checke es auch theoretisch. Was ich nicht verstehe, wieso MySQL Workbench dann so gegen die Konventionen arbeitet. Das erschließt sich mir nicht. Ich dachte, ich gucke mir das Ding mal um schnell eine DB zu erstellen. Irgendwie war das dann doch nicht SOO schnell :-D
 
Irgendwie war das dann doch nicht SOO schnell
Egal, das übt und vertieft das Verständnis. :)
Ist nicht unbedingt Zeitverschwendung, wenn man sich aus verschiedenen Perspektiven (und falschen oder unklaren Annahmen) einem Problem bzw. seiner Handhabung nähert. Wenn einem irgendwelche Werkzeuge ständig ein Bein stellen, ist es natürlich nervig.
Und wenn wir schon soweit sind, mySQL als Datenbank zum Lernen ist m.E. nicht die beste Wahl. Postgres ist näher an den Standards, gut dokumentiert und nicht so buggy. Jenseits davon hat es einen Haufen Erweiterungen (nicht Standard), die effiziente und elegante Datenverarbeitung ermöglichen. (Das nur mal so, falls Du nicht bloß einen Schein für den Kurs brauchst.)
 
Werbung:
Zurück
Oben