Je crains que cette réponse sera beaucoup de références et très peu de code pratique, et il a été un certain temps depuis que je foiré avec ça, mais ...
Je pense que les deux technologies que vous voulez pour mélanger ici sont 'active databases' et 'temporal databases'.
La première serait utile pour évaluer les règles et ainsi de suite, et le second est utile pour stocker des données temporelles et d'évaluer à quand un certain enregistrement est valide. Les deux sont des domaines de recherche assez vastes, mais vous pouvez faire la plupart des choses temporelles en langage SQL (à condition que votre base de données ait un bon support). La partie active est plus difficile en SQL, mais PostgreSQL a au moins des règles pour aider légèrement avec cela. Je ne connais pas les autres bases de données, mais la plupart d'entre elles ont un support de règle/déclencheur/contrainte qui serait capable de traduire ce que vous cherchez.
Les bases de données actives sont des bases de données qui peuvent réagir aux changements dans les faits qu'elle stocke à l'aide de règles. Ces règles sont spécifiées dans les langues spécifiques à l'implémentation, mais pour les discussions quotidiennes, les règles Event-Condition-Action rules (règles ECA) sont courantes. Pour une introduction aux systèmes de bases de données actifs, lisez les articles The Active Database Management System Manifesto et Active Database Systems. Pour plus d'informations sur les règles ECA, consultez Logical Events and ECA Rules (les pages sont dans l'ordre inverse o_0) et Events in an Active Object-Oriented Database System.
Le traitement des événements est un cas particulier de la gestion des règles traitant de la gestion des événements composites et du déclenchement de leurs actions de manière appropriée. Une lecture intéressante à ce sujet est Composite Events for Active Databases: Semantics, Contexts and Detection et Anatomy of a Composite Event Detector. Voir également le site Complex Event Processing et les articles wikipedia Event Stream Processing et Complex Event Processing.
Les bases de données temporelles peuvent être vues comme une base de données qui peut comprendre l'heure, et en particulier deux types de temps spécifiques; temps valide et temps de transaction. L'heure valide d'un enregistrement est la période pendant laquelle cet enregistrement est valide et l'heure de transaction d'un enregistrement est l'heure pendant laquelle il est présent dans la base de données. Comme une bonne introduction pratique, je recommande le livre sur la façon de faire des bases de données temporelles dans SQL: Developing Time-Oriented Database Applications in SQL par Richard T. Snodgrass.
Oterhwise, tout ce que vous pourriez vouloir savoir sur les bases de données temporelles peut être lu dans Temporal Database Entries for the Springer Encyclopedia of Database Systems qui est un document assez complet (je commencerais à l'entrée 'base de données temporelle'), mais pour commencer un peu plus vite, consultez le Temporal Database Glossary qui est plutôt facile à parcourir et à lire, et le site Time Center dont la partie publications a (ou a eu ...) des liens vers les publications les plus remarquables de la région. Donc, maintenant que vous savez tout cela, vous voyez rapidement que l'image de la page 11 peut être exprimée comme un événement composite, et peut être détectée/évaluée en tant que telle à condition que vous ayez implémenté le sous-ensemble requis d'un événement composite détecteur, et le reste pourrait être exprimé comme une entrée dans les tableaux avec des aspects temporels :)
Martin Fowler adresse beaucoup de lui-même dans son Patterns for things that change with time qui résume de nombreux modèles qui traite du temps. En fin de compte, je créerais probablement un schéma de base de données pour les informations temporelles et j'utiliserais les règles DB pour les parties actives ou implémenterais cette partie dans l'application (il y a des dragons cependant). Si vous utilisez PostgreSQL, les mécanismes de règles sont décrits dans The Rule System partie des docs.
Beaucoup à lire, mais si vous comprenez bien tout cela votre valeur professionnelle nette peut aller jusqu'à tout un peu :)
En outre, de bonnes conditions de Google sont « base de données temporelle », « base de données active », la CEA Règle'.
Merci pour l'idée ... Un problème immédiat que je vois, cependant, n'est pas de pouvoir reconstruire les règles qui ont été utilisées pour générer la journée. Sauver "Chaque lundi" vous donnerait 52 (ou 53) points de données, mais le chargement de ces points n'impliquerait pas nécessairement "Tous les lundis". – majelbstoat
Modéliser le temps mieux alors. Avoir des tableaux des jours de l'année, des jours de la semaine, des mois, etc., tous liés par un time_id. Vous pouvez ensuite exprimer n'importe quelle règle (basée sur le jour) en utilisant des sélections sur ces tables. – SquareCog
@Dmitriy: Même si vous faites cela, vous avez le problème des tables à joindre, et quelle expression booléenne utiliser dans la clause WHERE pour combiner les termes. Ce n'est pas un problème que SQL a été conçu pour résoudre. –