这个关系数据库模式有什么问题?

时间:2018-04-05 06:13:54

标签: database-design relational-database

enter image description here

我要求设计一个关系数据库来保存数据以回答诊所操作查询,例如:

●列出给定日期的每位医生的患者预约。

●当患者响铃预约时,请给出指定日期的可用时间段。

●检索患者的地址,通过邮件服务发送通知。

我有一个关系的数据库模式,如下所示:

ABC(doc-name,doc-gender,registration_num,资格,pat-name,pat-gender,DOB,地址,电话号码,约会日期,约会时间,类型)

我理解,将所有信息保存在一个表中通常不是一个好主意,因为可能存在重复,所以我改为制作了三个表:

DOC(姓名,性别,注册号,资格)

PAT(姓名,性别,DOB,地址,phone_num)

APPOINT(日期,时间,类型)

此设计是否还有其他问题?我应该摆脱类型吗?

谢谢

1 个答案:

答案 0 :(得分:0)

将数据标准化(拆分)为三个表的方式看起来已经合理了。

以下您可以考虑:

  • 医生&患者ID
  • 约会日期时间
  • 主键

医生&患者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)