veröffentlichung meiner Fragen und bekommene Antworten

Status
Für weitere Antworten geschlossen.
Werbung:
Du scheinst ja langsam Spaß am Gerät zu haben ;-)

A: Hatte ich schon immer
B: Ich liebe Herausforderungen, solange sie meisterbar sind
C: Am Gerät ist übertrieben, ich hatte schon immer meinen Spaß am Computer, habe in jungen Jahren (13-15) HTML von großen Schwester gelernt, und seit einem Vorfall habe ich angefangen mit "sololearn.com", und fand wieder Interesse daran.
D: Warum gerade Datenbanken, und nicht irgendwas anderes? Ich bin über OpenOffice von Apache gestoßen, wie ich eine Datenbank aufbauen wollte, und die Interesse hat mich soweit geführt ;)
E: Ich glaube, ich tue mir schwerer dabei, aus 2-3 Metern Entfernung von einem Fernseher zu arbeten, als von einem Notebook (habe ich mir vor kurzem günstig erworben)

Probleme:
Merkfähigkeit ist nicht wirklich top in Schuss, von daher vergesse ich oft, wie was eigentlch ging, und entsprechend notiere ich mit, damit ich nachsehen kann, bzw. war ich schon immer mehr der, der anderen was bieten wollte (Nachhilfe, Unterstützung im privaten Leben, ....)

PostgreSQL (Insbesondere mit PGAdmin) gefällt mir ziemlich gut ;)

Soweit sogut, ich sitze bei einem Problem:
Ich bin ein wenig Lesefaul, und bin eher der, der durch ewiges probieren an Erfahrung gewinnt. Soll heißen, ich schaffe es zurzeit nicht, (ich glaube, dass ich die Function/Procedure richtig geschrieben habe), nicht auf die schnelle mit einem Trigger-Effekt abfeuern kann. Ich würde gerne, wenn man einen neuen Benutzer einträgt, automatisch das "Registrierungsdatum" hineingeschrieben wird.

... Ich trinke mal was ^^
 
Geht ohne TRIGGER, einfach mit Default-Werten:

Code:
test=# create table benutzer(id serial primary key, name text, reg_datum date default current_date);
CREATE TABLE
test=*# insert into benutzer (name) values ('Max Mustermann');
INSERT 0 1
test=*# select * from benutzer;
 id |  name  | reg_datum  
----+----------------+------------
  1 | Max Mustermann | 2017-05-15
(1 Zeile)

Wenn Du in der Applikation wissen willst, welche ID und welches Datum eingetragen wurden:

Code:
test=*# with new_benutzer as (insert into benutzer (name) values ('Lise Lotte') returning *) select * from new_benutzer;
 id |  name  | reg_datum  
----+------------+------------
  2 | Lise Lotte | 2017-05-15
(1 Zeile)

test=*#

Das Prinzip hier nennt wCTE (writeable Common Table Expressions) und ist sehr mächtig.
 
create table Kunden(Kunden_ID Bigserial primary key, Kunden_Name text, Kunden_Registrierungsdatum date default current_date, Kunden_Geburtstag date, Kunden_Postleitzahl text, Kunden_Wohnort text, Kunden_Adresse text, Kunden_Geschlecht text)

Jop, habe einmal einen insert gemacht, außer die 2 vordefinierten Dinger (ID und Registrierungsdatum), und jap, jetzt füllen sich beide automatisch aus :D

:) Ich glaube, ich bleibe auch nur so stark dabei, weil ich deine Unterstützung habe ;)

Bearbeitet:
Nächste Frage:
Kann man auch den Wert von Euros als default einstellen?
irgendwas wie "Kosten money default *1€" ? probiere ich mal gleich :D

brb

Gut, funktioniert nicht ;) kann man wohl keine Multiplikationen in den Default legen

Anbei eine Frage:
Kannst du mir sagen, welche deiner 2 Codes sehr mächtig ist? den 2. durchblicke ich nicht ganz auf den ersten Blick ^^
 
Zuletzt bearbeitet:
Anbei gleich die nächste Frage:

