Hallo Steffen,
- Kann ich das irgendwie in der DB mit Contraints absichern?
Ja. Mit einem (relativ einfachen) BEFORE INSERT
- bzw BEFORE UPDATE
-Trigger.
(2) Wie kann ich möglichst effizient prüfen, dass es kein Überschneidungen gibt?
SELECT EXISTS(SELECT id FROM entries b WHERE a.start_date BETWEEN b.start_date AND b.end_date OR a.end_date BETWEEN b.start_date AND b.end_date);
Das EXITS()
mit dem Subquery bricht bei der ersten gefundenen Stelle ab, es wird gar nicht erst ein grosses Result-Set gebildet und gibt ein BOOLEAN
zurück.
LG,
CK