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

Database design 如何将自定义日志存储到数据库,database-design,Database Design,我想问一下,您建议如何将某些过程的日志(比如从多个气象站测量温度)保存到数据库中。我的问题是,我希望日志是不可变的,这样当例如气象站的名称更改->时,它们就不会受到影响,所以我想我需要创建气象站的副本。但我最终会得到每个温度测量的气象站的副本。假设在气象站中还存储了一些全年的参考温度,所以我也需要复制这个。那太浪费了 有人能帮我解决这个问题吗只是为了让您开始: 当当前模式为 weatherstation_id | weatherstation_name | weatherstation_ip_a

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


有人能帮我解决这个问题吗

只是为了让您开始:

当当前模式为

weatherstation_id | weatherstation_name | weatherstation_ip_address | temperature | measure_date
首先分为两个表,其中一个表只包含气象站的信息,第二个表只包含测量数据

表2气象站

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

表度量

weather\u station\u id
现在是与
weather\u station
表相关的外键

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

要检索数据,您将在查询时加入表:

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
与参考数据点一样:将它们放在自己的表中,并包含
气象站的外键

表参考测量

要将参考值包含到测量查询中,您将
根据天气站id和日期和时间加入参考测量表,并将其截断为您计划作为参考日期的所需精度(月、日或小时)


下一步考虑你在气象站安装的设备更多的数据,而不仅仅是IP地址,例如板号。 继续,再把那张桌子拆开:

表2气象站

台式设备

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


更进一步,您可以考虑在测量表中有<代码> DEVICIOSID ID/CODE,而不是<代码> WeeRySytSudioID。这样做,您就能够识别被证明已损坏的设备所进行的测量。

我知道我不应该将一个值存储两次,但在这种情况下,我将得到类似于表的内容[天气站id、天气站名称id、天气站ip地址id…]非常感谢您的评论,我可能对我的问题描述得不够好。我同意您提供的解决方案很好(我想这样做),但我有一个问题,我需要保持温度日志不变(而不是更改它们)。我想做的是,我想用气象站的信息和所有要记录的属性来存储数据(我并不是想把它存储在一个表中,只是为了有机会从数据库连接到一起)但是当我改变气象站的信息时,它们不能改变。例如,我在我的应用程序中测量温度,所以我会按照你建议的方式创建它,但我改变了气象站的名称,我想获取日志(温度测量),但我想用旧名称接收结果。我希望现在更清楚了。再次感谢您的时间和对我的耐心。在这种情况下,您可以历史化您的气象站数据并加入,就像您使用参考测量一样,在该时间点获得匹配的气象站名称,而无需更改您的测量日志。好的,我知道你能描述一下合适的方案吗?它会像气象站[id,name,ip,address,id…更多信息]然后是name[id,name,change,time],ip,address[id,name,change,time]或者你在想别的什么吗?如果不知道整个故事,很难想出一个真正的模式。作为一个总体目标,我会尝试设计3NF,并考虑满足历史化需求(类型4)。
date_time | measure | weather_station_id
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
weather_station_id | reference_date | temperature
id | name
id | modelname | ip_address | serialnumber | weather_station_id