每月安排和约会的数据库

时间:2017-06-29 19:17:30

标签: mysql database-design database-relations

我正在尝试创建一个医生和患者之间约会的小型系统。这是我的数据库(直到现在)。我有两个问题: 1)当用户登录应用程序时,我如何定义他是管理员,患者还是医生? 2)主要问题......我希望医生在他登录时,设定他的月度时间表(他是免费的日子和时间)和患者登录时寻找医生,查看他的日程表并制作一个约定。我想不出如何实施这个医生的“月度计划”。也许它会像专业桌一样与医生桌上的外键相连?但我如何实际制定时间表呢?

如果您在我的数据库中发现任何错误,请立即告诉我。 提前谢谢。

CREATE TABLE `user` (
  `user_id` int(4) NOT NULL AUTO_INCREMENT,
  `username` varchar(25) DEFAULT NULL,
  `password` varchar(25) DEFAULT NULL,
  `firstname` varchar(20) DEFAULT NULL,
  `lastname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
)


CREATE TABLE `admin` (
  `user_id` int(4) NOT NULL,
  PRIMARY KEY (`user_id`),
  FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
)


CREATE TABLE `patient` (
  `user_id` int(4) NOT NULL,
  `sin` int(4) DEFAULT NULL,    //social insurance number
  PRIMARY KEY (`user_id`),
  FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
)


CREATE TABLE `speciality` (
  `speciality_id` int(4) NOT NULL AUTO_INCREMENT,
  `speciality_name` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`speciality_id`)
)


CREATE TABLE `doctor` (
  `user_id` int(4) NOT NULL,
  `speciality_id` int(4) NOT NULL,
  PRIMARY KEY(`user_id`),
  FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`),
  FOREIGN KEY (`speciality_id`) REFERENCES `speciality` (`speciality_id`)
)

CREATE TABLE `appointment` (
  `doctor_id` int(11) NOT NULL,
  `patient_id` int(11) NOT NULL,
  PRIMARY KEY (`doctor_id`,`patient_id`),
  FOREIGN KEY (`doctor_id`) REFERENCES `doctor` (`user_id`),
  FOREIGN KEY (`patient_id`) REFERENCES `patient` (`user_id`)
)

以下是relation schema.

1 个答案:

答案 0 :(得分:0)

通过简要地查看您的架构,它看起来不错。

A"时间表"只是"约会"表,但您需要为其添加开始时间和结束时间。

该表SELECT上的WHERE doctor_id = X AND start_time >= first-day-of-the-month AND end_time < first-day-of-next-month为您提供X医生的日程安排。

<强> 修改

为了确定用户是管理员,患者还是医生,您有多种选择。

  • 选项#1:引入&#34;用户类型&#34;可能的值:"ADMIN", "PATIENT", "DOCTOR"

  • 选项#2:使用查询来确定是否可以在user_iduser或{{1}中找到admin的{​​{1}}表格。

  • 选项#3 :(我最喜欢的)在patient表中添加三个外键:doctoruseradmin_id,其中只有一个可能是非空的。

最后一种方法的优点是它维护了模式的关系性质:用户行与(admin,patient或doctor)行相关,数据库可以强制引用完整性,这意味着如果{{ 1}}字段为非null,然后数据库将确保该字段的值实际上对应于patient_id表中的doctor_id值之一。