У меня есть следующая настройка таблицы:
CREATE TABLE IF NOT EXISTS `appointment` (
`idappointment` int(11) NOT NULL AUTO_INCREMENT,
`appdate` datetime NOT NULL,
`appnote` varchar(255) DEFAULT 'Please enter a relevant note',
`chair_idchair` int(11) NOT NULL,
PRIMARY KEY (`idappointment`,`chair_idchair`),
KEY `fk_appointment_chair_idx` (`chair_idchair`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;
Типичными значениями поля appdate
являются: 2013-07-05 08:30:00
и 2013-07-05 09:00:00
, поэтому значения метки времени отсутствуют, и все встречи различаются с фиксированным интервалом времени.
Для моего приложения мне нужно убедиться, что ни один стул не забронирован дважды в один и тот же интервал времени, по этой причине я подумал о создании составного первичного ключа, состоящего из поля appdate
и поля chair_idchair
, а затем установить этот составной первичный ключ как уникальный.
Мой вопрос заключается в том, как это сделать в MySQL и, что более важно, действительно ли это лучший способ гарантировать, что никакие двойные бронирования не могут быть забронированы со стороны БД. Я не хочу просто полагаться на приложение для этой проверки, поскольку пользователи будут бронировать одновременно из нескольких мест.