商品のデータベースを作りたい。各製品には、x 値と対応する y 値の配列として記述された特性があります。そして、特定の特性について製品を照会したいと思います。
商品データの例:
ProductA_x = [10, 20, 30, 40, 50]
ProductA_y = [2, 10, 30, 43, 49]
ProductB_x = [11, 22, 33, 44, 55, 66]
ProductB_y = [13, 20, 42, 35, 28, 21]
ここで、y < 35 @ x=31 の製品のリストを取得したいと考えています。サンプル データのケースでは、ProductA を取得する必要があります。
- MySQL を使用している場合、SQL レベルでこのクエリを実行するためにテーブルを定義する良い方法は何でしょうか?
- PostgreSQL を使えばもっと簡単になりますか? (Array 型か JSON 型か??)
私がアドバイスされた方法の 1 つは、x 範囲の xy ペアを指定するテーブルを作成することでした。最初のデータは x[0] から x[1] の範囲、次のデータは x[1] から x[2] の範囲です。このようなもの。
| ProductID | x1 | x2 | y1 | y2 |
| --------- | -- | -- | -- | -- |
| 1 | 10 | 20 | 2 | 10 |
| 1 | 20 | 30 | 10 | 30 |
| 1 | 30 | 40 | 30 | 43 |
| 1 | 40 | 50 | 43 | 49 |
| 2 | 11 | 22 | 33 | 44 |
| 2 | 22 | 33 | 20 | 42 |
| 2 | 33 | 44 | 42 | 35 |
| 2 | 44 | 55 | 35 | 28 |
| 2 | 55 | 66 | 28 | 21 |
次に、(x1 > 31 AND 31 < x2) AND (y1 < 35 OR y2 < 35) を照会できます。
この解決策はそれほど悪くはありませんが、より賢いアプローチがあるのではないかと思います。
x 配列はインクリメンタルであることが保証されていますが、製品によって開始 x 値、ステップ サイズ、ポイント数が異なることに注意してください。また、検索対象の x 値が x 配列に正確な値として存在しない場合があります。実際の x 配列と y 配列の長さは約 2000 になります。約 10,000 個の製品があると思います。
対応する y 値を補間できるのが最善ですが、最も近い x 値で y 値を検索してもかまいません。