我为标题道歉,但我想不出更好的方式来提出这个问题。
基本上,我需要创建一个数据库模型,用于记录各种设备上的日常检查和参数。用户每天都会打开一个表格,它会列出要检查的一些任务以及要记录的操作参数(例如,温度)。然后,用户输入参数并标记任何有问题的项目。
我对此建模的问题是,要检查的项目可能会随着操作要求的变化而变化。我们可能需要添加或删除要检查的内容以保持相关性。
我真的没有太多的示例数据可供展示,因为我很难知道要走哪条路。我能想到的一件事就是保留某种版本号,但我不确定它在数据库中的表现如何。我能想到的另一件事是生成结果的硬拷贝PDF并保存,而不是将结果保存在数据库中。这样我就不必担心添加/删除项目,因为以前的每日检查不会存储在数据库中,因此不会受到影响。这可能对我们的需求很好,因为我们不需要在完成之后返回并改变任何东西,但我不禁认为有更好的方法。
如果您需要任何澄清并感谢您提供任何帮助,请与我们联系。
修改(更多信息)
现在我们每个设备都有一张空白的Excel表格,它有一个支票清单......一个是“液压油的一般清理”,或“检查异常噪音/振动”然后有一对狡猾地说“液压(psi)“你必须输入你记录的压力......平均可能有大约20个任务。然后你把你的名字放在纸张上,约会它,打印并签名......它可能会被填满,可能永远不会被再次看到....
答案 0 :(得分:1)
我建议将其分解为组件......因此每个设备都有一个“任务”列表,然后如果您有共性,则可以创建这些任务中的每一个,甚至可以在多个设备上重复使用。这样,如果需求发生变化,您可以创建新任务。在编辑和显示最终结果时,开发一个看起来不错的用户界面可能需要一些小小的努力,但出于建模目的,我会说这是最佳选择。
我会创建一个用于存储设备实例的表,一个用于存储任务实例的表,然后您将拥有另一个连接日期,设备和任务的表。如果某个特定任务发生了变化,您可以选择将其设计为可编辑的方式。
答案 1 :(得分:1)
凸轮,
这是我提出的模型/表格和数据列表。我认为它涵盖了您可能用于从应用程序中获取数据的大多数scnerios / query。
设备表和检查表是两个独立的实体,分别具有设备和检查的主列表。
每当您必须为给定设备设置一系列检查时,您将在equipment_check_asc表中插入新记录。由于这些关联/检查是基于时间的,因此我们有一个生效日期和结束日期,以确定在给定时间点需要检查的内容,并保留在该时间点强制执行哪些检查的历史记录。
所做的实际检查是使用子表(equipment_check_audit)完成的,该子表记录了给定日期(无论何时制作)每台设备的检查。
您可以从以下模型轻松回答以下问题,这些是我能想到的。
a)截至今天,该设备需要进行哪些检查?
b)截至给定日期的设备所需的检查
c)在所要求的检查中,有多少人被执行,有多少人没有(今天和任何一天)。d)执行的检查中,通过/失败了多少。
create table equipment(
equipment_id number primary key,
equipment_name varchar2(200) not null
);
create table checks(
checkid number primary key,
check_name varchar2(100) not null
);
create table equipment_check_asc(
equipment_check_asc_id number primary key,
equipment_id number not null,
checkid number not null,
eff_date date not null,
end_date date ,
eff_flag varchar2(1) not null, -- kind of redundant, easier to find the checks effective today.
constraint fk_equipment_id foreign key (equipment_id) references equipment(equipment_id),
constraint fk_checkid foreign key (checkid) references checks(checkid),
constraint unq_check unique (equipment_id,checkid,eff_date)
);
create table equipment_check_audit(
audit_id number primary key,
equipment_check_asc_id number not null,
pass_fail_ind varchar2(1) not null,
audit_date date not null,
constraint fk_check_id foreign key (equipment_check_asc_id ) references
equipment_check_asc (equipment_check_asc_id)
);
可能还有其他角落案例可能需要覆盖和建模,但这应该会给你一个大概的想法。
以下是我测试的数据。
insert into equipment values (1, 'Item 1');
insert into equipment values (2, 'Item 2');
commit;
insert into checks values (100, 'Temperature');
insert into checks values (101, 'Robustness' );
insert into checks values (102, 'Stable' );
commit;
insert into equipment_check_asc values (1000,1,100,sysdate-10, NULL , 'Y');
insert into equipment_check_asc values (1001,1,101,sysdate-10, NULL , 'Y');
insert into equipment_check_asc values (1002,1,102,sysdate-2 , NULL , 'Y');
insert into equipment_check_asc values (1003,2,100,sysdate-30, sysdate-1 , 'N');
insert into equipment_check_asc values (1004,2,101,sysdate-30, NULL , 'Y');
commit;
delete from equipment_check_audit;
/*** Item A ***/
---checks made on 12/09
insert into equipment_check_audit values (10000, 1000, 'Y', sysdate-5);
---insert into equipment_check_audit(10000, 1000, 'Y', sysdate-5); No checks made on robustness even when it was needed.
-- no check done on stability. (as it was not needed).
---checks made today. (all positives case)
insert into equipment_check_audit values (10001, 1000, 'Y', sysdate);
insert into equipment_check_audit values (10002, 1001, 'N', sysdate);
insert into equipment_check_audit values (10003, 1002, 'Y', sysdate);
commit;
/*** Item B ***/
--checks made on 12/9
insert into equipment_check_audit values (10004, 1003, 'Y', sysdate-5);
--checks made today.
insert into equipment_check_audit values (10005, 1004, 'Y', sysdate);
commit;