У меня проблема с дизайном структуры базы данных. Цель состоит в том, чтобы иметь базу данных для предложений, которые наши клиенты предлагают по некоторому географическому региону. Каждое предложение может быть предложено во многих регионах.
Регионы находятся в иерархии - пример:
subregion_1
subregion_11
region_111
region_112
subregion_12
region_121
region_122
subregion_2
subregion_21
region_221
Теперь я хочу сохранить в базе данных offer_1 и регионы для этого предложения. Я приведу Вам 3 примера того, чего я должен достичь:
- когда мое предложение_1 хранится в регионе_111, я хотел бы отображать это предложение, когда пользователь просматривает субрегион_1, субрегион_11 и регион_111.
- Если предложение_1 хранится в регионах субрегион_11 и регион_121, то предложение должно отображаться, когда пользователь просматривает субрегион_1, субрегион_11 и всю ветвь субрегиона_11, субрегиона_12 и региона_121.
- когда мое предложение_1 хранится в субрегионе_1, предложение отображается на странице субрегиона_1 и во всей ветке в субрегионе_1.
Также я должен обеспечить способ динамического и очень быстрого подсчета количества различных предложений в каждом регионе. Есть ли у кого-нибудь совет, как приблизиться к этому дизайну?
Вот что у меня есть до сих пор.
Regions
------------------------------------------------------------
| id | level1 | level2 | level3 | name | level |
------------------------------------------------------------
| 02 | 02 | null | null | subregion_1 | 1 |
| 0201 | 02 | 01 | null | subregion_11 | 2 |
| 020103 | 02 | 01 | 03 | region_111 | 3 |
------------------------------------------------------------
Offers to regions
------------------------
| offer_id | region_id |
------------------------
| 1 | 020103 |
| 1 | 0202 |
------------------------
Я создал идентификатор для регионов, объединив level1, level2 и level3. В таблице Offers_to_regions храню оффер и регион. Здесь у меня есть регион на уровне 3 (020103) и регион на уровне 2 (0202) для предложения 1. С этим дизайном у меня возникают проблемы с тем, как запрашивать количество различных предложений для каждого региона и как запрашивать предложения для регионов на уровне 1, уровне 2. и регионы уровня 3.