我要求设计一个关系数据库来保存数据以回答诊所操作查询,例如:
●列出给定日期的每位医生的患者预约。
●当患者响铃预约时,请给出指定日期的可用时间段。
●检索患者的地址,通过邮件服务发送通知。
我有一个关系的数据库模式,如下所示:
ABC(doc-name,doc-gender,registration_num,资格,pat-name,pat-gender,DOB,地址,电话号码,约会日期,约会时间,类型)
我理解,将所有信息保存在一个表中通常不是一个好主意,因为可能存在重复,所以我改为制作了三个表:
DOC(姓名,性别,注册号,资格)
PAT(姓名,性别,DOB,地址,phone_num)
APPOINT(日期,时间,类型)
此设计是否还有其他问题?我应该摆脱类型吗?
谢谢
答案 0 :(得分:0)
将数据标准化(拆分)为三个表的方式看起来已经合理了。
以下您可以考虑:
医生&患者ID
患者的姓名并不是唯一的,这也不一定是医生的名字,因此我建议在DOC和PAT表中添加一个新的列用于ID。应将这些ID添加到APPOINT表中,以便将一名医生和一名患者链接到约会。
约会日期时间
当您使用数据库系统的相应DATETIME对象而不是将日期和时间分成两个不同的列时,更容易计算SQL中的时间和天数。
我会建议在约会的结束时间计算一个新字段,而不是类型。这使得计算医生的可用时间更容易。
主键
每个表都应该有一个主键,这对于表是唯一的。
如果是医生和患者,这可能是身份证。
在预约的情况下,这可能是医生的身份证和预约的开始时间,因为它们必须是唯一的。
架构不完整。我已经添加了上面提到的列的详细信息。
DOC:
- id INT NOT NULL AUTO_INCREMENT
- name
- gender
- registration_num
- qualification
- PRIMARY KEY (id)
PAT:
- id INT NOT NULL AUTO_INCREMENT
- name
- gender
- dob
- address
- phone_num
- PRIMARY KEY (id)
APPOINT:
- doc_id INT NOT NULL
- pat_id INT NOT NULL
- start DATETIME NOT NULL
- end DATETIME NOT NULL
- PRIMARY KEY (doc_id, start_datetime)