Cam,
Вот модель / список таблиц и данных, которые я придумал.Я думаю, что он покрывает большую часть scnerios / запросов, которые вы можете использовать для извлечения данных из приложения.
Таблица оборудования и контрольные таблицы - это две независимые сущности, имеющие основной список оборудования и проверок соответственно.
Настройка
Всякий раз, когда вам необходимо настроить серию проверок для данного оборудования, вы вставляете новую запись в таблицу equipment_check_asc.Поскольку эти ассоциации / проверки основаны на времени, у нас есть действующая дата и конечная дата, чтобы определить, какие проверки необходимы в данный момент времени, а также вести исторический учет того, какие проверки были назначены в тот момент времени.
Фактическое ведение журнала
Фактические проверки выполняются с использованием дочерней таблицы (equipment_check_audit), в которой записываются проверки, выполненные для каждого оборудования за определенный день (всякий раз, когда они производятся).
Вы можете легко ответить на следующие вопросы из приведенной ниже модели, и это те, о которых я мог подумать.
a) Какие проверки необходимы для этого оборудования на сегодняшний день?
б) Какие проверки были необходимы для оборудования на указанную дату
в) Из необходимых проверок, сколько было выполнено, а сколько - нет (сегодня и в любой день).
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;