简略系统的设计和实现问题:
现在我们系统要设计一个模板库,
一个模板由很多个指标组成,
每个指标根据不同的条件会有不同的取值范围。
我们要根据用户输入的条件(item_id和年龄,性别等),加载对应的模板(包括指标及其取值范围(默认值))
exp:
create table tmpl_info
(tmpl_id number,
item_id number,
tmpl_name varchar2(200)
);
create table tmpl_detail
(tmpl_id number,
table_id number
);
create table table_info
(table_id number,
table_name varchar2(200),
default_value varchar2(50)
);
create table table_detail
(table_id number,
low_value number,
high_value number,
str_value varchar2(100),
condition_code varchar2(50),
condition_value varchar2(50),
condition_unit varchar2(50)
);
insert into tmpl_info(tmpl_id, item_id, tmpl_name) values(1, 1, '心脏压力测试');
insert into table_info(table_id, table_name, default_value) values(1, 'ABD', null);
insert into table_info(table_id, table_name, default_value) values(2, 'CPD', null);
insert into table_info(table_id, table_name, default_value) values(3, 'MAD', null);
insert into table_info(table_id, table_name, default_value) values(4, 'MMC', null);
insert into table_info(table_id, table_name, default_value) values(5, 'MAC', null);
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(1, 1, 10, null, 'AGE', 10, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(1, 10, 15, null, 'AGE', 20, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(1, 15, 20, null, 'AGE', 30, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(2, 10, 18, null, 'AGE', 10, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(2, 19, 30, null, 'AGE', 20, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(2, 31, 50, null, 'AGE', 30, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(3, 1, 10, null, 'AGE', 10, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(3, 11, 30, null, 'AGE', 20, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(3, 31, 60, null, 'AGE', 30, 'WEEK');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(4, 1, 10, null, 'SEX', 'F', '');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(4, 20, 30, null, 'SEX', 'M', '');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(5, 8, 18, null, 'SEX', 'F', '');
insert into table_detail(table_id, low_value, high_value, str_value, condition_code, condition_value,condition_unit)
values(5, 28, 40, null, 'SEX', 'M', '');
insert into tmpl_detail(tmpl_id, table_id)values(1,1);
insert into tmpl_detail(tmpl_id, table_id)values(1,2);
insert into tmpl_detail(tmpl_id, table_id)values(1,3);
insert into tmpl_detail(tmpl_id, table_id)values(1,4);
insert into tmpl_detail(tmpl_id, table_id)values(1,5);
--获取 Item_id = 1 的模板和指标,并加载 男性, 年龄为20周的指标范围数据。
/*假设每一个指标的条件是互斥的,且传入的所有条件都包含在配置的列表内*/
SELECT
tmpl_info.*,
tmpl_detail.*,
table_info.*,
table_detail.*
FROM tmpl_info
INNER JOIN tmpl_detail ON tmpl_info.tmpl_id = tmpl_detail.tmpl_id
INNER JOIN table_info ON tmpl_detail.table_id = table_info.table_id
left join table_detail on table_info.table_id = table_detail.table_id and table_detail.condition_value in ('M','20')
WHERE tmpl_info.item_id = 1;
|