查看: 4360|回复: 7

[讨论] 数据库设计和实现方案

[复制链接]
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
跳转到指定楼层
1#
发表于 2018-6-27 13:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
简略系统的设计和实现问题:

现在我们系统要设计一个模板库,
一个模板由很多个指标组成,
每个指标根据不同的条件会有不同的取值范围。

我们要根据用户输入的条件(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;


论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
2#
发表于 2018-6-27 21:39 | 只看该作者
楼主想要问什么?

使用道具 举报

回复
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
3#
 楼主| 发表于 2018-6-28 15:33 | 只看该作者
newkid 发表于 2018-6-27 21:39
楼主想要问什么?

主要是想问思路,这种多对多的匹配情况,应该要怎么设计和实现?我现在采取的这种办法只能用于演示,不能在实际的业务系统来使用。漏洞太多了

使用道具 举报

回复
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
4#
 楼主| 发表于 2018-6-28 15:47 | 只看该作者
newkid 发表于 2018-6-27 21:39
楼主想要问什么?

如图,我这边在通过条件来获取,模板对应的参数的取值范围时,没有做到精准匹配。我想问的是这种有没有好一点的实现方式和思路呢,超人大神。

1.png (12.35 KB, 下载次数: 69)

1.png

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
5#
发表于 2018-6-28 21:57 | 只看该作者
给出清晰的需求,到底这些模版指标是什么鬼,用简单例子说明白。输入是什么,输出是什么,目前的所谓“漏洞”在哪里,举出例子来。

使用道具 举报

回复
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
6#
 楼主| 发表于 2018-6-29 10:20 | 只看该作者
newkid 发表于 2018-6-28 21:57
给出清晰的需求,到底这些模版指标是什么鬼,用简单例子说明白。输入是什么,输出是什么,目前的所谓“漏洞 ...

背景:这个模板是给人体做B超用的,根据医学上的检查部位来建立,一个检查部位对应一个模板。指标就是超声设备在做超声检查所测量出来的一些属性。比如 血流速度,血管厚度,心脏大小等。
这些属性在不同的条件下会有不同的取值范围。比如成人男女的心跳值范围,胎儿在10周和20周的 头部,手脚的大小也不一样。

输入:病人信息,包括,检查部位,性别,年龄(成人岁,孕妇及新生儿用周)等。
输出:模板,模板对应的指标及指标范围区间。

这样的话,在系统接收到设备传输过来的测量值后,根据该病人的身体条件(性别,年龄等),获取到检查指标的正常范围,然后和测量值进行比较,就可以检测出这些指标是否有异常。(当然,这个过程医生也会干预,通过医生的经验或者病人的实际条件去判断。系统只能帮他做一部分功能)

可能的问题(漏洞):
首先,在不知道指标有哪些 适应条件 的时候,我不太好明确的获取病人的那些属性(当然,我可以不管其它条件,先把病人所有可能出现的属性先提取出来)。
其次,病人的属性和指标配置里面的 condition_code 没有强关联,我现在的办法是把病人所有的属性查出来,然后遍历condition_value值。(我是否需要对 condition_code 和 病人属性字段建立一个映射关系?)






使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
7#
发表于 2018-6-29 21:57 | 只看该作者
如果你的查询条件是有限的,应该把这些条件设计成列,而不是行。

指标表=(模版ID,指标名称,正常值(或范围),年龄,性别)

那么你只需要SELECT ... FROM 指标表 WHERE 年龄=... AND 性别=...

使用道具 举报

回复
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
8#
 楼主| 发表于 2018-6-30 10:43 | 只看该作者
newkid 发表于 2018-6-29 21:57
如果你的查询条件是有限的,应该把这些条件设计成列,而不是行。

指标表=(模版ID,指标名称,正常值(或 ...

我明白了,这确实是一个好办法。我老想着怎么样让那个条件做成自适应配置,反而增加了难度。这样直接把条件限定好,变得更简单了(我只需要找医生去收集这些条件)。谢谢大师,

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表