Automatisches Update einer Id in Tabelle

Hallo liebes Forum,

ich suche eine Möglichkeit für ein automatisiertes Update von einer Tabelle.

Konkret: Ich habe eine Tabelle “restaurant” mit einer Id (Primärschlüssel) und einer Namenspalte.
Zusätzlich gibt es eine zweite Tabelle “restuarant_oeffnungszeiten”

Diese enthält auch eine Id (Fremdschlüssel zur Id von “restaurant”) sowie verschiedene Attribute.

Wenn ich nun über ein PHP-Skript ein neues Restaurant-Objekt anlege:

INSERT INTO restaurant (name) VALUES (’$objekt_name’);


…dann wird die Id aus der Tabelle “restaurant” automatisch hochgezählt ( weil ich eine Sequenz erstellt
habe, und mit “nextval(‘cms_kneipe_objekt_id_seq’::regclass)” den Wert hochzähle.


Ich hatte gehofft, dass auch der Fremdschlüssel in “restaurant_oeffnungszeiten” automatisch hochgezählt wird (also
die Id dort automatisch denselben Wert haben würde wie in “restaurant”, da ich den Cascade-Befehl beim Anlagen des Fremdschlüssels genutzt habe)
Klappt aber nicht.

Auch ein currval(‘cms_kneipe_objekt_id_seq’::regclass) in der Id-Spalte bei “cms_oeffnungszeiten”
bringt kein automatisches Update der Id.

Ich könnte natürlich das Problem durch einen weiteren INSERT-Befehl lösen, möchte es aber gerne eleganter abwickeln.
Hat jemand eine Idee?
Danke im Voraus, Kai

Moment. Warum willst Du das? Der Fremdschlüssel mit der Nummer 1 verweist auf einen bestimmten datensatz in einer anderen Tabelle. Warum willst Du, wenn dort ein neuer datensatz reinkommt, nun dieser Fremdschlüssel woanders hin verweist?

Oder versteh ich Dich grad komplett falsch?

Andreas

Das CASCADE beim UPDATE betrifft nur die Änderung eines Primary-Key und nicht das INSERT …

aber wie AK weiss ich nicht so recht worauf du hinaus willst … also warum sollen die Detail-Tabellen nun ploetzlich auf den neuen Satz verweisen ?

Aber was solls - du koenntest natuerlich so vorgehen:

  1. du erzeugst eine Kopie des existierenden “restaurant” Satzes (also einen neuen Datensatz mit “alten” infos)
    (hier koenntest du aber evtl probleme mit anderen unique-constraints bekommen - z.B. restaurant-name oder sowas - wenn dass der fall ist muesstest du diesen schritt nach dem 2. machen und die infromationen fuer die kopie irgendwo “merken”)
  2. mit einem weiteren neuen restaurant-PK (nextval) dann den Primary-Key des bereits existierenden “restaurant” Datensatz updaten -> dann muesste das CASCADE in den Fremdschluesseln greifen - UND alle weiteren Felder dieses Satzes mit neuen Informationen aktualisieren (sollte alles in ein UPDATE passen)

Hallo allerseits, danke erstmal, ich habe mich vielleicht etwas schwammig ausgedrückt.

Was ich will ist:

  1. Ich lege ein neues Objekt an in der Tabelle “restaurant”
    z.B. “Grüne Gans”, die Id (z.B. 5) wird automatisch hochgezählt (soweit klappt es auch).

Nun möchte ich aber dass automatisch dieselbe Id auch in die Tabelle “restaurant_oeffnungszeiten” geschrieben wird.

Hier soll dann stehen:
Id=5, Montag=NULL, Dienstag=NULL etc.

…und das klappt noch nicht. Die Id in “restaurant_oeffnungszeiten” soll dann der Fremdschlüssel sein und eben immer denselben Wert haben wie die Id in “restaurant”, hmmmmm…ich suche da eine Lösung die im System sehr performant ist. Vielleicht mit Triggern arbeiten?

wie soll das automatisch gehen ?

du musst dem server schon sagen welche oeffnungszeiten-saetze auf welche restaurants verweisen sollen

d.h - du fuegst ein restaurant ein - und erhaelst eine id …

dann erzeugst du fuer das restaurant oeffnungszeiten und setzt deren restaurant-referenz auf die obige id

Ahhh, also erst einmal quasi ein Default setzen. Ja, mit einem TRIGGER macht man sowas.

Andreas

Alles klar, danke!
Das werd ich dann mal ausprobieren.