2017-06-29 29 views
0

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

回答

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:引入一个“用户类型”,可能的值为:"ADMIN", "PATIENT", "DOCTOR"

  • 选项#2:使用查询来确定是否useruser_id可以在adminpatient,或doctor表中查到。

  • 选项#3:(我的最爱)添加三个外键的user表:其中只有一个admin_idpatient_iddoctor_id,可能非空。

最后一个方法的优点是,它保持您的架构的关系性质:用户行有关(管理员,患者或医生)行,该数据库可以实施参照完整性,这意味着如果patient_id字段非空,那么数据库将确保该字段的值确实对应于patient表中的user_id值之一。

+0

好的谢谢,现在我明白了... ...我的第一个问题呢? :) –

+0

@GiannisSavvidis我修改了我的答案。 –