2009-07-16 13 views
0

テーブル内の異なる場所間の距離を保存します。ルックアップテーブルを扱うための賢明なSQL戦略をお探しですか?

CREATE TABLE `example` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `from` VARCHAR(8) NOT NULL , 
    `to` VARCHAR(8) NOT NULL , 
    `distance` DECIMAL(6, 2) NOT NULL , 
    PRIMARY KEY (`id`) , 
    INDEX (`from` , `to`) 
) 

2点間の距離が測定されると、テーブルに挿入されます。 'from'と 'to'の距離を取得することは明らかに非常に簡単です。しかし 'to'と 'from'の距離はまったく同じです。私は、単に 'to'と 'from'を切り替えるために別の行を作成したくない。私はまた、これを達成するために、このテーブルのルックアップテーブルを作成する必要はありません。

距離を選択するSQLは非常に多く呼び出されるため、効率的なクエリが必要です。私はテーブルを簡素化している

はそう

誰もが、彼らが推薦する可能性のある戦略を持っているなどの場所がVARCHARがあることを心配しないのですか?

答えて

4

「A」と「B」の場所を呼び出します。 A < Bの場合は、 'from'のAと 'to'のBを検索し、そうでなければ 'from'のBと 'to'のAを検索します。値を挿入するときと同じロジックです。

このように、各組み合わせを1回だけ保存すると、クエリが高速になります。

+0

ちょうど私がやった解決策の種類 –

0

全く異なるものをお勧めします。各点には同じ点を基準とした座標があるため、2点を与えると距離が計算され、DBには保存されません。

これらの点がマップ/グラフ上の点である場合、別の解決策が存在します。

+0

彼は座標があったとは言わなかったし、それらの間の距離も直線だったとは言わなかった。場所が都市で、距離が最速の道のりであれば、確かに直線ではありません。 –

+0

私の答えにグラフを挙げました。いずれにせよ、保存したいものを格納する最良の方法は、リレーショナルDBにはありません。 –

関連する問題