SQL 具有 M 个参数随时间变化的 N 个项目的数据库结构

SQL DB structure for N items with M parameters varying over time

有以下项目:

N大约是几百。有时可以添加新项目。

每个项目都有一组参数:

M大约是20-30。这些参数每天测量几次(彼此独立,在不同的时间),需要存储在数据库中。所以 parameter_j(item_i) 有大量的时间值对:

需要执行的基本查询:

我需要什么样的数据库结构(表)才能高效执行这些查询?您能否为这两种类型的查询提供 SQL 代码?

我可能会采用这样的结构:

我会提供 MS SQL 代码。

创建这些表的示例代码:

IF NOT OBJECT_ID('tempdb..#Items') IS NULL DROP TABLE #Items
CREATE TABLE #Items (
    ID int NOT NULL,
    ItemName varchar(255) NOT NULL,
    PRIMARY KEY (ID)
)

IF NOT OBJECT_ID('tempdb..#Measurements') IS NULL DROP TABLE #Measurements
CREATE TABLE #Measurements (
    ItemID int NOT NULL,
    MeasurementDate datetime NOT NULL,
    Param1 varchar(255),
    Param2 float,
    Param3 varchar(255),
    ParamN binary
    FOREIGN KEY (ItemID) REFERENCES #Items (ID)
)

我通过这段代码填充了虚拟数据:

INSERT INTO #Items values ( 0, 'Item1' )
INSERT INTO #Items values ( 1, 'Item2' )

INSERT INTO #Measurements (ItemID, MeasurementDate, Param2) values (0, GetDate(), 2.3)

INSERT INTO #Measurements (ItemID, MeasurementDate, Param3) values (1, DATEADD(day, 3, GetDate()), 'red')

INSERT INTO #Measurements (ItemID, MeasurementDate, Param3) values (1, DATEADD(day, 2, GetDate()), 'blue')

INSERT INTO #Measurements (ItemID, MeasurementDate, Param2) values (0, DATEADD(day, 5, GetDate()), 4.0)

查询一个项目的参数的所有值(按测量时间排序)":

代码:

SELECT #Measurements.MeasurementDate, #Measurements.Param2
FROM #Measurements INNER JOIN #Items ON #Measurements.ItemID = #Items.ID
WHERE #Items.ItemName LIKE '%Item1%'
ORDER BY #Measurements.MeasurementDate

输出:

查询所有项目所有参数的最新值":

代码(见解释):

SELECT TOP 1 WITH TIES
*
FROM #Measurements
ORDER BY row_number() over (partition by ItemID order by MeasurementDate desc)

输出: