1:n/1:1 Beziehung und Update

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: 1:n/1:1 Beziehung und Update

Beitrag von juetho »

Ebenfalls hallo,
:Sleepy: hat geschrieben:Beide haben jeweils das Attribut CDTitel (wobei es bei der CD der Primärschlüssel ist).
Das muss als falsch bezeichnet werden. Es gibt niemals einen Grund dafür, dass eine VARCHAR-Spalte zum Primärschlüssel wird. Fast immer wird dafür eine Spalte vom Typ GUID oder vom Typ INTEGER (vorzugsweise als Auto-Wert) gewählt.
1. Kann man daraus irgendwie eine 1:1 Beziehung machen?
Das dürfte nur dann möglich sein, wenn das betreffende Feld (Spalte, Attribut) auch in der Tabelle Lied den Primärschlüssel darstellt. Dann wird Base das vermutlich von sich aus als 1:1-Beziehung anzeigen.
2. Nun hätte ich gedacht, dass wenn ich den Primärschlüssel in meiner Klasse CD ändere, auch automatisch das Attribut in Lied geändert wird.
Nein, das geht nicht. Jede Tabellendefinition steht für sich. Die Beziehungen bauen darauf auf. Eine Beziehung kann nur dann definiert werden, wenn die beteiligten Spalten vom Typ her zusammenpassen (z.B. INTEGER mit INTEGER, CHAR(n) mit CHAR(n)) oder zumindest hinreichend ähnlich sind.
Stattdessen bekomme ich eine Fehlermeldung, dass der Datensatz nicht geändert werden kann, weil ja das Attribut auch in Lied verwendet wird. Wie funktioniert also das ändern?
Als "Datensatz" ist in diesem Fall die Beziehung gemeint. (Die wird intern in einer Systemtabelle Relationen gespeichert.)
Eigentlich kann sie überhaupt nicht geändert werden: Die vorhandene Beziehung muss gelöscht werden; dann können die Spalten geändert werden; dann kann die Beziehung neu angelegt werden.

Ich verstehe sowieso nicht, wieso du bei den Tabellen CD und Lied eine 1:1-Beziehung anstrebst. Eine CD enthält fast immer mehrere Lieder; also ist zwangsläufig nur eine 1:n-Beziehung möglich (eine CD mit n Liedern). Vielleicht könntest du dich mit der Einführung in SQL befassen.

Viel Erfolg! Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: 1:n/1:1 Beziehung und Update

Beitrag von RobertG »

Hallo Sleepy,
:Sleepy: hat geschrieben: Ich bin gerade dabei mich mit den Relationen vertraut zu machen. Ich habe also zu Testzwecken zwei Tabellen angelegt, eine heißt CD, die andere LIED. Beide haben jeweils das Attribut CDTitel (wobei es bei der CD der Primärschlüssel ist). Ich hab da jetzt in der Beziehungsansicht eine Linie hingezeichnet und Office hat daraus eine 1:n Beziehung gemacht.
Base kann daraus nichts anderes schließen. In einer Tabelle ist, wenn auch etwas unglücklich wohl als Varchar (wie Jürgen anmerkt), ein CDTitel verzeichnet. In der anderen Tabelle ist dies ein Fremdschlüssel. In der CD-Tabelle kann der Primärschlüssel nur einmal vorkommen, in der Tabelle "Lied" aber mehrmals - ansonsten hättest Du gar keine zwei Tabellen benötigt. Deshalb hat ja die Tabelle "Lied" einen separaten "Primärschlüssel.
:Sleepy: hat geschrieben: 2. Nun hätte ich gedacht, dass wenn ich den Primärschlüssel in meiner Klasse CD ändere, auch automatisch das Attribut in Lied geändert wird. Stattdessen bekomme ich eine Fehlermeldung, dass der Datensatz nicht geändert werden kann, weil ja das Attribut auch in Lied verwendet wird. Wie funktioniert also das ändern?
Ich nehme an, dass Du nicht das Ändern der Tabelle selbst meinst, sondern z.B. die Änderung eines "CDTitel" (weil Du z.B. den Titel falsch geschrieben hast). Dazu musst Du in Extras → Beziehungen mit einem rechten Mausklick auf der Verbindungslinie die Relationen bearbeiten. Wählst Du hier "kask. Update", dann wird bei einer Änderung des Inhaltes des Primärschlüssels "CDTitel" dieser auch in der anderen Tabelle angepasst. Wählst Du auch noch "kask. Löschen", dann wird beim Löschen des CDTitel auch jeder Datensatz der Tabelle "Lied" entfernt, der damit verbunden ist.

Gruß

Robert
Antworten