veröffentlichung meiner Fragen und bekommene Antworten

Status
Für weitere Antworten geschlossen.
Nein, Constraints gehen nicht tabellenübergreifend. Das gilt z.B. auch bei partitionierten Tabellen. But wait for PG 10 ;-)

Was Du machen könntest wäre z.B. ein TRIGGER, der bei Inser/Update 'feuert' und das prüft.

PS.: gefällt mir aber, was Du Dir so überlegts ;-)
 
Werbung:
Ja, wenn, dann ordentlich xD
Ich glaube nur, dass ich in ein jedem Thema ein Quereinsteiger bin...
Soll heißen, ich beschäftige mich mal ein Monat mit etwas, und dann mache ich die nächsten 2 Monate andere Dinge, und so wie jetzt, komme ich irgendwann darauf zurück, und habe ein wenig Ahnung vom Ganzen!

Also, sollte ich mir Trigger näher ansehen?
 
Zuletzt bearbeitet:
Soda, ich habe weniger gelesen, als durch versuchen ein wenig an Praxis zu gelangen:

Ist eine Trigger-Function dann am Ende eine "Funktion", um möglicherweise die "Endsumme" zu berechnen?
Beispiel: 0,6€/Minute Mietkosten, Zeit von und Zet bis ist vorhanden, man kann das auch mit Daterange berechnen, aber ich (glaube), dass es eigentlich auch auf der Trigger-Function berechenbar ist, im Sinne von irgendwas mit:

On Update "Vermietungsplan"."Zeit bis"
Set "Vermietungsplan"."Kosten" = ("Zeit bis"-"Zeit von")*"Maschinen"."Mietpreis"
?

Die ganze Rechnung auf der rechten Seite hier ist in eine Function einbaubar, und damit bräuchte man nurnoch die Kosten der Function gleichsetzen?

Weil, wenn das funktioniert, bin ich einerseits erstaunt, weil ich ja doch so klug bin, andererseits, weil die PostgreSQL doch mehr bietet, als bisher (von mir ^^) bekannt.
 
Zuletzt bearbeitet:
Ist eine Trigger-Function dann am Ende eine "Funktion", um möglicherweise die "Endsumme" zu berechnen?
Beispiel: 0,6€/Minute Mietkosten, Zeit von und Zet bis ist vorhanden, man kann das auch mit Daterange berechnen, aber ich (glaube), dass es eigentlich auch auf der Trigger-Function berechenbar ist, im Sinne von irgendwas mit:

On Update "Vermietungsplan"."Zeit bis"
Set "Vermietungsplan"."Kosten" = ("Zeit bis"-"Zeit von")*"Maschinen"."Mietpreis"

Eher nicht, das geht besser über einen JOIN bei der Abfrage. Merke: keine Dinge speichern, die auch berechenbar sind.

Brauchen Deine Maschinen aller N Betriebsstunden eine Wartung? Du könntest z.B. beim einfügen einer Vermietung prüfen, ob die nächste Wartung ran ist, via TRIGGER. Falls ja, trägt das der TRIGGER in eine eigene Tabelle ein. Wenn in dieser Tabelle dann die durchgeführte Wartung eingetragen wird, sorgt dort ein TRIGGER wieder dafür, das die "Stunden bis zur Wartung" wieder zurückgesetzt werden. (das könnte ein Feld in der Maschinen-Stammdaten-Tabelle sein, was bei jeder Vermietung aktualisiert wird - per TRIGGER)
 
Ok, mein Gedanke, als Antwort zu deiner Wartungsarbeit:

Ich hätte bei der Tabelle, wo die Maschinen eingetragen sind, welche zur Vermietung angeboten werden mit einem Boolean-Feld ausgestattet, wo man, wenn die Maschine zurzeit nicht in Takt ist, einfach den Haken wegnimmt. Weil ich glaube, man kann bei einer Nähmaschine nicht wirklich (also ja, man kann, aber relativ schwierig) ein jede Maschine zum Pickerl ("Tüff" glaube ich heißt es bei euch) stellen, damit sie eine Prüfvignette bekommt, dass sie eigentlich funktionieren sollte.

