2009-11-26 3 views
0

Je souhaite avoir une table de base de données simple pour assurer le suivi de la visibilité de la catégorie programmée sur un index de site. Fondamentalement, il dira l'index pour afficher une catégorie de Noël entre Thanksgiving et le jour de Noël.Horaire de visibilité

Jusqu'à présent, je pense à l'aide d'un tableau comme celui-ci,

schedule_id SMALLINT, 

start_date TIMESTAMP, 

end_date TIMESTAMP, 

category_id SMALLINT, 

annual BOOL 

assez simple, la base de données peut sélectionner toutes les lignes où le temps se situe entre début/fin.

Mon problème vient avec mon drapeau annuel. Fondamentalement, je pense qu'une fois par jour, la base de données peut mettre à jour la table, et ajouter une année à n'importe quelle ligne où end_date < maintenant et annuel est vrai, sinon supprimer la ligne si elle a expiré.

Je crains que les années bissextiles ou quelque chose pourrait compenser la date reportée.

Suis-je sur la bonne voie ici?

Y a-t-il une meilleure façon de procéder?

Répondre

1

Si vous ajoutez une année, plutôt que (par exemple) 365 jours, vous n'aurez pas à vous soucier du problème de l'année bissextile.

ADDDATE(date, INTERVAL 1 YEAR) 

Ajout d'1 an à une date de jour bissextile vous obtient 28 Février pour l'année suivante

2008-02-29 -> 2009-02-28 

Vous pourriez envisager de rompre vos horaires hors de vos catégories et ayant une jointure catégories reliant la table aux horaires. Ensuite, si vous voulez partager un calendrier entre les catégories c'est un peu plus facile. Et potentiellement, vous pouvez utiliser les horaires ailleurs en ajoutant d'autres tables de jointure. Dernière suggestion, plutôt que d'avoir un champ annual, avoir un champ Nullable pour indiquer une périodicité: hebdomadaire, mensuel, etc, encore une fois vous donne un modèle horaire plus flexible.