Ich habe mir eine Liste gemacht, was ich alles gerne in der Datenbank hätte, und der nächste Punkt wäre der hier:

C.02.: Endabrechnung berechnen (Wieviel Geld macht es am Ende aus, wenn eine Person eine gewisse Zeit gemietet hat)
C.02.00.: Die Time-Range zwischen "Vermietungs_Startuhrzeit" und "Vermietungs_Enduhrzeit" berechnen,
und in die entsprechende Spalte "Vermietungs_Kosten" und "Vermietungs_Dauer" eintragen

Soll heißen, ich berechne mir ja die Timediff aus, und würde die gerne mit dem "Minuten_Preis", bzw. durch 5 dividieren und mit dem "5 Minuten_Preis" multiplizieren, und abrunden.

Würde ich auch hier gerne mit einem Trigger verbinden, dass das passiert, nach der Eingabe in "Miete_bis" Spalte.

Die Function sollte irgendwie aussehen:
(Datedif/5)*3
(10 Minuten würden 6€ kosten, aber ich glaube, es wäre abschreckend, wenn direkt 12€ verlangt werden, wenn eine Person 14 Minuten da war)

Trigger kenne ich mich weniger aus, die habe ich gestern erst wirklich verstanden, wie man sie programmiert (was sie tun, war schon länger klar)

Anbei ein Kommentar:
59 Clicks to go, dann hat mein Thread 1000 xD
 
Zuletzt bearbeitet:
Aus einem TSRANGE

Code:
test=*> select '[2017-05-15 10:00:00,2017-05-15 15:00:00)'::tsrange;
  tsrange   
-----------------------------------------------
 ["2017-05-15 10:00:00","2017-05-15 15:00:00")
(1 Zeile)

kannst Du die Zeitdauer (Interval) berechnen:

Code:
test=*> select upper( '[2017-05-15 10:00:00,2017-05-15 15:00:00)'::tsrange) - lower( '[2017-05-15 10:00:00,2017-05-15 15:00:00)'::tsrange);
 ?column?
----------
 05:00:00
(1 Zeile)

Aus einem Interval kannst Du auch die Zeit in Minuten berechnen:

Code:
test=*> select extract(epoch from '05:00:00'::interval)/60;
 ?column?
----------
  300
(1 Zeile)


Du solltest vermeiden, aus berechenbaren Dingen (der Vermietungsdauer als TIMERANGE) die Dauer extra zu speichern, weil die ist ja jederzeit neu berechenbar. Auch der Preis ist dann berechenbar (ich setze voraus, dieser bleibt konstant).

PS.: mache bitte bei neuen Themen hier auch ein neues Thema auf. Das wird allmählich unübersichtlich...
 
Ich glaube, ich verstehe, was du meinst, aber kann es nicht wirklich ausdrücken ^^

Kurz und simpl: Lieber alles (wenn möglich) in einer Function/Procedure machen, anstatt die Daten zwischenspeichern und mit diesen rechnen?

Ich hoffe, dass man eine TimeRange (denke ich, weil die Range hat ja an sich 2 Werte) dann in einer Homepage auf 2 Eingabefenster aufteilen?

Weil, ich glaube, meine Mutter (ist ehrlich gesagt älter als du ^^) würde sich nicht mit "Coding" anfreunden wollen, dass sie dann Dinge schreibt ala:
Select TR(Von (08:00), Bis (09:00)) ....

Ich weiß nicht, ob das bei ein jedem "Kind" so geht, dass sie sich bemühen, es den Eltern möglichst einfach zu machen.

Ich habe es nie gelernt, und habe das meiste über YouTube erlernt, weil ich Datenbanken für sehr interessant fand.
 
Werbung:
Kurz und simpl: Lieber alles (wenn möglich) in einer Function/Procedure machen, anstatt die Daten zwischenspeichern und mit diesen rechnen?

So in etwa. Vermeide, Dinge doppelt zu speichern. Start, Ende und Dauer zuu speichern ist falsch, weil aus je 2 dieser Werte der dritte berechenbar ist.

Bitte mache bei weiteren Fragen je einen neuen Thread auf. Das liest sonst hier keiner mehr - ich auch nicht.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben