Crénaux horaires

Crénaux horaires - SQL/NoSQL - Programmation

Marsh Posté le 29-01-2014 à 11:29:51    

Bonjour tout le monde,
 
je suis nouvelle sur ce forum et en prog de base de données et je sollicite votre aide.
en effet dans le cadre d' un projet de fin fin d`étude je voudrais faire évoluer une application de réservation de salles de conférence (certes programmée au départ par un collègue mais sur laquelle j'ai déjà eu à ajouter un certain nbre de modules ).
Là où je coince depuis maintenant plusieurs semaines c'est l' élaboration d' un concept qui me permette d' installer un créneaux horaires flexible.
Qui permettrait aux administrateurs pour chaque salle de fixer une Tranche horaire  pendant laquelle la dite salle pourrait être réservée.
 
Site: j'ai deux sites et sur un des sites j' ai 2 bâtiments
intervalles réprésente ici l' intervalle de temps qui séparera 2 réservations
 
Cet intervalle servira par exemple au nettoyage de la salle.
 
Les tables que j' ai ciblées comme étant importantes de ma base sont:
-Réservation(id : numéro identifiant de la réservation (clé de la table)
heure_debut  :  l'heure du début de la séance
 
heure_fin  :  l'heure de la fin de la séance  
 
date_début  : date de début de la séance
 
date_fin  :  date  de la fin de la séance
 
salle_id : l'identifiant de la salle réservée): qui contient la liste de toutes les réservations  
 
Salle: (id : numéro identifiant de la ressource (clé de la table)
domaine_id : identifiant du domaine  auquel elle est rattachée
 
nom_salle: nom de la ressource
 
description : description courte des fonctionnalités de la ressource
 
capacité : capacité (nombre de place dans le cas d'une salle, 0 sinon)
 
max_Pers : nombre maximum de réservations par utilisateur (-1 si illimité)
 
typ_salle: type de salle)  
 
Elle contient la liste des ressources (des salles)
Merci  pour vos conseils

Reply

Marsh Posté le 29-01-2014 à 11:29:51   

Reply

Marsh Posté le 31-01-2014 à 12:24:40    

si tu te fais une table des interventions avec  une durée d'intervention...
avec une durée spécifique...
puis tu integres ça dans ton planning? c'est pas assez flexible?
Intervention
intervention1 type 1  15 min ....
intervention2 type 2  30 min
 
Dans ton planning:
Réservation
ID, Date-Heure Debut, Date-Heure Fin, Id_Intervention (+/- Durée Intervention (venant de ta table à toi de voir) , Date-Heure Libre (= champ calculé = Date-heure Fin + Durée intervention ...
 
Après... plus qu'à travailler avec cette nouvelle date-heure "libre"...
 
Pourquoi mettre -1 dans ton nombre max de réservations par utilisateur?
Tu n'as pas la possibilité de créer un champ spécifique à cette notion?
En plus, cela ne semble, pas lié à ta salle... mais à celui qui réserve...
Bizzard :)
 
2 petits conseils, de vieux :)
Moins tu devoies la signification d'un champ, mieux tu te porteras ...  
Au lieu de mettre une valeur "bidon", style -1, 9999999,0, utilises la valeur null  (vide, non renseignée, nada) ... :)
... avec un alter table, cela doit passer ou alors à la création...
et après gères le fait que ta zone est null dans tes requetes...
=> pas de valeur parasite en cas de sum (pas exemple)... et tu dois avoir au pire une fonction du style ifnull(mazone, 0) ...
Guillaume

Reply

Marsh Posté le 31-01-2014 à 17:56:09    

Merci Guillaume pour cette réponse,
j' aimerai Stp néanmoins avoir une petite précision:  
lorsque tu dis: (+/- Durée Intervention (venant de ta table à toi de voir)
de quoi parles-tu?
 
nombre max de réservations par utilisateur?  
Tu n'as pas la possibilité de créer un champ spécifique à cette notion?  
En plus, cela ne semble, pas lié à ta salle... mais à celui qui réserve...  
 
Si max de réservation par utilisateur est bien lié à ma salle.
 
"Moins tu devoies la signification d'un champ, mieux tu te porteras " Ici non plus je ne comprends pas ce que tu veux dire.
En tout cas merci beaucoup pour tes conseils qui me sont d' une aide précieuse et que je met de suite en pratique.

Reply

Marsh Posté le 03-02-2014 à 14:29:03    

Bonjour!
1er point :
si tu crées la table intervention  (id, description, type, durée...)
et que dans ta table reservation tu ajoutes la clé de l'ID_intervention pour retrouver la durée de cette intervention...
tu peux dans certains cas dénormaliser ta base et ajouter la durée correspondante dans ton enregistrement (réservation)?
c'est à toi de voir... si cela est profitable en traitement, performance...
et aussi en évolutivité...
 
Concernant le 2nd point :
max_Pers : nombre maximum de réservations par utilisateur (-1 si illimité)  
Cela me semble (comme ça, sans trop connaitre ta base), une notion de droit lié à un utilisateur et non à la réservation de la salle en elle même. Non?
Si c'est bien le nombre max de réservation pour un utilisateur:
c'est bizzard que tu "stockes" cette information à cet endroit.
Ne serais ce pas plus dans la table utilisateur que tu devrais avoir ça ?
et si celui ci est couplé à une notion de droit (illimitée ou non)
crées plutot un champ boolean reprenant cette notion...
tu te feras moins c...r dans tes requetes et tes regles de gestions ne seront que plus simples à écrire et à maintenir...
exemple : USER X : Pas illimité  et salle max d'autorisée  
=> select count (*) from reservation where user ='X' sur 1 période donnée
en fonction de ces 3 info : tu gères la gestion la possibilité de reserver une nouvelle salle ou pas... super simple , non?
 
Plus simple que de faire un select max (max de reservation) sur ta table réservation? et de le comparer à quoi?  
 
Et on en arrive au 3eme point:
un champ = un type d'information...
Plus tu resteras fidele à ce principe... moins tu seras embétée dans la maintenance, l'évolutivité de tes regles de gestions et de ta base.
ex :
Je reviens au nombre de réservation...:)
le nombre max de réservation  est un nombre de salle reservée au dela duquel ton utilisateur ne peut plus réserver de salle, ok?
et donc un nombre de salle ne peut pas être négatif au pire il sera null, car pas renseigné.
 
Le fait que ce nombre de réservation peut être illimité ou pas, n'est pas de son "ressort", car ce n'est pas sa propriété, pas sa définition, et donc quand tu as besoin de cette notion, tu ne dois pas aller chercher ce champ, mais le champ relatif à cette notion "de droit" ...
Pour cela, tu crées un champ "propre" , Réservation illimitée Oui/Non
et un champ nombre de réservation autorisée : (>= 0 et /ou null )
Null dans le cas (où ce n'est pas renseigné, à toi de voir) ou dans le cas où Reservation illimitée (vrai) (à gerer dans tes règles de gestion).
J'espère que j'ai été plus clair lol  
 
Guillaume

Message cité 1 fois
Message édité par gpl73 le 03-02-2014 à 14:31:05
Reply

Marsh Posté le 03-02-2014 à 21:31:39    

Tout simplement genial Guillaume! Merci à toi.  
Sonia

Reply

Marsh Posté le 19-05-2014 à 13:51:31    

Bonjour Guillaume!,
après avoir en vain essayé d' appliquer tes conseils, me voici à nveau avec une autre proposition.
Tout d' abord je pense que j' ai du mal à évoluer par ce que non seulement je reprends une BD crée par quelqu' un d'autre
mais aussi par ce qu' en programation je ne sui pas un as.
Pour faire simple, j' ai pensé que je pourrais peut-être ajouter 2 colones(tranches horaires et Limitation) à la table qui répertorie les salles.
 
tranches horaires: pour fixer les heures où la salle serait indisponible entre deux réservations
Limitation:nbre de réservations maxi par jour pour une salle
 
j'aimerai savoir ce que tu en penses
Merci

gpl73 a écrit :

Bonjour!
1er point :
si tu crées la table intervention  (id, description, type, durée...)
et que dans ta table reservation tu ajoutes la clé de l'ID_intervention pour retrouver la durée de cette intervention...
tu peux dans certains cas dénormaliser ta base et ajouter la durée correspondante dans ton enregistrement (réservation)?
c'est à toi de voir... si cela est profitable en traitement, performance...
et aussi en évolutivité...
 
Concernant le 2nd point :
max_Pers : nombre maximum de réservations par utilisateur (-1 si illimité)  
Cela me semble (comme ça, sans trop connaitre ta base), une notion de droit lié à un utilisateur et non à la réservation de la salle en elle même. Non?
Si c'est bien le nombre max de réservation pour un utilisateur:
c'est bizzard que tu "stockes" cette information à cet endroit.
Ne serais ce pas plus dans la table utilisateur que tu devrais avoir ça ?
et si celui ci est couplé à une notion de droit (illimitée ou non)
crées plutot un champ boolean reprenant cette notion...
tu te feras moins c...r dans tes requetes et tes regles de gestions ne seront que plus simples à écrire et à maintenir...
exemple : USER X : Pas illimité  et salle max d'autorisée  
=> select count (*) from reservation where user ='X' sur 1 période donnée
en fonction de ces 3 info : tu gères la gestion la possibilité de reserver une nouvelle salle ou pas... super simple , non?
 
Plus simple que de faire un select max (max de reservation) sur ta table réservation? et de le comparer à quoi?  
 
Et on en arrive au 3eme point:
un champ = un type d'information...
Plus tu resteras fidele à ce principe... moins tu seras embétée dans la maintenance, l'évolutivité de tes regles de gestions et de ta base.
ex :
Je reviens au nombre de réservation...:)
le nombre max de réservation  est un nombre de salle reservée au dela duquel ton utilisateur ne peut plus réserver de salle, ok?
et donc un nombre de salle ne peut pas être négatif au pire il sera null, car pas renseigné.
 
Le fait que ce nombre de réservation peut être illimité ou pas, n'est pas de son "ressort", car ce n'est pas sa propriété, pas sa définition, et donc quand tu as besoin de cette notion, tu ne dois pas aller chercher ce champ, mais le champ relatif à cette notion "de droit" ...
Pour cela, tu crées un champ "propre" , Réservation illimitée Oui/Non
et un champ nombre de réservation autorisée : (>= 0 et /ou null )
Null dans le cas (où ce n'est pas renseigné, à toi de voir) ou dans le cas où Reservation illimitée (vrai) (à gerer dans tes règles de gestion).
J'espère que j'ai été plus clair lol  
 
Guillaume


Reply

Marsh Posté le 19-05-2014 à 14:46:38    

salut !
Aie, je vais pas pouvoir non plus trop t'aider... :)
Car là on touche vraiement "au métier"... si tu as besoin des ces 2 info... ajoutes les...
Perso, je ne vois pas en quoi, le nombre de réservation (d'une salle) max par jours est "important"... (mais je ne connais pas ton métier)
Par contre, fais "gaffe", il faut que tu ajoutes un champ correspondant aux nombres de réservation encours...
(les règles de gestion sont à définir, mais entre les plages horraires d'ouverture, ta nouvelle plage d'indisponiblité, la durée de la réservation, le nombre de reservation max... cela commence déjà à devenir l'usine à gaz)...
Ce champ devra être remis à "0" quotidiennement. et devra être updater (+/-1) des réservations/annulations de ta salle.
 
Guillaume


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 19-05-2014 à 19:57:03    

Limitation:nbre de réservations maxi par jour pour une salle  
Car en fonction du type de salle (salle de séminaire, grde salle de conférence, petite salle de conf ) il y a un nbre de réservation max. par jour
 
le champ correspondant aux nombres de réservation en cours. devrait-il m'aider à décompter à chaque fois ?
 
merci
 

gpl73 a écrit :

salut !
Aie, je vais pas pouvoir non plus trop t'aider... :)
Car là on touche vraiement "au métier"... si tu as besoin des ces 2 info... ajoutes les...
Perso, je ne vois pas en quoi, le nombre de réservation (d'une salle) max par jours est "important"... (mais je ne connais pas ton métier)
Par contre, fais "gaffe", il faut que tu ajoutes un champ correspondant aux nombres de réservation encours...
(les règles de gestion sont à définir, mais entre les plages horraires d'ouverture, ta nouvelle plage d'indisponiblité, la durée de la réservation, le nombre de reservation max... cela commence déjà à devenir l'usine à gaz)...
Ce champ devra être remis à "0" quotidiennement. et devra être updater (+/-1) des réservations/annulations de ta salle.
 
Guillaume


Reply

Marsh Posté le 19-05-2014 à 21:50:57    

c'est pas bien compliqué :
tu as un nombre max de reservation , tu as un nombre de reservation en cours...
et lors d'une reservation ou d'une annulation , tu updates la zone...
tant que tu n'es pas au max :) ou à zero cela dépend à quoi tu initialises le champ (tout les matins par un job schédulé)...
si tu n'as pas un champ max et un autre champ... comment  initialiser chaque jours, celui-ci?

 

Message cité 1 fois
Message édité par gpl73 le 19-05-2014 à 21:52:56

---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 20-05-2014 à 11:34:05    

gpl73 a écrit :

c'est pas bien compliqué :
si tu n'as pas un champ max et un autre champ... comment  initialiser chaque jours, celui-ci?
 


 
Je ne comprends pas ta question :??:

Reply

Marsh Posté le 20-05-2014 à 11:34:05   

Reply

Marsh Posté le 20-05-2014 à 13:48:07    

Il te demande comment tu réinitialises tes compteurs ? Car si tu le fais ps à une certaine périodicité (a priori, tous les jours), le compteur va bien finir par atteindre sa valeur max...
 
Edit : au passage, tout ce qui peut être calculé n'est pas stocké en base. Typiquement, les infos que t'as en base doivent te permettre de calculer en temps réel le nb de réservations en cours (que ça soit au total ou pour chaque utilisateur). Pas besoin de stocker ce genre de valeur. :o


Message édité par rufo le 20-05-2014 à 13:50:15

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-05-2014 à 13:51:15    

Tiens, un petit lien précisant certaines règles de base pour bien modéliser une BD : la forme 3 NF de Codd
http://fr.wikipedia.org/wiki/Forme [...] me_normale


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-05-2014 à 20:13:00    

ruffo, tu as raison , je n avais pas pensé aux champs calculés...
Il y a des fois qd meme que c'est bien pratique de ne pas avoir à recalculer certaines informations... meme si c'est pas dans les "normes"

Message cité 1 fois
Message édité par gpl73 le 20-05-2014 à 20:15:59

---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 21-05-2014 à 10:07:48    

gpl73 a écrit :

ruffo, tu as raison , je n avais pas pensé aux champs calculés...
Il y a des fois qd meme que c'est bien pratique de ne pas avoir à recalculer certaines informations... meme si c'est pas dans les "normes"


Non, il ne faut pas les calculer et stocker sauf si ça pose des pbs de perfs et qu'on a tout tenté avant pour les réduire (matériel, index, optimisation des requêtes, tuning du SGBD...). Alors, seulement, on peut stocker des champs calculés, et tant qu'à le faire bien, via des procédures stockées pour éviter les incohérences.
 
Ne pas respecter la forme 3NF avec des raisons justifiées, OK, sinon, tu peux être sûr que ça va t'introduire des bugs, des complications de codage et des pbs de maintenance... La BD, dans une appli de gestion, c'est l'équivalent des fondations d'une maison : si celles-ci sont pourries, tout ce qui est dessus finira par s'écrouler. :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-05-2014 à 17:19:50    

:jap:  
tout à fait d'accord avec toi, Rufo :)
c'était juste pour l'exemple que je disais ça...


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 21-05-2014 à 17:30:59    

Attention, moi, je suis un intégriste de la forme 3NF de Codd :o... :D


Message édité par rufo le 21-05-2014 à 17:31:35

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed