每月计划和约会的数据库
Database for monthly schedule and appointments
我正在尝试创建一个小型系统,用于医生和患者之间的预约。这是我的数据库(直到现在)。我有两个问题:
1)当用户登录到应用程序时,我如何定义他是管理员、患者还是医生?
2)主要问题......我希望医生在登录时设置他的每月时间表(他有空的日期和时间)以及患者在登录时搜索医生,查看他的时间表并制作一个预约。我想不出如何实现医生的这个"monthly schedule"。也许它会是一个 table 与医生 table 的外键链接,例如专业 table?但是我实际上如何制定时间表?
如果您到目前为止在我的数据库中发现任何错误,请随时告诉我。
提前致谢。
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.
通过简要查看您的架构,它看起来不错。
A "schedule" 只是 "appointment" table,但您需要为其添加开始时间和结束时间。
table WHERE doctor_id = X AND start_time >= first-day-of-the-month AND end_time < first-day-of-next-month
上的 SELECT
给你 X 医生的时间表。
编辑
要确定用户是管理员、患者还是医生,您有多种选择。
选项 #1:引入一个 "user type" 可能的值:"ADMIN", "PATIENT", "DOCTOR"
.
选项 #2:使用查询来确定是否可以在 admin
、patient
中找到 user
的 user_id
,或 doctor
tables.
选项 #3:(我最喜欢的)向 user
table 添加三个外键:admin_id
、patient_id
和 doctor_id
,其中只有一个可能是非空的。
最后一种方法的优点是它维护了模式的关系性质:用户行与(管理员、患者或医生)行相关,并且数据库可以强制引用完整性,这意味着如果patient_id
字段为非空,则数据库将确保此字段的值确实对应于 patient
table 中的 user_id
值之一。
我正在尝试创建一个小型系统,用于医生和患者之间的预约。这是我的数据库(直到现在)。我有两个问题: 1)当用户登录到应用程序时,我如何定义他是管理员、患者还是医生? 2)主要问题......我希望医生在登录时设置他的每月时间表(他有空的日期和时间)以及患者在登录时搜索医生,查看他的时间表并制作一个预约。我想不出如何实现医生的这个"monthly schedule"。也许它会是一个 table 与医生 table 的外键链接,例如专业 table?但是我实际上如何制定时间表?
如果您到目前为止在我的数据库中发现任何错误,请随时告诉我。 提前致谢。
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.
通过简要查看您的架构,它看起来不错。
A "schedule" 只是 "appointment" table,但您需要为其添加开始时间和结束时间。
table WHERE doctor_id = X AND start_time >= first-day-of-the-month AND end_time < first-day-of-next-month
上的 SELECT
给你 X 医生的时间表。
编辑
要确定用户是管理员、患者还是医生,您有多种选择。
选项 #1:引入一个 "user type" 可能的值:
"ADMIN", "PATIENT", "DOCTOR"
.选项 #2:使用查询来确定是否可以在
admin
、patient
中找到user
的user_id
,或doctor
tables.选项 #3:(我最喜欢的)向
user
table 添加三个外键:admin_id
、patient_id
和doctor_id
,其中只有一个可能是非空的。
最后一种方法的优点是它维护了模式的关系性质:用户行与(管理员、患者或医生)行相关,并且数据库可以强制引用完整性,这意味着如果patient_id
字段为非空,则数据库将确保此字段的值确实对应于 patient
table 中的 user_id
值之一。