1

这类似于这个问题

基本上我正在为建筑监控系统编写数据库和软件。该系统监控温度、湿度、设备(如冰箱)的压力等。

当为特定单元生成报告时,每个传感器都有一个带有传感器名称的列,读数如下。

我正试图决定它应该是阅读时的名字,还是现在的名字。

我目前认为应该是后者,因为我倾向于相信给定相同的(主)键,它唯一标识的数据的含义不应该改变,即使它的属性会改变。因此,任何名称更改都应仅用于更正或澄清,IMO,几乎就像名称本身是主键一样(我完全是自然键,但由于长度和可能需要拼写,我倾向于不使用名称更正 - 在这种情况下,虽然我有一个“SensorNo”字段(不是 ID),它是它正在监控的单元所独有的)。

无论如何 - 这意味着我确实可以使用当前名称,如果他们将传感器的名称从“Air”更改为“Food”,那么它应该在所有报告数据上显示“Food”,即使它显示之前的数据变化,这个变化的想法应该意味着它总是意味着“食物”,而不是“空气”——这是一个更正。

对于“上限”和“下限”(例如温度范围)等非“关键”数据,在报告时应使用历史数据,在这种情况下,因为它显示了传感器在测量时的温度范围。阅读。

您可能会说这类似于更改用户的全名:它仍然是同一个人,但他们可能会更改姓名,因此报告历史记录应始终显示人员的最新姓名,否则可能会出现混乱。

我的计划是允许用户更改名称,但首先警告他们其含义,并声明它只能用于更正。

人们对此有何看法?你如何处理这种情况?我也很想听听 Catcall的来信,他回答了这个问题。

(请注意,这不是关于如何存储历史数据的讨论,我对这方面已经很好了)。

4

2 回答 2

1

我想你自己回答了。如果他们更改了字段的名称,这是一个更正(然后他们不需要在新报告中查看旧名称)。如果他们因为含义改变而更改传感器名称,那么他们应该添加一个新传感器。我认为您无法真正使您的用户免于犯这种错误。在某些应用程序中,我看到他们在构建新输入集时 DROP 数据库(但您不能或您不想这样做)。如果他们想使用供应商/型号名称作为标签名称(传感器名称),可能会有所不同。在这种情况下,它可能会随着时间的推移而改变,可能他们想看到真实的每个间隔的名称。在这种情况下,如果更改仅限于标签名称,您可以保存一个小表来跟踪这些更改(id、名称、时间戳)并更新假设的 ResolveTagName(id, time) 函数来查询该表。我对限制的历史数据有更多疑问,因为它们可能会随着时间的推移而变化(例如,由于部件变旧或可测量的物理压力,部件的最高温度可能会随着时间的推移而降低,在这种情况下,您不能应用当前限制对于旧的措施)。

于 2012-03-06T15:13:24.667 回答
0

“你可能会说这类似于更改用户的全名:它仍然是同一个人,但他们可能会更改姓名,因此报告历史记录应始终显示人员的最新姓名,否则可能会出现混淆。”

混乱总是会接踵而至。简单的措施无法阻止这种情况的发生。假设一个传感器现在被命名为“Air”,但在某个时候曾经被称为“Food”(当时还有另一个传感器名为“Air”)。你认为如何确定没有人会去检查日志并提出“嘿,你在这里测量一年前的传感器“空气”,但我自己检查了日志,发现完全不同的数字”。

你可以做两件事。(a) 尽可能清楚地表明,如果报告说“传感器空气”(2 个字),那么它的真正含义是“在创建报告时被命名为“空气”的传感器,但在创建报告之前可能已使用不同的名称,甚至不一定需要与您查看报告时称为“空气”的传感器完全相同"(丢失计数)。如果你试图向你的用户解释这一点,你能得到的最好的结果就是茫然的凝视,如果他们不直截了当地背对你走开的话。如果你把它写在手册里,你会发现用户从来没有读过手册。

并且 (b) 您可以尝试在报告中包含过去名称更改的指示。稍微隐晦地执行此操作(例如,像' * '这样的警报字符串),当您自己甚至忘记它的时候,您肯定会得到关于这意味着什么的问题。也许一个不错的选择是打印一个单独的部分,其中包含过去的名称更改,就在标题部分的正下方,但如果没有名称更改历史记录,则根本不打印任何内容(甚至不打印该额外部分的标题)。

“我的计划是允许用户更改名称,但首先警告他们其含义,并声明它只能用于更正。”

决定“它只应用于更正”与您无关。许多现实世界的对象通常在人类语言中使用名称来识别,并且这些现实世界中的许多对象在其生命周期中使用不同的名称。你无法改变这样一个事实,即在我能想到的几乎任何环境中,名字都是最舒适的识别方式。如果比尔盖茨的妻子想去购物,她会问“亲爱的,我可以坐保时捷吗”,或者她会问“亲爱的,我可以带 WOL0x547832187(这可能是比尔盖茨的正确唯一底盘 ID 号)”保时捷)?”。你也不能改变事物可以改变名称的事实。

于 2012-03-06T21:02:52.097 回答