J'ai les conditions suivantes pour une feuille de temps dans une application web:Base de données: meilleure façon de modéliser ces exigences?
- Les utilisateurs peuvent créer des entrées
- entrées ne peuvent être créées et modifiées dans le mois en cours et dans le dernier mois si elle n » t "fermé".
- Un mois se ferme automatiquement le dixième jour du dernier mois ou plus tôt si un utilisateur choisit manuellement de le faire.
Actuellement, j'ai les tables utilisateur et l'entrée avec les attributs suivants:
utilisateur:
- id
- Nom
Entrée:
- id
- userid
- Date
- starttime
- endtime
- notes
La question est: Quelle est la meilleure façon de modéliser mes besoins dans la base de données? Mon idée est d'ajouter un champ booléen "lastMonthIsClosed" à la table User et de planifier un travail mensuel qui définit le champ à true pour tous les utilisateurs le dixième jour de chaque mois et à false pour tous les utilisateurs le premier jour de chaque mois. Alternativement, il pourrait également être un champ de date "lastClosedMonth" ...
Je me demande s'il existe une approche plus élégante pour modéliser ces exigences?
Merci pour votre réponse! Qu'en est-il de la restriction à la création de nouvelles entrées? Si "closed" est un attribut d'une entrée, alors il est possible d'empêcher l'édition d'entrées existantes (en plaçant closed à true) mais comment empêcher la création de nouvelles entrées au cours du dernier mois? Aussi, est-il vraiment logique que «fermé» soit un attribut d'entrée? Il sera réglé sur une base mensuelle de toute façon ... il n'est pas possible de fermer juste quelques articles dans un mois, c'est tout ou rien. –
Voir ci-dessus: "déclencheur BEFORE INSERT au niveau de la ligne". Je pense qu'il est logique de considérer «fermé» comme un attribut d'entrée. "Fermer un mois" signifie vraiment "fermer un mois d'entrées". Et un jour, on vous dira probablement quelque chose comme: «Heinrich fait l'objet d'une enquête pour détournement de fonds et entrave à la justice, et il ferme toutes ses entrées entre le quatrième et le douzième jour de ce mois. –
Vous avez raison, cela a du sens. Cependant, je ne comprends toujours pas complètement votre solution. Disons que j'ai trois entrées: a, b, c a et b sont dans le dernier mois, c est dans le mois en cours, aujourd'hui est le cinquième jour du mois. Maintenant, l'utilisateur décide de fermer les entrées du dernier mois, donc je marque les entrées a et b comme "fermées". Comment puis-je déterminer qu'aucune entrée ne peut être insérée avec une date au cours du dernier mois? Que devrait faire ou vérifier le déclencheur susmentionné? En fonction de l'horodatage, vous pouvez insérer l'entrée car le jour du mois en cours est <= 10 (voir les conditions ci-dessus). –