世界のすべての地理的な場所とそれらの関係の場所を含むテーブルがあります。
階層を示す例を次に示します。データが実際に 3 つすべてとして保存されていることがわかります。
- 列挙パス
- 隣接リスト
- ネストされたセット
データも明らかに変更されることはありません。以下は、woeid が 13911 であるイギリスのブライトンの場所の直接の祖先の例です。
表: geoplanet_places
(560 万行)
大きい画像: http://tinyurl.com/68q4ndx
次に、 という別のテーブルがありますentities
。このテーブルには、地理的な場所にマップしたいアイテムが保存されます。いくつかの基本的な情報を保存しますが、最も重要なのwoeid
は からの外部キーであるを保存することですgeoplanet_places
。
最終的に、entities
テーブルには数千のエンティティが含まれます。そして、エンティティを含むすべてのノードの完全なツリーを返すことができる方法が欲しいです。
地理的な位置に基づいてエンティティのフィルタリングと検索を容易にし、その特定のノードで見つかるエンティティの数を検出できるようにするための何かを作成する予定です。
したがって、entities
テーブルにエンティティが 1 つしかない場合、次のようなものになる可能性があります
`地球 (1)
イギリス (1)
イングランド (1)
イーストサセックス (1)
ブライトンとホーブ市 (1)
ブライトン (1)`
次に、デボンにある別のエンティティがあるとしましょう。次のように表示されます。
アース (2)
イギリス (2)
イングランド (2)
デボン (1)
イーストサセックス (1) ... など
各地理的位置の「内部」にあるエンティティの数を示す (カウント) は、ライブである必要はありません。毎時間オブジェクトを生成してキャッシュすることで生活できます。
目的は、エンティティを持つ国のみを表示するインターフェイスを作成できるようにすることです..
以下のようなので
Argentina (1021)
、Chile (291)
、...
、United States (32,103)
、United Kingdom (12,338)
次に、ユーザーが United Kingdom などの場所をクリックすると、United Kingdom の子孫であり、エンティティを含む直接の子ノードがすべて表示されます。
英国に 32 の郡があるが、最終的にドリルダウンしたときに 23 の郡のみにエンティティが格納されている場合、残りの 9 郡は表示したくありません。それは場所だけです。
このサイトは、私が達成したい機能を適切に示しています:
http://www.homeaway.com/vacation-rentals/europe/r5
このようなデータ構造をどのように管理することをお勧めしますか?
私が使用しているもの。
- PHP
- MySQL
- ソル
ドリルダウンはできるだけ迅速に行う予定です。私は、検索のためにシームレスな AJAX インターフェイスを作成したいと考えています。
また、インデックスを作成することをお勧めする列を知りたいです。