Gestern wurde unter Anderem die Engine der MySQL Tabellen von MyISAM zu InnoDB gewechselt um die Transaktionssicherheit zu gewährleisten. Wenn man im System eine Buchung speichert, dann werden aktuell die Daten in 3 Tabellen gespeichert:
- Die Buchung selbst mit ID, Gast ID, Angebots ID, Mietanfang und -ende usw.
- Die Zahlungen der Buchung, da man eine Buchung in mehrere Zahlungen bezahlen kann.
- Die gebuchten Zusatzleistungen (Endreinigung, Fahrrad, Kinderbett etc.). Jede Zusatzleistung bekommt in der Tabelle “bm_booking_addprice” eine eigene Zeile. Mit der Anzahl von Zeit- und Mietereinheiten (dazu mehr ein anderes mal).
So sieht beispielsweise die Methode zur Speicherung einer Buchung, wobei dies noch keine Endversion ist:
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public function save()
{
$db = BMR::getDb();
$db->beginTransaction();
try {
$this->id = $this->storage->create($this->data);
$this->saveAddp();
$this->savePayments();
$db->commit();
}
catch (Exception $e) {
$db->rollBack();
throw $e;
}
return $this->id;
}
|
Was hier passiert – ist klar. Es wird innerhalb von “try” versucht alle SQL-Befehle auszuführen. Sollte eine Anweisung fehlschlagen, werden die anderen zurückgenommen und eine Fehlermeldung wird angezeigt. Ähnliches passiert während der Speicherung von Objekten und Angeboten.