База данных
1.1 Сущности, атрибуты и характер взаимодействия с данными
| Сущность | Атрибуты | Описание | Характер взаимодействия |
|---|---|---|---|
User | id (PK), email, password_hash, name, phone, role (enum: client, restaurant_admin, platform_admin), created_at, updated_at | Хранит учётные данные и роли. | Транзакционные (OLTP) |
Restaurant | id (PK), name, type (enum: restaurant, cafe, bar), cuisine, average_check, kids_menu, address, metro, district, working_hours, description, photo_url, logo_url, email, phone, status (enum: pending, active, rejected), inn, ogrn, created_at, updated_at | Хранит данные о ресторане. | Транзакционные (OLTP) |
Table | id (PK), restaurant_id (FK), number, seats, position, features, is_active | Хранит информацию о столиках, столики связаны с рестораном. | Транзакционные (OLTP) |
Booking | id (PK), user_id (FK), restaurant_id (FK), table_id (FK), date, time, guests, status, comment, created_at, updated_at | Хранит данные о бронированиях. Участвует в основных транзакциях в системе. | Транзакционные (OLTP) |
RestaurantRegistration | id (PK), inn, ogrn, name, email, phone, status (enum: pending, approved, rejected), rejection_reason, created_at, processed_at | Хранит информацию о заявке на регистрацию ресторана. | Транзакционные (OLTP) |
1.2 Акторы и взаимодействие с данными
| Актор | Взаимодействие с сущностями |
|---|---|
| Авторизованный пользователь | User (чтение/обновление своего профиля)Restaurant (чтение списка и деталей)Table (чтение доступности)Booking (создание, чтение своих броней, отмена) |
| Администратор ресторана | Restaurant (чтение/обновление профиля)Table (чтение/обновление схемы зала)Booking (чтение броней своего ресторана)RestaurantRegistration (создание заявки) |
| Администратор платформы | RestaurantRegistration (проверка, утверждение/отклонение)Restaurant (активация/деактивация)User (блокировка) |
2. Определение подходящей технологии хранения
| Критерии | User | Restaurant | Table | Booking | RestaurantRegistration |
|---|---|---|---|---|---|
| Объём данных | 500 000 записей | 5 000 записей | 150 000 записей | 6 млн записей | 5 000 записей |
| Паттерны записи | Редко: регистрация, обновление профиля | Редко: создание, обновление админом | Редко: обновление схемы админом | Часто: создание, отмена | Редко: создание заявки |
| Паттерны чтения | Часто: при каждом входе, проверке сессии | Часто: поиск с фильтрацией, детали ресторана | Часто: проверка доступности при бронировании | Часто: просмотр списка броней пользователем и админом | Редко: модерация админом |
| Требования к консистентности | Требует ACID | Требует ACID | Требует ACID | Требует ACID | Требует ACID |
| Требования к доступности | 99.9% | 99.9% | 99.9% | 99.9% | 99.9% |
| Сложность запросов | Простые: поиск по email, id | Сложные: полнотекстовый поиск, фильтрация по кухне, рейтингу, цене, расположению | Простые: выборка по свободным/занятым столикам | Средние: выборка по user_id, restaurant_id, дате, статусу, агрегация | Простые: выборка по статусу, дате |
| Выбранный тип хранилища | Реляционная СУБД | Реляционная СУБД + Object Storage (фото) | Реляционная СУБД | Реляционная СУБД | Реляционная СУБД |