Anbei glaube ich, sind elektrische Nähmaschinen selbst "reparierbar", aber danke, dann werde ich wohl was eintragen, wo ein jede Maschine per Trigger alle X-Verwendungsstunden geprüft werden, und natürlich mindestens 1 mal im Jahr.

Und ich glaube, ich verstehe da was falsch, warum sollte ich nichts speichern, was berechenbar ist? Ich glaube, du meinst, dass man das "wo anders" einbauen sollte (die Berechnung also in der Homepage oder so...)?
 
Und ich glaube, ich verstehe da was falsch, warum sollte ich nichts speichern, was berechenbar ist?

Wenn Du z.B. (egal ob in einer oder auf mehrere Tabellen verteil) den Grundpreis, die Menge und auch noch Grundpreis * Menge speicherst, das ist das redundant. Nachteil ist u.a., daß wenn Du den Grundpreis mal änderst, dann der Gesamtpreis falsch ist, da er nicht mehr der logischen Formel genügt.
 
Wäre es (prinzipiell), dass ich hier quasi einen Thread aufmache, in welchem eine gesamte Datenbank (gemeinsam) erstellt wird?

Oder steht irgendsowas in den Richtlinien, dass es nicht erlaubt ist?

Ich würde das natürlich nur als Hobby machcen, und es beschäftigt mich schon eine Weile, und ich will das Thema endlich >erfolgreich< abschließen können. Vielleicht, wenn ich diese eine erstmal fertg habe, kommt ein neuer Thread zwecks irgendeienr anderen Datenbank :D - Ich habe ja Zeit, und meist am Abend eine Idee, die ich aber irgendwie nicht umsetzen kann, aufgrund von fehlendem Know-How :(

Die Erlaubniss darf auch gerne verweigert werden, aufgrund von meiner Person, dass ich irgendwie "dumm" hier im Raum stehe, weil ich wegen jeder kleinen Pingelei herumfragen muss.
 
Naja, ich sag mal so: bei uns würde sowas dann nicht mehr als Support (im Rahmen eines Supportvertrages) durchgehen, sondern als Consulting ...

Ich sag mal so:

gib Dir bitte selber Mühe. Und wenn Du nicht weiter kommst, dann frag halt.
 
Ok, wird gemacht, das neue woran ich scheitere ist das aktive Verstehen, wie man Trigger einsetzen kann.
Ich habe mir bereits mittels googeln beantworten können, was ein "Trgger" macht, es ist etwas das auf die Aktion x ausgelöst wird, ich denke mir nur irgendwie, wie ich diese programmiere, bzw. wo der Unterschied zwischen Event-Trigger und Trigger-Functions ist?

PGAdmin 4 hat eine schöne Oberfläche, nur irgendwie komme ich mit der Erfassung nicht klar, wie das eigentlich funktionieren sollte ^^

Ich denke, es ist auch programmierbar mittels Query Tool (?)
 
Kann mir vl. jemand einen Trigger (Code) schreiben, mit Erklärungen dazu?

Scheitere daran, dass er die üblichen SQL Befehle "nicht aktzeptiert"...

Denke bisher, dass man, um etwas auszulösen, irgendeinen Vergleich aufstellen muss (?), sprich die Mathematischen Zeichen: ">, <, =, /="

Ich arbeite viel alleine, aber mehr durch scheitern, als nachsehen, wies funktionieren sollte. Ich war zu meinen Schulzeiten an sich gut in Englisch, würde mir aber heutzutage lieber eine deutsche Erklärung durchlesen, weil, denke ich, unterbewusst das Verständniss wohl bei deutschen Erklärungen höher sen sollte.

Mir würde (fürs erste) eine Reihe reichen, wie die Zeile, die ich bei PGAdmin reinschreiben kann, aussehen könnte.

Habe mich bisher ein wenig intensiver mit Functions/Procedures beschäftigt, und komme damit schon recht gut zurecht. (Habe bisher 4 Functions/Procedures programmiert, welche die folgende Logik dahinter haben: 2. Potenz, 3. Potenz, 2. Wurzel und 3. Wurzel.

Ich weiß, es würde Jahre dauern, bis ich das alles wirklich engearbeitet habe (Bin momentan dabei, bei den bisherigen Antworten nachzusehen, wie es funktionieren könnte ^^)

Möchte das Ganze aber wenigstens halbwegs unter Kontrolle bringen.

PS: Ich bin weniger der, der in Büchern liest, habe mehr Freude am Try and Error-Phänomen... ist vl. traurig, dem ist jedoch so...

Danke für jede gut gemeinten Post hier ;)
 
Mittels Google (welches auch die Macht besitzt) meinen ersten Trigger eingerichtet, und es ist mir gelungen, automatisch das "Anmeldedatum" einzutragen, wenn der Vorname eingetragen wird.

Ich hoffe, es ist erlaubt, hier auch Leerbücher zu posten:
http://www.postgresql.de/download/start_mit_pg_a5.pdf

Aus dieser PDF-File habe ich Informationen über Trigger (auf Deutsch) und relativ gut erklärt gefunden.

Bin stolz auf mich, und davon überzeugt, dass es "nur" besser werden kann xD

Mag eine "alte" Version sein, aber manche Dinge scheinen zu bleiben...
 
Nachdem ich ein eifriger Schüler bin (haha), und sehr interessiert an der Sache bin (ehrlich), möchte ich mein (momentanes) Problem erläutern:

Die Timerange verstehe ich inzwischen, und ich kann sie auch abrufen, enfach über folgenden Befehl:

select time_subtype_diff_2 ('08:00', '09:00')

Ich habe das diff_2 genannt, weil ich nicht die alte überschreiben wollte, falls ich irgendwie scheitere.

Ich habe folgendes probiert, damit er den Wert nicht in Sekunden, sondern in Minuten ausgibt:
select time_subtype_diff_2 (('08:00', '09:00')/60)

Er meckert hier wegen dem "dividierzeichen" rum, und damit es, falls einer das Ganze nachmachen möchte, nicht auch über diesen Fehler stolpert.
Anbei dokumentiere ich mit, was ich alles mache, und wie ich das Problem löse.

In etwa in diesem Format:
B.: Typen:
B.01.00.: Einen Time-Range-Typ erstellen, welcher die Minuten zählt.

B.01.Code: CREATE TYPE timerange AS RANGE (subtype = time, subtype_diff = time_subtype_diff);

Wäre sehr erfreut, wenn ich ein wenig mit meiner selbst erstellten Datenbank pralen darf xD (Es sind bereits 15 Tabellen erstellt, die ich alle mittels Code geschrieben habe, und ja, habe eien Function mit Trigger reingeschrieben (in eine Tabelle), damit bei den neuen Kunden eingetragen wird, "seit wann", dieser Kunde auch wirklich registriert ist. (Noch nicht in die echte Datenbank eingearbeitet, weil ich 2 auf dem localen Server habe, eine zum probieren/lernen, und die andere wird in die Praxis umgesetzt, falls sie fertig ist xD)

Gerade probiert, es geht auch nicht mittels einer Multiplikation mit 0,0166666666666667 (1/60), also mache ich wohl etwas falsch. sollte ich das in die Function/Procedure einprogrammieren?
 
Ich habe die Funktion ein wenig dividiert, und es funktioniert.
Sprich, immer in der Funktion die Rechnungen machen, niemals wo anders xD

SELECT EXTRACT(EPOCH FROM (((x - y)/60)))

Wie man eine Function/Procedure programmiert, glaube ich, habe ich schonmal geschrieben.

Habe in meinem Beispiel falsch herum geschrieben, sprich ich ziehe von der 1. Spalte die 2. ab, nicht umgekehrt, wie ich es gewollt hätte.
 

Anhänge

  • upload_2017-5-15_13-54-22.png
    upload_2017-5-15_13-54-22.png
    190,4 KB · Aufrufe: 11
Werbung:
Habe de ganze Funktion (Ich glaube, das war eine solche :D) einfach geschmissen, und neu programmiert, nur halt exakt anders herum.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben