2017-06-29 7 views
0

J'essaie de créer un petit système avec des rendez-vous entre les médecins et les patients. Voici ma base de données (jusqu'à maintenant). J'ai deux questions: 1) Lorsque l'utilisateur se connecte à l'application comment je définis s'il est un administrateur, patient ou médecin? 2) La question principale ... Je veux que le médecin, lorsqu'il se connecte, établisse son horaire mensuel (Les jours et les heures il est libre) et le patient lorsqu'il se connecte pour chercher un médecin, voir son emploi du temps et faire un rendez-vous. Je ne peux pas penser à la façon de mettre en œuvre ce "calendrier mensuel" du médecin. Peut-être que ce sera une table liée à la clé étrangère à la table du médecin comme la table de spécialité? Mais comment puis-je faire un horaire?Base de données pour l'horaire et les rendez-vous mensuels

Si vous voyez quelque chose de mal dans ma base de données jusqu'à maintenant, n'hésitez pas à me le faire savoir. Merci d'avance.

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`) 
) 

Voici le relation schema.

Répondre

0

En regardant brièvement votre schéma, il semble bon. Un "calendrier" est simplement le tableau "rendez-vous", mais vous devrez y ajouter une heure de début et une heure de fin.

Un SELECT sur ce tableau WHERE doctor_id = X AND start_time >= first-day-of-the-month AND end_time < first-day-of-next-month vous donne l'horaire du médecin X.

EDIT

Pour déterminer si l'utilisateur est un administrateur, patient ou médecin, vous avez un certain nombre d'options.

  • Option # 1: introduire un "type d'utilisateur" avec des valeurs possibles: "ADMIN", "PATIENT", "DOCTOR".

  • Option # 2: utiliser une requête pour déterminer si le user_id du user se trouvent dans les admin, patient ou doctor tables.

  • Option # 3: (mon préféré) ajouter trois clés étrangères à la table user: admin_id, patient_id et doctor_id, dont un seul peut être non nulle.

L'avantage de la dernière approche est qu'elle maintient la nature relationnelle de votre schéma: la ligne de l'utilisateur est lié à la (admin, patient ou médecin) ligne et la base de données peut appliquer l'intégrité référentielle, ce qui signifie que Si le champ patient_id est non nul, la base de données s'assurera que la valeur de ce champ correspond bien à l'une des valeurs user_id de la table patient.

+0

ok merci, maintenant je l'obtiens! ... qu'en est-il de ma première question? :) –

+0

@GiannisSavvidis J'ai modifié ma réponse. –