SQLでトリガまたは制約を作成するタスクがあります。トリガは、新しいイベントがスケジュールに収まるかどうかをチェックすることを想定しています。同時にイベントは発生しません。属性は、イベントの日付、時間、および長さです。私の考えは、新しいエントリの時間+長さでイベントの時間+長さの間隔値をチェックすることです。重複すると、例外が発生します。私はそれを実装する方法を本当に知らない。イベント制約のSQLタイムスタンプ
0
A
答えて
0
Postgresでは、exclusion constraintで簡単にこれを行うことができ、トリガーは必要ありません。
create table event
(
id serial primary key,
event_name varchar(100),
event_start timestamp,
duration interval
);
その後、あなたは次の制約を使用して、重複イベントを防ぐことができます:あなたのテーブルを想定し
は、このようなものになります
alter table event
add constraint no_overlapping_events
exclude using gist (tsrange(event_start, event_start + duration) with &&);
を制約定義におけるtsrange()
を効率的にすることができtimestamp rangeを作成しますオーバーラップする行に対して比較されます。
次の二つの挿入が成功します:
insert into event (event_name, event_start, duration)
values ('First', timestamp '2017-10-16 10:00:00', interval '2' hour);
insert into event (event_start, duration)
values ('Second', timestamp '2017-10-16 12:00:00', interval '4' hour);
イベントは「第3」のイベント「第二」と重複すると、次の挿入は失敗します。ただし:
insert into event (event_start, duration)
values ('Third', timestamp '2017-10-16 12:00:00', interval '1' hour);
+0
これを関数に組み込み、トリガを使用する方法ですか?アリーナと場所を含める。 – Lulle
関連する問題
- 1. Fullcalendarイベントの制約
- 2. SQL Server - 制約
- 3. SQLクロステーブル制約が
- 4. DB2 SQLチェック制約
- 5. SQLエラー - ユニーク制約
- 6. SQLドロップ既定の制約
- 7. SQLの外部キー制約
- 8. 参照テーブルのSQL制約
- 9. SQLの制約MINVALUE/MAXVALUE?
- 10. チェックSQLの制約が
- 11. SQL制約の問題
- 12. SQL Serverのユニーク制約
- 13. SQL Serverのチェック制約ロジック
- 14. Oracle Sqlのチェック制約
- 15. sqlの一意制約
- 16. チェック制約内のSQLサブクエリ
- 17. SQL Serverの遅延制約
- 18. SQL条件の制約
- 19. SQL行変更の制約
- 20. SQLの制約や条件
- 21. SQL Serverの制約が
- 22. SQLのunixタイムスタンプを制限する
- 23. SQL制約複数テーブル
- 24. SQL Server 2012 - チェック制約
- 25. 複合ユニーク制約SQL
- 26. SQL複雑なユニーク制約
- 27. UPDATEのSQL NULL制約のみ
- 28. 複数のテーブルのSQLチェック制約
- 29. SQLサーバーの文字列の制約
- 30. のOracle SQL制約をチェック!=他のテーブル
我々はpostgresのを使用しています。 – Lulle