我想做一个产品数据库。每个产品的特征描述为一组 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 类型??)
我被建议的一种方法是制作一个表格来指定 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 值是可以接受的,那将是最好的。