Бази даних · Senior · Запитання 64 з 75
Як PostgreSQL може на рівні бази заборонити два бронювання однієї кімнати, що перетинаються?
ALTER TABLE bookings ADD CONSTRAINT no_overlap
EXCLUDE USING gist (room_id WITH =, during WITH &&);- ✓Правильна відповідь: Exclusion-обмеженням по діапазонному стовпцю: жодні два рядки не можуть мати ту саму кімнату й діапазони часу, що перетинаються
- 2Унікальним індексом на
room_id - 3Неможливо: це треба перевіряти в коді застосунку
Пояснення
Тут немає гонитв, на відміну від перевірки перетину перед вставкою. Для частини з рівністю по room_id потрібне розширення btree_gist.