К содержимому
Hub
Barcha qaydlar

22-avgust, 2026 · 2 daqiqa

Ikki marta band qilish tekshiruv bilan emas, indeks bilan tuzatiladi

SQLSQLitePythonСостояние гонки

Stol band qilish botida vazifa oddiy ko'rinadi: bitta stolni bir vaqtga ikki marta band qilishga yo'l qo'ymaslik.

Birinchi yechim o'zi keladi: yozishdan oldin bazadan so'rash, slot bo'shmi. U noto'g'ri va noto'g'riligi ko'rinmaydi. So'rov bilan yozuv orasida vaqt o'tadi.

To'g'ri joy — bazaning o'zi. Stol, sana va vaqt bo'yicha unikal indeks ikkinchi qatorni jismonan yozdirmaydi.

Bitta nozik joy — bekor qilingan bronlar. Ularni indeksga kiritsangiz, bekor qilingan stolni qayta band qilib bo'lmaydi. Qisman indeks buni hal qiladi.

Umumiy qoida: agar taqiq doim amal qilishi kerak bo'lsa, uning joyi bazada, dastur kodida emas.

SQL
-- Один столик нельзя занять дважды на один и тот же слот.-- Отменённые брони из проверки исключаются.---- Проверять занятость запросом перед вставкой ненадёжно: между-- проверкой и записью успевает вклиниться второй гость. Здесь-- запрет живёт в самой базе, и обойти его нельзя.CREATE UNIQUE INDEX IF NOT EXISTS idx_booking_slot    ON bookings (table_id, book_date, book_time)    WHERE status <> 'cancelled';