Sich oft wiederholende Vorgänge als Function abspeichern

Kampfgummibaerlie

Datenbank-Guru
Beiträge
735
Ich weiß, dass das Ganze mit Rechenwegen machbar ist, und meine Frage wäre, ob das auch mit Inserts funktionieren würde. (Bin ziemlich davon überzeugt, dass das geht, weil Postgres eine bisher faszinierende Programmiersprache ist)

Bisher habe ich immer ein Insert-Script geöffnet, was glaube ich bisher bereits sehr viel Zeit "gefressen" hat, und ich möchte das simpl in eine Function schreiben, sprich nach dem Motto:

Insert Into_Kunden ('Name', 'Geburtstag', 'Postleitzahl', 'Wohnort', 'Adresse', 'Geschlecht')
ID und Registrierungsdatum füllt sich von selbst aus mittels Auto_Increment (Serial) bzw. Default-Wert.

Ich möchte den Vorgang gerne mit Variablen in eine Funktion integrieren, so ca. nach folgender Anwendungsform:

select Into_Kunden('Ernst', '10.04.2004', '0123', 'TryCity', 'Schlumpfgasse 12', 'männlich')

Into_Kunden wiederum ist in meinem Beispiel der Name der Function, und ein neuer Datensatz wird beim ausführen des oben genannten Codes angelegt.

Ich hoffe, dass ich euch nicht überfordere (zeitmäßig) mit meinen Fragen :/
 
Werbung:
Moin,
ja, das geht. Schneller als ein direkter Insert wird das nicht, es kann aber andere Vorteile haben. So kannst Du damit quasi eine eigene API schaffen - der Zugriff auf die DB und die einzelnen Tabellen erfolgt nur durch Aufrufe dieser Funktionen, der Aufrufer (Programmierer) braucht nicht mehr zu wissen, wie die Tabellen eigentlich aufgebaut sind. Das kann man noch weiter treiben indem man sagt, er hat gar keinen Zugriff mehr auf die Tabellen, nur noch auf die Funktionen (diese müßten dann als SECURITY DEFINER markiert sein. Wenn Du mal wieder bei Zalando einkaufst: die machen das exakt so. Die haben faktisch ihre ganze Applikation als Funktionen in einer PostgreSQL-DB entwickelt.
http://2013.pgconf.de/de/talks/pgconf.de_2013_elefanten_sind_in_mode.pdf

Nachteile: Du bringst mehr Last in die DB und Deine Applikation wird sehr abhängig von der Datenbank. Ich sage das nur, weil ein Teil unserer Kunden z.B. sowas ablehnt, um weiterhin in der Wahl der DB frei zu sein.
 
Also spart das am Ende keine Zeit, ist ok.
Ich denke, wenn die Datenbank erstmal halbwegs fertig ist, werde ich mich mit PHP beschäftigen, und schauen, ob das so machbar ist, wie ich es mir vorstelle:

Ich hätte ja alles in eigene Spalten gegeben, weil ich um ehrlich zu sein, auch mehrere Eingabezellen in die Homepage einbauen wollte.
Aber, ich glaube, dass es generell möglich ist, die definierten variablen einer Funktion auch irgendwie mit einer Eingabezelle zu verbinden.

Ich denke, das würde irgendwie aussehen:
(Konnte HTML mal, PHP nie, habe mir die Basik mal angesehen, aber ja, ... ^^)
EZ-V (Eingabezelle von) = x
EZ-B (Engabezelle bis) = y

Function läuft mittels Timestamprange (y-x), und ich glaube/hoffe, dass man eine einzelne Function einfach "abrufen" kann, und entsprechend in das Feld AZ-K (Anzeigezelle Kosten) dann das ganze irgendwie rechnet mittels ((upper(timestamprange)-lower(timestamprange))/60)*P

P = Preis pro Minute

P werde ich wohl als fixen Wert nehmen, oder alternativ eine Function einbauen, welche nur Mietdaten >= (Preisveränderungsdatum) herausfiltert, und entsprechend nur diese mit dem anderem Wert multipliziert (PÄ = Preisänderung).

Sprich:
((upper(timestamprange)-lower(timestamprange))/60)*PÄ

Oder wäre selbst das ein Schritt zuweit (deiner Meinung nach)?

Ich bin großer Fan von Automatisierung, und möchte es Mutter möglichst einfach machen.

Ich höre oft, dass ich zu kompliziert denke ^^
 
Werbung:
Habe bereits eine neue Tabelle erstellt:

create table Preisveränderungen
( Preisveränderungszeitpunkt Timestamp default current_timestamp,
Neuer_Preis money
)

Kommentar: Wusste vorher nicht, dass es einen current_timestamp gibt.


INSERT INTO public."preisveränderungen"(
neuer_preis)
VALUES ('8€');

um das ganze zu probieren ;)


select *
From preisveränderungen

preisveränderungszeitpunkt | neuer_preis
2017-05-17 09:00:10.795467 |8,00€

Jetzt darf ich eine Function schreiben, welche prüft, ob die Timestamp < lower(timestamprange) wäre ;)

Ich freue mich Tag für Tag, was ich nicht so alles durchdenken kann ^^

Bearbeitung 01:
Da muss ich einen Check einbauen, keine Function ;) - hoffe ich xD
 
Zuletzt bearbeitet:
Zurück
Oben