首页 > 解决方案 > 如何为重新测试记录创建模式?

问题描述

这是我当前的架构:

http://sqlfiddle.com/#!9/5d0290

CREATE TABLE `Rooms` (
    Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    RoomDescription VARCHAR(30) NOT NULL,
    MinTemperature DECIMAL(4,2) NOT NULL,
    MaxTemperature DECIMAL(4,2) NOT NULL
);

INSERT INTO `Rooms` (RoomDescription, MinTemperature, MaxTemperature) VALUES
('Room 1', 10, 20),
('Room 2', 15, 20);

CREATE TABLE `Records` (
    Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    DateRecorded TIMESTAMP,
    RoomId INT NOT NULL,
    ActualTemperature DECIMAL(4,2) NOT NULL,
    IsValid INT NOT NULL,
    FOREIGN KEY (RoomId) REFERENCES `Rooms`(Id)
);

INSERT INTO `Records` (DateRecorded, RoomId, ActualTemperature, IsValid) VALUES
('2021-09-28 08:00:00', 1, 8, 0),
('2021-09-28 08:01:00', 2, 15, 1),
('2021-09-29 08:00:00', 1, 17, 1),
('2021-09-29 08:01:00', 2, 19, 1);

SELECT * FROM `Rooms`;
SELECT * FROM `Records`;

-- Rooms
Id  RoomDescription MinTemperature  MaxTemperature
1   Room 1          10              20
2   Room 2          15              20

-- Records
Id  DateRecorded          RoomId    ActualTemperature   IsValid
1   2021-09-28 08:00:00   1         8                   0
2   2021-09-28 08:01:00   2         15                  1
3   2021-09-29 08:00:00   1         17                  1
4   2021-09-29 08:01:00   2         19                  1

概括

房间表:显示特定房间允许的温度和RoomDescription温度值。MinimumMaximum

记录表:显示所有记录的记录。它引用RoomId了与它一起记录的ActualTemperature。然后对于IsValid列,如果值介于之间MinMax那么它就是一条Valid记录。如果它不符合规范,这意味着它是一个InValid记录。

目标

我需要找到一种方法来重新测试InValid记录并保留以前结果的历史记录。

我认为是一个好方法

我相信实现我的目标的方法之一是创建一个新表:ReTest-Records.

CREATE TABLE `ReTest-Records` (
    Id INT NOT NULL PRIMARY KEY auto_increment,
    DateRecorded TIMESTAMP,
    RecordId INT NOT NULL,
    ActualTemperature DECIMAL(4,2) NOT NULL,
    IsValid INT NOT NULL,
    FOREIGN KEY (RecordId) REFERENCES `Records`(Id)
);

INSERT INTO `ReTest-Records` (DateRecorded, RecordId, ActualTemperature, IsValid) VALUES
('2021-09-28 12:30:00', 1, 4, 0), -- ReTest 1
('2021-09-28 16:30:00', 1, 10, 1); -- ReTest 2

在这里,我可以匹配表:ReTest-RecordsRecords表。这使我可以使用以下查询查看重新测试是有效还是无效:

SELECT
  *
FROM `Records` r
JOIN `ReTest-Records` rt ON r.Id = rt.RecordId
WHERE r.IsValid = 0 AND rt.IsValid = 1;

上述查询的输出将意味着以下两件事:

  1. 记录未重新测试。

  2. 记录仍然无效。

然后在我的 C# 应用程序中,我可以为ReTest.

在查看记录 + 重新测试的历史记录方面,我可以运行以下查询:

SELECT
  *
FROM `Records` r
LEFT JOIN `ReTest-Records` rt ON r.Id = rt.RecordId; 

问题

我想知道这种方法是否适合记录重新测试的记录?在这种情况下,我不需要构建额外的表并且可以简单地修改我现有的表。

标签: mysqlsql

解决方案


推荐阅读