2016-06-19 11 views
0

Also bedenken Sie dies: Ich habe zwei Tabellen, erstens "Maschinen" und zweitens "Mieten". Ich habe eine boolesche Spalte in Maschinen mit dem Namen "inRental", die 0 ist, wenn die Maschine nicht gemietet wird, und 1, wenn es ist. Ich habe auch boolean Spalte in den Mieten genannt "beendete", die 0 ist, wenn Maschine noch in der Miete ist und 1 wenn Miete beendet ist (ich lösche nicht Mieteinträge, weil ich Geschichte der Mieten verfolgen möchte). Also, was ich will ist, erhöhen oder setzen Sie die Spalte 'machines.inRental' auf 1, wenn ein neuer Mieteintrag für diese Maschine in 'Mieten' eingefügt wird. Zum Beispiel, wenn ich schaffen Neuvermietung ich tun:Inkrementieren/Dekrementieren Spalte beim Einfügen oder Aktualisieren in einer anderen Tabelle

INSERT INTO rentals VALUES (0,:machineID,0) 

Wenn dies geschieht Ich möchte:

UPDATE machines SET inRental=1 WHERE MachineID=:machineID 

Ähnliche ich will, wenn Miete beendet ist:

UPDATE rentals SET finished=1 WHERE MachineID=:machineID 

und

UPDATE machines SET inRental=0 WHERE MachineID=:machineID 

Tabellen sind wie folgt:

RentalID MachineID finished ... 
..................................... 
1   5   1     
2   6   1     
3   7   0      


MachineID inRental ... 
......................... 
5   0        
6   0        
7   1         

Ich denke, das ist mit Trigger erreicht, aber wie? Ich habe auch gehört, dass Auslöser schlecht sind und es besser ist, sie zu vermeiden. Gibt es einen besseren Weg? Ich weiß, dass es vielleicht aussieht, dass die Spalte inRental redundant ist und ich JOINS einfach machen könnte, aber ich benutze sehr oft Tabellen 'Maschinen' in Unterabfragen mit anderen Tabellen und ich finde es ein wenig ineffektiv und unordentlich, JOINs zu machen Unterabfragen, oder nicht?

+0

Das ist ein seltsames Design, um es gelinde auszudrücken. Ich hätte eine StartDate und EndDate Spalten in der Vermietung Tabelle und wenn das aktuelle Datum nicht in den Bereich der Vertretung ich weiß, dass die Maschine nicht vermietet ist. –

+0

Ich habe StartDate und EndDate, aber wenn ich neue Miete eingeben EndDate ist nur näherungsweise, da der Kunde es für einen längeren Zeitraum haben kann (wir mieten Baumaschinen und Mietzeiträume sind nicht zu Betteln fixiert). Jedenfalls könnte ich EndDates inkrementieren oder es einfach leer lassen und wissen, dass es im Verleih ist. Aber irgendwie leer zu bleiben, ist keine Option, da ich eine Annäherung an EndDate möchte. Auf diese Weise kann mich die Anwendung erinnern/mich vor einer Vermietung warnen, die über einen angenäherten Zeitraum hinausgeht. Ich komplexere Dinge ein bisschen, aber so brauchen wir es. –

+0

Dann haben Sie zwei Enddaten: eines für die Approximation und ein anderes (für Jahr 3000), das dazu dient zu wissen, ob die Maschine noch im Verleih ist. – trincot

Antwort