团队项目-数据库设计心得

一、项目简介**

医院内,医院信息系统中用户(病人)的生理数据涉及到用户的隐私,需要被加密保护。但同时,用户或医师,及医院管理人员又需要查询数据获取信息。这就导致了用户数据隐私和医疗信息查询之间的矛盾。

本项目研究的目的是设计开发一个既能加密保护用户数据隐私,又同时支持安全查询,范围查询用户数据的智慧医疗系统。

智慧医疗系统的目标是开发一款Web管理系统。系统可将医疗机构对用户的检查数据通过传统算法加密后上传到云服务器,服务器基于CIPE算法提供安全的查询数据功能。

二、系统的功能描述

要想设计好数据库,首先,我们应明确项目的需求,明确功能需求。

 

 

 

上图为根据需求画出的用例图。

三、确定实体

本系统的用户包括病患、医师和管理员。

病患通过手机号注册,并设置身份信息,设置密码之后,可以使用密码或短信验证码登录系统。病患可以查询数据、生成数据图表、查看我的医师、修改医师权限、删除医师、查询报告。

医师注册并设置身份信息后即可登录系统。医师可查询数据、生成数据图表、查看所诊病患列表。

管理员注册并设置身份信息后即可登录系统。管理员可查看日志、删除日志、管理用户,管理用户包括修改用户信息、修改密码,管理员还可查询所有医师可查询的数据,生成数据图表,数据表格加密上传。

通过各方面的分析,我们可以知道实体包括:医生,医生账户,科室,日志,权限,医生-病患关系,血常规体检表,牙科体检表,病患,病人账户。各实体包含的数据项分别如下:

(1)医生:医生编号、科室编号、医生账户编号、医生名字、电话号码、地址、出生日期、性别、简介、擅长领域、主要成就、国籍、民族、毕业院校、籍贯、相关著作、社会评价。

(2)医生账户:医生账户编号、医生编号、用户名、密码、电话号码。

(3)科室:科室编号、科室名称。

(4)日志:日志编号、用户名、类型、操作、时间。

(5)权限:病人编号、医生编号、血液科授权、牙科授权。

(6)医生-病患关系:病人编号、医生编号、日期。

(7)血常规体检表:病人编号、血检表编号、红细胞计数、白细胞计数、血小板计数、日期等。

(8)牙科体检表:病人编号、牙科检查表编号、叩痛、松动度、牙石、日期。

(9)病患:病人编号、病人账户编号、姓名、电话号码、出生日期、性别。

(10)病人账户:病人账户编号、病人编号、用户名、密码、电话号码。

另外,为了后期算法方便,我们还将部分数据建立了索引。

四、确定联系

通过以上分析,我们作如下规定:

(1)一个医生只能属于一个科室,一个科室可以包含多个医生;

(2)一个医生只能绑定一个账户,一个账户只能绑定一个医生;

(3)一个医生可以有多个病人,一个病人也可以有多个医生;

(4)一个病人只能绑定一个账户,一个账户只能绑定一个病人;

(5)一个病人可以有多个血常规体检表,一个血常规体检表只能属于一个病人;

(6)一个病人可以有多个牙科体检表,一个牙科体检表只能属于一个病人;

实体之间的联系有:

(1)医生与科室之间(1:M)

(2)医生与病人之间(M:N)

(3)医生或病人与账户之间(1:1)

(4)病人与体检表之间(1:M)

五、最终设计结果

*科室表(department)*

*

*名称****代码****数据类型****主要的****外来键****注释***
科室编号 departmentNo Integer TRUE FALSE 科室的编号
科室名称 departmentName Variable char(20) FALSE FALSE #必填字段;科室的名称,不超过20个字符

*医生信息表(doctor)*

*

*名称****代码****数据类型****主要的****外来键****注释***
医生编号 doctorID Integer TRUE FALSE 医生的编号,一个编号对应一个医生
医生名字 doctorName varchar(255) FALSE FALSE #必填字段;医生的名字
电话号码 phoneNo Char(11) FALSE FALSE #必填字段;医生的电话号码
地址 address varchar(255) FALSE FALSE 医生的家庭住址
出生日期 birthday Char(10) FALSE FALSE 医生的出生日期,格式为:xxxx-xx-xx
性别 sex Char(1) FALSE FALSE 医生的性别:'f'表示女性,'m'表示男性
简介 introduction Text FALSE FALSE 该医生的简介
擅长领域 expertise Variable characters (255) FALSE FALSE 该医生擅长的领域
主要成就 achievements Text FALSE FALSE 医生成就
国籍 nationality Variable characters (255) FALSE FALSE 医生国籍
民族 nation Variable characters (255) FALSE FALSE 医生民族
毕业院校 college Variable characters (255) FALSE FALSE 毕业院校
籍贯 nativePlace Variable characters (255) FALSE FALSE 籍贯
相关著作 works Variable characters (255) FALSE FALSE 相关著作
社会评价 evaluation Variable characters (255) FALSE FALSE 社会评价
科室编号 departmentNo int FALSE TRUE  
医生账户编号 daccountNo int FALSE TRUE  

*医生账户表(doc_account)*

*

*名称****代码****数据类型****主要的****外来键****注释***
医生账户编号 daccountNo Integer TRUE FALSE 医生账户的NO
用户名 userName Variable characters (16) FALSE FALSE #必填字段; 用户名:不超过16个字符
密码 password Variable characters (16) FALSE FALSE #必填字段;密码,长度为16个字符
电话号码 phoneNo Characters (11) FALSE FALSE #必填字段;电话号码,长度为11位字符
医生编号 doctorID int FALSE TRUE  

*管理员账户(admin_account)*

*

