Hi,
und zwar stelle ich mir gerade folgende Frage.
Sagen wir ich habe eine Relation person mit Personalnummer, Name und
Nachname
und dazu eine Relation Arbeitet bei mit Personalnummer und Abteilung.
Jetz möchte ich gerne, wenn ich die Personalnummer in der Relation
person ändere, dass sich das auch automatisch in der Arbeitet Relation
ändert.
Ich weiß zwar wie ich die z.b. über einen Schlüssel in Relation bringen
kann, aber nicht wie ich die Änderung in beiden vollziehe.
Es geht hier um Oracle SQL.
Danke
Also diese relation ist käse
was machst du wenn zwei arbeitgeber das gleiche nummernsystem verwenden
und plötzlich zwei personen die gleiche personalnummer haben
ich würds so machen
Tablle Personen
SID Name Vorname
Tablle Arbeitet für
SID Personen_UID Personalnummer Unternehmen_UID
Tabelle Arbeitgeber
SID Unternehmen
So kannst du Tabellen für mehrere Sachen verwenden und bist nicht zu
spezifisch und flexibel was du noch in Arbeitet für informationen
hinzufügst
so können auch personen für mehrer unternemen arbeiten und verschiedene
personalnummern haben
Nene es geht hier nicht um ein echtes System, sonder um ein beispiel wie
das gehen sollte.
Ich habe jetzt was gefunden "On Update Cascade"
On Delete Cascade geht eins A, aber bei On Update Cascade meint er
Missing Keyword?
mikeii schrieb:> Nene es geht hier nicht um ein echtes System, sonder um ein beispiel wie> das gehen sollte.
Also um Hausaufgaben. Niemand nimmt $$$$$$ in die Hand, nur um mal mit
Oracle spielen zu können, wenn es fast jede andere SQL-Datenbank genauso
tun würde.
Zum Thema: "on update cascade" ist genau das, was du brauchst. Wenn du
eine Fehlermeldung kriegst, hast du dich vermutlich vertippt.
Aber um das genau zu sagen, müssen wir exakt wissen, was du eingetippt
hast, und was die Datenbank darauf geantwortet hat.
Ja Hausaufgaben ist gut gesagt, eher Vorbereitung auf die Prüfungen
CREATE TABLE DJ(DJName Varchar(10),Stundenlohn Number,CONSTRAINT DJ_pk
PRIMARY KEY (DJName));
CREATE TABLE arbeitet(DJName Varchar(10),Name Varchar(10),Adresse
Varchar(10),Stunden Number);
ALTER TABLE arbeitet ADD CONSTRAINT arbeitet_fk FOREIGN KEY (DJName)
REFERENCES DJ(DJName) ON UPDATE CASCADE;
hab gerade gelesen, dass es ON UPDATE CASCADE gar nicht bei Oracle gibt,
aber das steht sogar so in unserem Script drin, welches sich auf Oracle
bezieht ...
Ich hab doch den DJName als Primärschlüssel und möchte den in arbeitet
als Fremdschlüssel. Das geht auch ohne Probleme auch mit ON DELETE
CASCADE, aber OD UPDATE CASCADE geht hier nicht. Und ich find keine
Lösung dazu wie ich das anderst machen kann.
Ich such mal weiter
mikeii schrieb:> hab gerade gelesen, dass es ON UPDATE CASCADE gar nicht bei Oracle gibt,> aber das steht sogar so in unserem Script drin, welches sich auf Oracle> bezieht ...
Naja, es ist halt mehr oder weniger Standard-SQL.
Oracle ist eher der Meinung, dass sich Primärschlüssel in Tabellen nicht
ändern sollten, deshalb gibt's das da nicht.
Lösungsweg 1 (unschön): Trigger "onUpdate" auf die DJ-Tabelle, manuell
das "on update cascade" nachrüsten.
Lösungsweg 2: andere Datenbank verwenden.
Lösungsweg 3: der DJ-Tabelle einen neuen Primärschlüssel verpassen (int
würde ich nehmen, mit sequence zum incrementieren)
Diesen verknüpfen.
Beim Auslesen der "arbeitet"-Tabelle per Subselect oder Join den DJName
mit rausholen. evtl. gleich eine View hierfür anlegen.
Das ganze ändern in zwei Tabellen würde ich inkl Kontrolllesen nach
Update in eine Transaction packen.
Begin transaction
update table1
update table2
lese table1 und schau nach ob es passt
lese table2 ob es passt
passen beide? Schliess die trannsaction sauber ab
passt es nicht: rollback transaction
End transaction
so funktioniert das unter jeder transaction fähigen DB, nicht nur unter
hOracle.