SQL Data constraints

vish234

Mitglied
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:

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?
 

KonradN

Super-Moderator
Mitarbeiter
Ja, das kann man auch in SQL machen. Die Datenbanken bieten dazu z.B. Trigger. Du hast dann ein Trigger before insert und before update. In diesen Triggern prüfst Du die Bedingungen und wenn die nicht eingehalten sind, dann wirfst Du einen entsprechenden Error.

Dazu dann aber auch die jeweilige Dokumentation der Datenbank lesen. MS SQL Server hat z.B. RAISERROR und da muss dann auch eine severity angegeben werden die bestimmte Dedeutungen haben kann (20-25 wäre z.B. Fatal was sogar die Clientverbindung abbrechen würde und ins Application Log des SQL Servers loggen würde).
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben