| | 44 | |
| | 45 | {{{!#sql |
| | 46 | ALTER TABLE booking |
| | 47 | ADD CONSTRAINT uq_booking_flight_seat UNIQUE (flight_id, seat); |
| | 48 | |
| | 49 | ALTER TABLE booking |
| | 50 | ADD INDEX ix_booking_flight (flight_id); |
| | 51 | |
| | 52 | ALTER TABLE flight |
| | 53 | ADD INDEX ix_flight_airplane (airplane_id); |
| | 54 | |
| | 55 | ALTER TABLE airplane |
| | 56 | ADD INDEX ix_airplane_id_capacity (airplane_id, capacity); |
| | 57 | }}} |
| | 58 | |
| | 59 | UNIQUE (flight_id, seat) e најчист race-condition stopper за кога двајца купуваат исто седиште, ама во реален систем имаме и '''перформанси''' и '''lock behavior'''. Во concurrency сценарија (многу паралелни резервации), сакаме: |
| | 60 | * критичните проверки да бидат '''брзи''' (да не држат locks предолго), |
| | 61 | * да избегнеме '''full table scans''' што прават повеќе блокирања и оптоварување |
| | 62 | |
| | 63 | Затоа додадовме и индекси на колоните што најчесто се користат во транзакциските операции. |
| | 64 | |