Hallo liebes Forum,
mein Datenbankentwurf neigt sich dem Ende. Ich habe nun noch folgende Frage:
Ich hate ja eine Tabelle “cms_restaurant”. Wenn dort Objekte angelegt werden und neue objekt_id vergeben wird,
dann sollen automatisch auch gleichzeitig in den Tabellen “cms_restaurant_oeffnungszeiten”, “cms_restaurant_grunddaten”
und “cms_restaurant_bilder” die entsprechende Spalte mit derselben objekt_id aufgefüllt werden.
Prinzipiell klappt das mit folgenden Möglichkeiten auch ganz gut:
1.Rule anlegen
CREATE RULE einfuegen_cms_kneipe_untertabellen AS ON INSERT TO cms_kneipe Do
(INSERT INTO cms_kneipe_oeffnungszeiten (objekt_id) VALUES
(currval('cms_kneipe_objekt_id_seq'::regclass));INSERT INTO cms_kneipe_grunddaten
(objekt_id) VALUES (currval('cms_kneipe_objekt_id_seq'::regclass));
INSERT INTO cms_kneipe_bilder (objekt_id) VALUES (currval('cms_kneipe_objekt_id_seq'::regclass)));
- oder aber:
Funktion schreiben:
CREATE FUNCTION einfuegen_cms_kneipe_untertabellen()
RETURNS VOID
AS 'INSERT INTO cms_kneipe_oeffnungszeiten (objekt_id) VALUES (currval(''cms_kneipe_objekt_id_seq''::regclass));'
LANGUAGE 'sql';
…und dann mittels
INSERT INTO cms_kneipe (name) VALUES (NULL) ;
SELECT einfuegen_cms_kneipe_untertabellen();
…aufrufen.
- Es würde natürlich auch gehen ein Trigger zu definieren, der dann eine Funktion aufruft.
Ich frage mich nun: Was davon ist das performanteste?
Sind Regeln schneller als Funktionen?
Oder ist ein Trigger schneller der dann auf eine Funktion zurückgreift?
Wie kann ich den die Performanz messen?
Es geht mir letztlich um den Speed in der Anwendung.
Beste Grüße, Kai