予約システムを作成します。このシステムには、定義された期間内に人を満たす能力が限られている人がいます。例えば。人Aは、日曜日の8時から12時の間に最大で8人の人と会うことができます。mySQLデータベース挿入の同時実行性を処理するための論理制約の管理
私のデータベースには、これに関する2つのテーブルがあります。Timings
は事前定義されたスケジュールを示し、Bookings
は固定された予約を示しています。 これらのテーブルは以下のように定義されています。私は、新しい会議を予約するつもりだときに指定したタイミングに関連Bookings
テーブルの行数は、新しい許可する能力よりも小さい場合ので、私は確認する必要があり
CREATE TABLE IF NOT EXISTS `Timings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`day` varchar(100) COLLATE utf8_persian_ci NOT NULL,
`start_time` int(11) NOT NULL,
`end_time` int(11) NOT NULL,
`capacity` int(11) NOT NULL,
`personFK` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_person_timing` (`personFK`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=12 ;
CREATE TABLE IF NOT EXISTS `Bookings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) COLLATE utf8_persian_ci NOT NULL,
`order` int(11) NOT NULL,
`booking_code` varchar(100) COLLATE utf8_persian_ci NOT NULL,
`timingFK` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_booking_timing` (`timingFK`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=1 ;
予約。
これは必要条件ですが、同時実行が発生する場合は十分ではありません。 最後に利用可能な予約のためにcount of (timings where timingFK=XXX)< timing.capacity
をチェックすると、最後の予約がまだ利用可能であったときに2人が同時に予約することができます。私は新しい予約の挿入中に2人が最後の左の位置を予約するのを避けるためにセマフォのようなものを実装する方法を知りたいですか?