Ich arbeite an einer Planungsanwendung und bin auf folgendes Problem gestoßen.
Ich habe das folgende Schema, das in ActiveRecord-Begriffen dargestellt werden kann:
Jede Ressource hat mehrere Ereignisse, zu denen sie gehört.
Jedes Ereignis enthält verschiedene Ressourcen und deckt mehrere Zeiträume ab.
Jede Zeitspanne ist einem Ereignis zugeordnet und hat drei Merkmale: Tag, Startzeit und Endzeit.
Ich möchte die folgenden Einschränkungen auf meine Daten anwenden:
( A ) stellt sicher, dass Zeitspannen wohlgeformt sind, ( B ) dass sich Ereignisse nicht überschneiden und ( C ) dass Ressourcen nicht überplant werden.
Laut dieser Veröffentlichung erzwinge ich diese Einschränkungen derzeit auf der Anwendungsebene, aber ich habe mich gefragt, ob ich diese Einschränkungen zu Selbstlernzwecken in der Datenbankebene platzieren könnte.
Ist es möglich, diese Einschränkungen in SQL anzugeben?
Ich habe das folgende Schema, das in ActiveRecord-Begriffen dargestellt werden kann:
Jede Ressource hat mehrere Ereignisse, zu denen sie gehört.
Jedes Ereignis enthält verschiedene Ressourcen und deckt mehrere Zeiträume ab.
Jede Zeitspanne ist einem Ereignis zugeordnet und hat drei Merkmale: Tag, Startzeit und Endzeit.
Ich möchte die folgenden Einschränkungen auf meine Daten anwenden:
SQL:
A. For each timespan, timespan.start-time ≤ timespan.end-time
B. For each event, for each t_a, t_b ∈ TIMESPANS(event),
either t_a = t_b
or t_a.day ≠ t_b.day
or t_a.end-time ≤ t_b.start-time
or t_a.start-time ≥ t_b.end-time
C. For each resource, for each e_a, e_b ∈ EVENTS(resource),
either e_a = e_b
or for each t_a ∈ TIMESPANS(e_a) and t_b ∈ TIMESPANS(e_b),
either t_a.day ≠ t_b.day
or t_a.end-time ≤ t_b.start-time
or t_a.start-time ≥ t_b.end-time
( A ) stellt sicher, dass Zeitspannen wohlgeformt sind, ( B ) dass sich Ereignisse nicht überschneiden und ( C ) dass Ressourcen nicht überplant werden.
Laut dieser Veröffentlichung erzwinge ich diese Einschränkungen derzeit auf der Anwendungsebene, aber ich habe mich gefragt, ob ich diese Einschränkungen zu Selbstlernzwecken in der Datenbankebene platzieren könnte.
Ist es möglich, diese Einschränkungen in SQL anzugeben?