**ここで使用する PHP/MySQL **
シナリオ:
ある配送会社は全国に多数のデポ/倉庫を持っており、各デポは選択された都市/町のみをカバーしています。ユーザーがサイトにアクセスすると、最寄り/ローカルのデポを検索できます。
2 つのオプションを検討しました。それぞれを以下に説明します。
オプション 1 (機能しません):
各デポを緯度と経度で保存し、単純な半径検索を行ったので、ユーザーが都市/町に入ると、Google マップを使用してジオコーディングし、半径クエリを実行して 25 マイル以内にあるすべてのデポを取得しました。これは機能します。
しかし、これには大きな欠点があります。一部のデポは、選択した町/都市をカバーしておらず、半径検索はこれを考慮していないため、そのエリアをカバーしていなくても結果にデポ/倉庫が表示されます。
オプション 2:
町/都市のリストを 1 つのデータベース テーブルに保存し、デポを別のテーブルに保存します。次に、リレーションシップ テーブルを用意し、デポをそれらがカバーする町/都市にリンクします。ユーザーは正確な都市LIKE
名 (ここでは mySQL を使用) を入力して結果を返す必要があります。これにより、都市テーブルが検索LEFT JOIN
され、depots テーブルが検索されます。
ここでの欠点は、リレーションシップ テーブルが急速に大きくなり、最大 500 万のレコードを持つことができることです。これにより、後の段階でパフォーマンスの問題が発生する可能性があります。
オプション 2 のデータベース設計:
デポテーブル
- ID
- D_NAME
- D_ADDRESS
- D_POSTCODE
- D_TEL
- AND SO ON…
シティテーブル
- ID
- NAME
関係表
- ID
- CITY_ID
- DEPOT_ID
質問:
私が取ることができる他のオプションはありますか?
オプション 2 は正しいアプローチであり、パフォーマンスの点で問題ありませんか?
ありがとう。