Ein Problem sehe ich auch noch, was passiert wenn Kategorien gelöscht oder ersetzt werden. Da die Buchung ja Kategorien zugeordnet ist.
Die löscht du nicht im Sinne von DELETE FROM ... sondern indem du ein Markerfeld setzt das eine Kategorie als gelöscht markiert. Auswählbar/sichtbar ist sie dann nicht mehr für neue Datensätze, wird aber noch (üblicherweise ausgegraut) in bestehenden Datensätzen angezeigt.