Mysql 每月时间表和预约数据库

Mysql 每月时间表和预约数据库,mysql,database-design,database-relations,Mysql,Database Design,Database Relations,我正在尝试创建一个医生和病人之间预约的小型系统。这是我的数据库(到现在为止)。我有两个问题: 1) 当用户登录到应用程序时,我如何定义他是管理员、患者还是医生? 2) 主要的问题是…我希望医生在登录时设置他的每月时间表(他有空的天数和时间),患者在登录时搜索医生,查看他的时间表并预约。我想不出如何实施医生的这个“月计划”。也许它将是一个与医生表(如专业表)外键链接的表?但是我如何制定一个时间表呢 如果你在我的数据库中发现任何错误,请随时告诉我。 提前谢谢 CREATE TABLE `user`

我正在尝试创建一个医生和病人之间预约的小型系统。这是我的数据库(到现在为止)。我有两个问题: 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`)
)

下面是一个

通过简单查看您的模式,它看起来不错

“日程表”只是“约会”表,但您需要在其中添加开始时间和结束时间

A
在该表中选择
,其中医生id=X,开始时间>=每月第一天,结束时间<下个月第一天提供X医生的时间表

编辑

要确定用户是管理员、患者还是医生,您有许多选项

  • 选项1:引入一个“用户类型”,可能包含以下值:
    “管理员”、“患者”、“医生”

  • 选项2:使用查询确定是否可以在
    管理
    患者
    医生
    表中找到
    用户

  • 选项3:(我的最爱)向
    用户
    表中添加三个外键:
    管理员id
    患者id
    医生id
    ,其中只有一个可以为非空


最后一种方法的优点是它保持了模式的关系性质:用户行与(管理员、患者或医生)行相关,数据库可以强制引用完整性,这意味着如果
patient\u id
字段非空,然后数据库将确保此字段的值实际上与
患者
表中的
用户id
值之一相对应。

好的,谢谢,现在我明白了!。。。我的第一个问题呢?:)@我修正了我的答案。