この種の問題を数回見たことがありますが、重複しない方法で範囲を保存する最善の方法を決定しようとしています。たとえば、一度に 1 人だけが使用できるある種のリソースをスケジュールする場合などです。私が見た主なものは、次のようなものです。
PERSON ROOM START_TIME END_TIME
Col. Mustard Library 08:00 10:00
Prof. Plum Library 10:00 12:00
たとえば、ミス・スカーレットが図書館を 11:00 から 11:30 まで予約したい場合など、新しいエントリが既存のスケジュールと重複しないようにする最善の方法は何ですか? インライン制約は機能しません。トリガーでこれを簡単に実行できるとは思いません。テーブル内の既存の競合を最初に検索するすべての挿入を処理する手順は?
次に、同時実行の問題を処理する最善の方法は何ですか? ミス・スカーレットが 13:00 から 15:00 まで図書館を希望し、ミセス・ホワイトが 14:00 から 16:00 まで図書館を希望しているとします。(1) の手順では、これらのスケジュールはどちらも受け入れ可能であることがわかりますが、明らかにまとめて考えると、そうではありません。私が考えることができる唯一のことは、テーブルまたはある種のミューテックスの手動ロックです。
上記のテーブル (room, start_time) の適切な主キーは何ですか?