如何将自定义日志存储到数据库

How to store custom logs to database

我想问一下您建议如何将某些过程的日志(比如从多个气象站测量温度)保存到数据库中。我遇到的问题是我希望日志不可变,因此当例如气象站名称更改时它们不应该受到影响 -> 所以我想我需要创建气象站的副本。但我最终会得到每个温度测量的气象站副本。假设气象站中还会存储一些贯穿年份的参考温度,所以我也需要复制这个。太浪费了。

谁能帮我解决这个问题

只是为了让你开始:

当您当前的模式是

时,规范化您的示例将如下所示
weatherstation_id | weatherstation_name | weatherstation_ip_address | temperature | measure_date

首先分成 2 个 table,其中一个仅包含有关气象站的信息,第二个 table 仅包含测量数据

Table Weather_Station

id | name | ip_address

(我更喜欢不重复 table 名称中已经包含的内容的短名称 - 如果该字段与 table/entity 无关,这也是您需要规范化的强烈提示或 外键)

Table 测量

date_time | measure | weather_station_id

weather_station_id 现在是与您的 Weather_Station table.

相关的外键

现在您可以更改气象站的名称和 IP 地址,而无需修改任何测量记录。

要检索您的数据,您将在查询时 JOIN 您的 table:

SELECT
    wst.name,
    wst.ip_address,
    mes.date_time,
    mes.measure
FROM Measure mes
INNER JOIN Weather_Station wst ON wst.id = mes.weather_station_id

与参考数据点一样,它是相同的:将它们放在它们自己的 table 中,并在 Weather_Station

中包含一个外键

Table Reference_Measure

weather_station_id | reference_date | temperature

要在您的测量查询中包含参考值,您将 JOIN 您的 Reference_Measure table 基于 weather_station_id 并将日期和时间截断为您计划作为参考日期的所需精度(月、日或小时)。


接下来考虑您有更多关于气象站中安装的设备的数据,而不仅仅是 IP 地址,例如板序列号。

继续打碎那个table:

Table Weather_Station

id | name

Table 设备

id | modelname | ip_address | serialnumber | weather_station_id

现在您甚至可以更换损坏的设备或更改其 IP 地址,而无需更改您的气象站数据或测量数据。

更进一步,您可以考虑在 Measure table 中使用 device_id 而不是 weather_station_id。这样做,您将能够识别已被证明已损坏的设备所进行的测量。