1. Билеты на событие
Вопрос 1. Так как в таблицу после ее создания нельзя добавлять дополнительные столбцы, я предлагаю изменить таблицу совершенных заказов. Это позволит избежать дублирования информации и иметь возможность добавлять неограниченное количество типов билетов. Также понадобится добавить вспомогательную таблицу с информацией о количестве и типах купленных билетов. Таблица заказов будет выглядеть так:
| id | event_id | event_date | barcode | user_id | equal_price | created |
|---|---|---|---|---|---|---|
| 1 | 003 | 2021-08-21 13:00:00 | 11111111 | 00451 | 700 | 2021-01-11 13:22:09 |
| 2 | 006 | 2021-07-29 18:00:00 | 22222222 | 00364 | 1600 | 2021-01-12 16:62:08 |
| 3 | 003 | 2021-08-15 17:00:00 | 33333333 | 00015 | 4150 | 2021-01-13 10:08:45 |
Информацию о количестве билетов каждого типа будем хранить в вспомогательной таблице следующим образом:
| id | ticket_type | quantity |
|---|---|---|
| 1 | 0 | 1 |
| 2 | 1 | 2 |
| 3 | 0 | 4 |
| 3 | 1 | 3 |
Значения в поле ticket_type должны совпадать с уже имеющимися категориями билетов из таблицы с информацией о событии. Так как образца нет, как пример взяла значения 0 - взрослый, 1 - детский, 2 - групповой, 3 - льготный. Получается, можно добавлять любые типы событий, которые существуют в таблице с информацией о событии, не добавляя большое количество столбцов в таблицу заказов. Полную стоимость заказа можно будет расчитать средствами самой БД, обратившись во "вспомогательную" таблицу (по id заказа можно будет однозначно его идентифицировать и найти все принадлежащие ему билеты) за количеством и типом купленных билетов и в таблицу события за их ценой.
Вопрос 2. По схожим с первым вопросом соображениям, для хранения уникальных баркодов создадим отдельную таблицу:
| id | barcode |
|---|---|
| 1 | 11111111 |
| 1 | 11111112 |
| 2 | 22222222 |
| 2 | 22222223 |
Тогда из таблицы из предыдущего вопроса исключается столбец с баркодом:
| id | event_id | event_date | user_id | equal_price | created |
|---|---|---|---|---|---|
| 1 | 003 | 2021-08-21 13:00:00 | 00451 | 700 | 2021-01-11 13:22:09 |
| 2 | 006 | 2021-07-29 18:00:00 | 00364 | 1600 | 2021-01-12 16:62:08 |
| 3 | 003 | 2021-08-15 17:00:00 | 00015 | 4150 | 2021-01-13 10:08:45 |