*名称****代码****数据类型****主要的****外来键****注释***
管理员账号编号 accountID Integer TRUE FALSE 管理员账户编号
用户名 userName Variable characters (16) FALSE FALSE #必填字段;用户名
密码 password Variable characters (16) FALSE FALSE #必填字段;密码,长度为16位字符
电话号码 phoneNo char(11) FALSE FALSE  

*日志表(log)*

*

*名称****代码****数据类型****主要的****外来键****注释***
日志编号 logNo Integer TRUE FALSE 日志编号
用户名 userName Variable characters (16) FALSE FALSE 执行动作的用户名
类型 type Variable characters (10) FALSE FALSE  
操作 action Variable characters (255) FALSE FALSE 记录用户所做的操作
时间 time Characters (19) FALSE FALSE 记录操作的时间点:格式为xxxx-xx-xx xx:xx:xx

*权限表(restriction)*

*

*名称****代码****数据类型****主要的****外来键****注释***
血液科授权 blood_grant Boolean FALSE FALSE  
牙科授权 tooth_grant Boolean FALSE FALSE  
病人编号 patientID int TRUE TRUE  
医生编号 doctorID int TRUE TRUE  

*医生病人关系表 (doctor_patient_relationship)*

*

*名称****代码****数据类型****主要的****外来键****注释***
日期 date Characters (19) FALSE FALSE  
病人编号 patientID int TRUE TRUE  
医生编号 doctorID int TRUE TRUE  

*手环表(bracelet)*

*

*名称****代码****数据类型****主要的****外来键****注释***
手环编号 braceletID Integer TRUE FALSE #必填字段;手环的ID
心率 heartRate Integer FALSE FALSE 正常人心率60-100每分钟
步数 steps Integer FALSE FALSE 步数,每天走5400-7900为正常
睡眠时间 sleepTime Integer FALSE FALSE 睡眠时间,按分钟计算

*病人账户表(patient_account)*

*

*名称****代码****数据类型****主要的****外来键****注释***
病人账户编号 paccountNo Integer TRUE FALSE #必填字段;病人的账户编号
用户名 userName Variable characters (16) FALSE FALSE #必填字段;用户名,最多16个字符
密码 password Variable characters (16) FALSE FALSE #必填字段;密码,长度为16个字符
手机号 phoneNo Characters (11) FALSE FALSE #必填字段;电话号码
病人编号 patientID int FALSE TRUE  

*病人信息表(patient)*

*

*名称****代码****数据类型****主要的****外来键****注释***
病人编号 patientID Integer TRUE FALSE #必填字段;病人的编号
姓名 patientName Variable characters (255) FALSE FALSE 病人的名字 #必填字段;#
电话号码 phoneNo Characters (11) FALSE FALSE #必填字段;# 病人的手机号码
出生日期 birthday Characters (10) FALSE FALSE 病人的生日
性别 sex Characters (1) FALSE FALSE #必填字段;# 病人的性别:f表示女性,m表示男性
病人账户编号 paccountNo int FALSE TRUE  

*血常规体检表表(blood_routine)*

*

*名称****代码****数据类型****主要的****外来键****注释***
血检表编号 bloodNo Integer TRUE FALSE 血常规检测表编号
红细胞计数 rbc Float FALSE FALSE 正常成年人每升血液中所含红细胞的数量:3.5~5.5(单位10^12)
白细胞计数 wbc Float FALSE FALSE 白细胞数量,正常成年人范围:5.0~10.0(单位10^9)
血小板计数 plt Float FALSE FALSE 血小板数量正常成年人范围:1.5~3.5(单位10^11)
血红蛋白 hb Integer FALSE FALSE 血红蛋白数量,正常成年人范围:110-160g/L
日期 date Characters (19) FALSE FALSE 检测日期:如2000-01-01 16:10:10
红细胞压积 HCT Integer FALSE FALSE 红细胞压积:参考值40-48单位(%)
平均红细胞体积 MCV Integer FALSE FALSE 平均红细胞体积,参考值80-97,单位fL
平均红细胞血红蛋白容量 MCH Float FALSE FALSE 平均红细胞血红蛋白含量,参考值26.5-33.5
平均红细胞血红蛋白浓度 MCHC Integer FALSE FALSE 平均红细胞血红蛋白浓度,参考值300-360
淋巴细胞计数 LY Float FALSE FALSE 淋巴细胞计数,参考值0.8-4.0
病人编号 patientID int TRUE TRUE  

*牙科检查表(tooth_routine)*

*

*名称****代码****数据类型****主要的****外来键****注释***
牙科检查表编号 toothNo Integer TRUE FALSE 表的编号
叩痛 pain Characters (1) FALSE FALSE 牙科检查之叩痛数据项:由轻到重分五个等级,用字符1-5表示
松动度 mobility Characters (1) FALSE FALSE 松动度检测,不松动-严重松动由1-3表示
牙石 tartar Characters (1) FALSE FALSE 有无牙石,牙石数量从少到多用1-5表示
日期 date Characters (19) FALSE FALSE 检测日期:年-月-日 时:分:秒共19位字符
病人编号 patientID int TRUE TRUE  

六、心得

这次的数据库设计,小组同学内部积极讨论,积极提出意见,改进数据库。在数据库设计中,我们要考虑全面,先设计概念模型,然后生成物理模型。

在设计过程中要注意:

一对多,两张表,多的加外键

多对多,三张表,关系表加两个外键

若两个实体之间是一对多的关系,则多的一方加外键。

若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体,实质上是一个较复杂的关系,它对应一张基本表。一般来讲,数据库设计工具不能识别多对多的关系,但能处理多对多的关系。

posted @ 2020-11-20 16:18  ERICCHEN10  阅读(313)  评论(0)    收藏  举报