2016-04-16 12 views
1

Ich versuche eine Tabelle in PostgreSQL zu erstellen, die verhindert, dass Benutzer eine Aktion eingeben, die während einer zuvor eingefügten Aktion Zeit benötigt.Erstellen Sie eine Tabelle mit Datums-/Zeitbereichsbeschränkung, um Überlappungen zu vermeiden

Mein Ziel ist es, ein Krankenhausschema zu erstellen und zu verhindern, dass Benutzer eine Operation hinzufügen, die während des Vorgangs Zeit benötigt, die zuvor im selben Raum ausgeführt wurde (keine Überlappung).

Sagen wir zuerst, ich habe eine Operation im Raum 'a1' hinzugefügt, die zwischen 15:45 und 16:45 Uhr, 15. November, dauert. Dann möchte ich, dass die Datenbank verhindert, dass ich eine Operation im Raum hinzufüge ' a1 'das dauert zwischen 16:00 und 17:00 Uhr, 15. November.

So etwas (nicht funktioniert):

CONSTRAINT operation_un UNIQUE(room, ???datetime???) 
+0

Für welches RDBMS ist das? Bitte fügen Sie ein Tag hinzu, um anzugeben, ob Sie 'mysql',' postgresql', 'sql-server',' oracle' oder 'db2' verwenden - oder etwas ganz anderes. –

Antwort

2

Die Phrase, die Sie für googeln wollen, ist "postgresql-Ausschluss-Beschränkungs".

Es gibt ein Beispiel, das genau das tut, was Sie hier wollen.

http://www.postgresql.org/docs/current/static/rangetypes.html#RANGETYPES-CONSTRAINT

+0

Sehr glatt - wünschte SQL Server hatte eine solche Einschränkung – Clay

+0

SQL Server hat seine eigenen Stärken, aber PostgreSQL hat einige anspruchsvolle Art Unterstützung. –

+0

Sie können etwas ähnliches in SQL Server tun - siehe http://stackoverflow.com/questions/12035747/date-range-overlapping-check-constraint –