2017-06-29 8 views
0

私は医者と患者の間のアポイントメントを持つ小さなシステムを作りようとしています。ここに私のデータベースがあります(今まで)。私は2つの質問を持っています: 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

あり、それはよさそうです。

「スケジュール」は単に「予定」テーブルですが、開始時刻と終了時刻を追加する必要があります。

SELECTそのテーブルWHERE doctor_id = X AND start_time >= first-day-of-the-month AND end_time < first-day-of-next-monthは、あなたに医師Xのスケジュールを与えます。

EDIT

ユーザーが管理者、患者や医師であるかどうかを決定するために、あなたは多くのオプションを持っています。

  • オプション#1:可能な値を持つ「ユーザータイプ」を導入してください:"ADMIN", "PATIENT", "DOCTOR"

  • オプション#2:useruser_idadminpatient、又はdoctor表に見出すことができるかどうかを決定するためにクエリを使用します。

  • オプション#3:(私のお気に入り)はuserテーブルに3つの外部キーを追加します:admin_idpatient_id、およびdoctor_id、その一方のみが非nullの場合もあります。ユーザー行が(管理者、患者や医師)行に関連して、データベースがあることを意味し、参照整合性を強制することができます。

最後のアプローチの利点は、それがあなたのスキーマのリレーショナルな性質を維持することですpatient_idフィールドがnullでない場合、データベースは実際にはこのフィールドの値がテーブル内のuser_id値の1つに対応することを確認します。

+0

大丈夫、今私はそれを得る!...私の最初の質問はどうですか? :) –

+0

@GiannisSavvidis私は私の答えを修正しました。 –

関連する問題