2017-06-29 27 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我修改了我的答案。 –