2009-05-18 10 views
1

Je voudrais des points de vue sur la meilleure façon de gérer les situations où vous avez des données de base de données normales (traditionnelles) et en même temps avoir des données plus proches de " ini fichier "et vous voulez maintenir l'intégrité entre eux (données heirachical?). Par exemple, supposons que j'ai une table "CURRENCY" avec 100 lignes. Par exemple, supposons que j'ai une table "CURRENCY" avec 100 lignes. Dans le même temps, j'ai un paramètre système pour «devise par défaut» et cela doit correspondre à l'une de ces 100 lignes.conception de base de données pour la tradition et des données de type ini avec intégrité

À l'heure actuelle, je stocke le code de devise par défaut dans un fichier de configuration XML, un fichier ini ou le registre Windows. C'est très bien pour les données mais c'est un peu de travail pour s'assurer que les valeurs dans le fichier XML correspondent bien aux valeurs de clé étrangère valides dans la base de données. Comment cela peut-il être fait (déclarativement?) Dans une base de données afin que les données hirachiques puissent faire référence et donc avoir une intégrité avec les données relationnelles?

Répondre

0

Il peut être judicieux de stocker la valeur par nom dans votre fichier de configuration, plutôt que d'utiliser un ID de clé étrangère. Le fichier de configuration pourrait avoir "USD", alors votre code ferait une recherche par nom pour obtenir la ligne dans la table CURRENCY.

0

Cela est impossible car le paramètre de configuration peut toujours être mis à jour par un programme externe tel qu'un éditeur de texte, regedit, etc. La seule façon d'empêcher cela serait d'avoir un service qui surveille continuellement le fichier ou le registre paramètres et n'a pas autorisé les modifications, sauf si la base de données était en cours d'exécution et une vérification d'intégrité pourrait également être effectuée. C'est évidemment exagéré - la bonne solution est de stocker les données de configuration dans la base de données.

+0

Je suppose que ce que je demande est, comment ce genre de chose peut-il être fait seulement dans une base de données? c'est-à-dire au lieu d'utiliser un fichier de configuration, comment les bases de données modernes gèrent-elles cela (plutôt que la méthode plutôt laide d'avoir une table avec une seule ligne dedans)? –

+0

Quel est le problème avec une table avec une seule ligne? Ce n'est pas laid, et pourrait bien être la meilleure solution. Cependant, la plupart des applications ont plus d'un paramètre de configuration, vous pouvez donc vous retrouver avec plusieurs lignes. –

1

Il se peut qu'une table avec 2 colonnes, une clé (ou un nom) et une colonne de valeur fasse ce dont vous avez besoin. Mettez vos données relationnelles dans des tables normalisées et les données de type 'config' dans la table des paires clé/valeur.

+0

Ceci est similaire à ce que j'ai maintenant, où la colonne "valeur" dans la table de configuration est des données XML. Les bases de données les plus modernes prennent-elles en charge l'intégrité référentielle dans les données XML contenues dans une ligne? –

+0

Je ne connais aucun moyen d'avoir RI en XML. D'après ce que je comprends de votre question, je travaillerais à découper les données en paires clé/valeur distinctes et en ayant une valeur par clé. Si vous avez encore XML, les données sont-elles décomposées en une paire clé/valeur? – Karl

+0

BTW que la modélisation clé/valeur pour les informations de configuration est exactement ce que nous faisons dans LedgerSMB. –

Questions connexes