Je développe une application qui gardera une trace de diverses informations sur les médecins qui sont affiliés à mon lieu de travail. Une chose que nous suivons, c'est leur disponibilité par heure (matin, après-midi et soir) pour chaque jour de la semaine (lundi - dimanche). En outre, nous allons stocker un commentaire facultatif sur la disponibilité des praticiens, quelque chose comme "Ne fonctionne pas pendant la pleine lune."Comment stocker la disponibilité du praticien (jour de la semaine et heure de la journée) dans SQL Server
Le formulaire d'entrée/affichage pour cette information sera le tableau avec les jours de la semaine comme en-têtes de colonne et les heures du jour comme en-têtes de ligne. Des cases à cocher indiqueront si le praticien est disponible pendant la période spécifiée.
J'ai du mal à trouver comment stocker ces informations dans la base de données. La solution la plus évidente pour créer une table avec 24 colonnes (21 pour 7 jours * 3 fois, 1 comme clé primaire, et 1 pour la clé étrangère référant au praticien, et 1 pour le commentaire). Ce qui est une table de merde, mais au moins c'est facile à sélectionner et à mettre à jour.
Une autre solution consiste à créer une table avec des attributs:
- practitioner_id :: int (clé étrangère et de clé primaire)
- day_of_week :: int (clé primaire) (pourrait aussi être Enum, mais je ne pense pas que SQL Server a ce type)
- matin :: bit
- après-midi :: bit
- soir: bit
C'est une table moins laide, mais ce sera difficile à mettre à jour, car je devrais avoir une mise à jour séparée pour chaque jour de la semaine. Le commentaire devra également être stocké en dehors de cette table. Une autre solution peut être d'avoir une colonne pour chaque jour de la semaine, le type de données étant BLOB (ou quelle que soit la version de SQL Server). Et puis stocker les informations de temps comme un tableau de taille trois. Mais je suis sûr que cela casse toutes les règles d'une bonne conception de base de données. Cela limiterait également l'efficacité des requêtes select.
Des idées sur la façon de stocker ces données?
EDIT:
Pour clarifier les choses, nous ne sommes intéressés à ce que leur horaire de la semaine moyenne est. Des choses comme les vacances et les vacances peuvent être ignorées. Sur le frontal, les informations seront affichées sous la forme d'une grille, avec des colonnes représentant les jours de la semaine et des lignes représentant les heures du jour.
Il se peut que cette information doive être recherchée. Par exemple, nous voudrons peut-être faire un rapport de tous les pratiquants qui travaillent le lundi soir.
Si un praticien est disponible le lundi après-midi, est-ce que cela veut dire qu'il sera disponible CHAQUE SIMPLE lundi après-midi? Donc, vous n'avez pas besoin de prendre en compte les vacances, les vacances, etc? De toute façon, ne pensez même pas à des tableaux ou des blobs. Ce sont des informations discrètes et appartiennent à des colonnes individuelles - pensez-vous vraiment qu'un blob ou un tableau sera plus facile à gérer? Pourquoi? –
Avez-vous besoin d'afficher l'horaire, ou vérifiez si un moment donné est dans la disponibilité d'un praticien, ou autre chose? I.e, quelle est l'application? –
Personnellement, je préférerais la solution pour stocker 24 colonnes (tous les champs de bits). Un enregistrement pour chaque praticien semble assez bon - regarder vers l'avenir - toute déclaration choisie sera beaucoup plus facile avec une rangée pour chaque personne - que jusqu'à sept lignes pour chacun! –