Je crée la base de données pour surveiller l'état des fonctionnalités des applications. La logique est la suivante:Problème de conception de la base de données SQL
Chaque application possède sa propre liste spécifique de fonctionnalités que je surveille. Chaque fonctionnalité appartient à une seule application. Il y a une table de fonctionnalité qui a une clé étrangère à l'application
Chaque application s'exécute sur une ou plusieurs machines. Chaque machine peut exécuter une ou plusieurs applications. Ceci est une connexion MTM, donc il y a des applications de connexion à la table ApplicationInstance avec des machines.
La surveillance actuelle consiste à interroger ApplicationInstance. S'il y a un problème, les informations à ce sujet vont à la table AppInstanceError, qui contient la clé étrangère à ApplicationInstance. Si la requête aboutit, nous obtenons une liste des statuts de chaque fonctionnalité. Nous avons donc une table FunctionalityStatus avec des clés étrangères à ApplicationInstance & Fonctionnalité.
Je pense que c'est une mauvaise conception - pourquoi avons-nous plusieurs références à l'application? Qu'est-ce qui garantit que les deux pointeront vers la même application? Ou y a-t-il un moyen d'assurer cela?
Donc ma proposition de correctif est de connecter FunctionalityStatus avec des clés étrangères aux machines & Fonctionnalité. Mais dans ce cas, ils définissent ApplicationInstance alors quelle est la garantie d'avoir ApplicationInstance pour chaque paire? Ne devraient-ils pas être connectés d'une manière ou d'une autre? Dans le monde réel, la connexion existe et est évidente, alors est-ce OK de ne pas l'avoir dans la base de données? Y a-t-il un moyen de résolution de ce problème ou d'assurer des connexions invisibles à partir de la conception de données?
Pour le rendre plus clair, je préparais la conception de DB que j'ai maintenant: DB design http://img6.imageshack.us/img6/7479/dbexample.png
La seule chose qui manque est une connexion de FunctionalityStatus à la machine. Je vois deux façons OW faire une telle connexion:
- Ajouter une clé étrangère à ApplicationInstance - alors mes doutes sont:
- Comment faire en sorte que ApplicationId de fonctionnalité est le même que celui de ApplicationInstance?
- Est-ce que cette duplication de données est vraiment nécessaire?
- Ajouter une clé étrangère à la machine - et doutes:
- aura-t-il un record ApplicationInstance de propper pour chaque enregistrement FunctionalityStatus?
- S'il existe une connexion évidente entre ApplicationInstance et FunctionalityStatus (mentionnée dans le premier doute) que ne pouvons-nous pas voir dans la base de données?
- données Encore une fois la redondance becouse tous les enregistrements de ApplicationInstance sont (ou devraient être) visibles dans le tableau FunctionalityStatus
Ou peut-être tout le dessin est vissé et je dois trouver quelque chose de totalement autre?
est le functionalityStatus lié à chaque instance de l'application ou à une application particulière? Donc, si une instance d'application est DOWN, considérez-vous que l'application entière est en panne ou juste une instance particulière? Pouvez-vous également expliquer ce qui serait inclus dans les tables de fonctionnalités? Certaines données pourraient aider à voir comment il est utilisé –