0

住所情報、都市、郵便番号、電子メールアドレス、電話番号、ファックス番号など(約11列に相当)を含むテーブルがいくつかあるデータベースを計画しています。テーブルは組織です。 (最大)2つのアドレス(合法的な連絡先と実際に使用する必要がある連絡先)を含むテーブルに加えて、すべてのユーザーが同じ情報を自分に関連付けています。

これらの住所でもジオロケーションを実行する必要があります(別の住所からXキロメートル以内にあるすべての住所など)。

私にはたくさんのオプションがあり、それぞれに独自の問題があります。

  1. すべての情報をすべてのテーブルに入れることはできますが、列が非常に多いテーブルではインデックス作成に問題があり、アドレス形式を変更すると修正に時間がかかります。
  2. すべての情報を配列内に配置してシリアル化し、シリアル化された情報を1つのフィールドに格納できます。これは、前の方法と同じ問題で、列が少し少なく、mysqlクエリによる可用性がはるかに低くなっています。
  3. アドレス情報を含む別のテーブルを作成し、それを他のテーブルにリンクすることができます。

    1. ユーザーと組織のテーブルにaddress_id列を配置する
    2. related_id列とrelated_table列をアドレステーブルに配置する

    それは物事をよりきれいに保つはずですが、それは過度の参加などでいくつかの予期しない問題を引き起こす可能性があります。

個人的にはソリューション3.2が一番いいと思いますが、自信がないので意見を求めています。

4

1 に答える 1

0

オプション2は、DBMSに処理させるのではなく、フィルタリングロジックをコードに組み込むため、間違いなく使用できます。

オプション1または3は、ニーズによって異なります。

すべてのデータに高速アクセスする必要があり、通常は組織情報とともに両方のアドレスにアクセスする場合は、オプション1を検討できます。ただし、mysqlでテーブルが大きくなりすぎると、クエリを実行するのが難しくなります(つまり遅くなります)。 。

テーブルに正しくインデックスを付ける場合は、オプション3が適しています。

于 2010-07-15T09:48:01.493 に答える