データベース構造の設計上の問題があります。目標は、クライアントが特定の地域ごとに提供するオファーのデータベースを作成することです。各オファーは、多くの地域で提供できます。
地域は階層化されています - 例:
subregion_1
subregion_11
region_111
region_112
subregion_12
region_121
region_122
subregion_2
subregion_21
region_221
今、offer_1 とそのオファーの地域をデータベースに保存したいと考えています。私が達成しなければならないことの例を 3 つ挙げます。
- offer_1 が region_111 に格納されている場合、ユーザーが subregion_1、subregion_11、および region_111 を閲覧しているときにこのオファーを表示したいと考えています。
- offer_1 が領域 subregion_11 および region_121 に格納されている場合、ユーザーが subregion_1、subregion_11、および subregion_11、subregion_12、および region_121 のすべてのブランチを閲覧しているときにオファーが表示されます。
- 私の offer_1 が subregion_1 に格納されている場合、オファーは subregion_1 ページに表示され、subregion_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 を連結して、リージョンの ID を作成しました。テーブル Offers_to_regions に、オファーと地域を保存します。ここでは、オファー 1 に対してレベル 3 (020103) のリージョンとレベル 2 (0202) のリージョンがあります。この設計では、リージョンごとの異なるオファーの数を照会する方法と、レベル 1、レベル 2 のリージョンのオファーを照会する方法に問題があります。およびレベル 3 リージョン。