Спроектировать базу данных MySql

Дмитрий9 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
18.12.2017

Есть таблица с городами (id, name) москва, питер ...

Есть таблица с типами услуг (id, name) клининг, ремонт телефонов ...

Есть таблица пользователей (id, email, password)

Есть таблица компаний (id, name) вектор, абсолют-сервис

Есть таблица услуги компаний (id, phone, address, header, price, enabled 1/0, stake) химчистка диванов, замена экрана телефона, мойка окон

У пользователя может быть сколько угодно компаний.

У компании может быть сколько угодно услуг, любого типа, даже две одинаковых.

Любая услуга может быть в любом городе или в нескольких городах.

Запросы:

Известен city_id

Выбрать все типы услуг из этого города id, name где есть хоть одна enabled=1 услуга

Известен тип услуги service_type_id и город city_id

Выбрать все enabled услуги из этого города и все данные компаний кому принадлежат услуги

* по этому запросу в конце будет еще уточнение

Известен тип услуги service_type_id город city_id и company_id 

выбрать enabled услуги данного типа принадлежащие данной компании

известно company_id

Выбрать все услуги с их типами и значением enabled и вторым запросом списко городов в которых есть каждая услуга

Нужны сами запросы и также индексы по этим запросам.

Статистика

Есть таблица статистики 

Есть таблица заявки (id, phone, service_id)

В неё нужно сохранять:

сколько раз показалась услуга,

сколько раз кликнули по этой услуге

cколько раз оставили заявку в эту услугу

Запросы:

Всегда знаю service_id

выбрать все записи когда был клик групировка по дням, часам, минутам

Выбрать все записи когда был показ групировка по дням, часам, минутам

Выбрать все записи когда был кликов и сколько было показов групировка по дням, часам, минутам

Известно service_type_id 

Выбрать service_id по убыванию где был лучший CTR(click/show) 

А также все запросы с учетом города city_id

* УТОЧНЕНИЕ

У каждой услуги есть параметр stake это ставка типа сумма

Нужно сделать еще таблицу учета кого щас показываться относительно этой ставки.

Как сделать не знаю, объясняю что хочу)

у каждой услуги (1 из каждой компании данного типа, если у компании больше 1 услуги данного типа то берется случайная)

есть ставка это типа сумма за 1000 показов

Например есть 3 услуги

1 ставка 100

2 ставка 50

3 ставка 70

Нужно сделать так чтобы они показывались по очереди, но при этом пропороционально.

Т.е. после того как выбрались услуги, нужно сохранить кто в этой выборке в прошлый раз показывался и сделать выбор кого показать сейчас.

Т.е. нужна таблица вот этих состояний, или может не нужно никакой таблицы а просто математически это считать?

как правильно не знаю. Может подскажите.