it-swarm-fr.com

Comment plonger dans une base de données laideuse?

Je suis sûr que beaucoup d'entre vous sont/faisaient affaire à une base de données laid. Vous savez, cette base de données qui n'est pas normalisée du tout, cette base de données où vous devez faire une grande requête douloureusement pour obtenir les données les plus triviales, cette base de données qui est en production et que vous ne pouvez pas changer un peu ... vous savez , "Celui-la".

Ma question est, Comment traitez-vous?

  • Essayez-vous de faire une nouvelle base de données?
  • Vous abandonnez et laissez-le seul?
  • Quel conseil pouvez-vous donner?
26
eiefai

Ce n'est pas toujours possible, mais une chose qui a fonctionné pour moi dans certaines situations est de remplacer certaines des tables avec des vues. Vous pouvez ensuite ranger les tables en dessous et dans certains cas éventuellement éliminer les vues. Comme je l'ai dit, ne fonctionne que dans certains cas.

13
Miles D

Le dictionnaire de données est votre ami. Essayez également d'ingénierie inverse la base de données avec l'outil d'ingénierie inverse sur Visio et de construire votre propre ensemble de diagrammes. Parce que l'ingénierie inverse est interactive - vous construisez les diagrammes - c'est beaucoup plus attrayant que de lire via un dictionnaire de données. L'activité du processus est son avantage et je trouve tout à fait relaxant de le faire.

La plupart des travaux que je fais est dans l'entreposage de données, où les schémas de base de données de systèmes de source sont une activité principale. J'ai fait ce genre de chose à plusieurs reprises et trouver cela fonctionne vraiment bien.

Visio Pro n'est pas si coûteux et le moteur de modélisation Visio vous permet de partager un modèle parmi plusieurs diagrammes. En tant que bonus, vous pouvez ajouter des clés étrangères manquantes dans les diagrammes et vous obtenez un ensemble utile de documentation pour le système à la fin.

En plus des idées de Bill Karwin, je suggère de parler aux utilisateurs - occasionnellement des utilisateurs savent un peu de ce que leur base de données est utilisée, surtout si elles en rapportent.

6
Kramii

SCHEMACRAWLER est mon outil de découverte de base de données qui dispose de quelques fonctionnalités qui facilitent l'exploration d'une base de données laid. SCHEMACRAWLER dispose d'une fonctionnalité "Grep", qui vous permet de rechercher des tables et des colonnes à l'aide d'expressions régulières. Par exemple, vous pouvez rechercher des tables et des colonnes avec "compte" dans le cadre de leur nom, et ils seraient probablement liés d'une manière ou d'une autre.

Schemacrawler déduit également des relations clés étrangères, même là où il n'y a pas de clés étrangères. Cela le fait en trouvant des "associations faibles" utilisant des conventions de dénomination communes, telles que des tables, des noms sont généralement des pluriels, mais les noms de colonne ne sont pas, et les noms de colonne peuvent avoir un préfixe de _ID. Vous pouvez trouver des tables associées à l'aide de ces relations inférées.

6
Sualeh Fatehi

Je traite avec une très laide pour un logiciel d'un fournisseur, qui est mis à part de faire des suggestions, je ne peux pas faire grand chose à changer. Je pousse toujours à faire changer les choses, mais comme il est en dehors de mon contrôle, je suis coincé avec la malbouffe.

Une des choses que j'ai rapidement commencée à utiliser, car la base de données n'a absolument aucune relation, est une requête générale pour le schéma:

--Find Column named like 'blah' in a specific table
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V') AND O.Name like '%TableName%'
ORDER by O.Name

ou alors

--Find all Columns in DB with name like 'blah'    
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V')
ORDER by O.Name

Étant donné que certaines des tables ont trop de colonnes mal nommées, et beaucoup trop de colonnes pour rechercher ce que je pourrais pouvoir utiliser pour former des relations entre la table.

Je sais que cela n'aide pas beaucoup dans la refonte de la question, mais c'est très utile dans la compréhension et le déchiffrement du mauvais schéma.

6
Benjamin Anderson

Cela dépend de la moche, et combien de contrôle vous avez sur la conception et ce qui interagit avec elle. J'ai dû interagir avec un certain nombre de bases de données laides au fil des ans dans mon emploi actuel, et voici comment je leur ai traité:

données d'employés

Il y a la base de données qui détiennent des données d'employés. Sa base de données de fournisseur, donc je n'ai aucun contrôle sur elle. (Un?) Heureusement, je n'ai pas d'accès direct à celui-ci. Je reçois un DTS Dump tous les matins.

Meilleur que j'ai pu gérer est d'écrire un script qui nettoie l'entrée de la décharge du matin (oui que le choix de mots était intentionnel) et de la migrer dans un format plus utile et de travailler à partir des données nettoyées.

Même si je pouvais le changer, je ne serais probablement pas - seulement parce qu'il y a un grand nombre d'autres programmes qui s'appuient sur la manière dont il est configuré, et je ne peux pas forcer un changement d'eux.

données de formation en ligne

C'était un gâchis de mon propre design. Je l'ai construit à l'extérieur de l'université sans mentor pour m'aider ... J'ai depuis été un peu répandu un peu à la fois. Étant donné que je contrôle le seul programme qui accède aux données, car je mettez à niveau des portions du site, je "mettre à niveau" la configuration de la base de données. Je vais écrire un script de transformation et le tester vigoureusement sur une copie afin que je puisse vous assurer que tous les changements à effectuer sont fabriqués.

Son a été un long processus, mais son arrivée bien.

données de formation en classe

Mon projet pilote a intégré des données de 3 bases de données différentes, toutes conçues légèrement différemment par mon prédécesseur ... qui était une éducatrice infirmière qui a pris une classe de programmation ou deux.

C'est un autre processus lent. Étant donné que j'ai le contrôle total sur les programmes qui accèdent aux données, je les ai modifiées par un peu comme les données de formation en ligne.

Dans Retrospect, cela aurait été un candidat principal pour le début de la vie ... la vue postérieure est toujours 20/20.

à la fin ...

Je ne sais pas à quel point cela a été utile et je peux élaborer davantage (à un point, la compagnie légale Yada Yada et tous). La réponse finale est "cela dépend".

5
AnonJr

En raison de l'utilisation de l'application externe, vous ne pouvez pas modifier la base de données "interface". Je ne sais pas quel type de base de données vous utilisez (Oracle, MySQL, MSSQL), mais je vois cela comme une des façons:

  • bâtir une interface de base de données en utilisant des types d'objets tels que des procédures de visualisation et stockées.
  • réfactorisation étape par étape (normalisation, renommage sur le terrain ...)
  • changer l'application du client (si nécessaire)

Vues, ​​les procédures stockées masqueront les modifications de bases de données internes (modifications).

5
garik

Donc, après avoir lu toutes vos réponses, je vous donne le mien:

Je recherche d'abord la "Table principale", puis avec stylo et papier, je commence à mapper les relations avec d'autres tables, après cela, s'il y a un code d'application pour regarder, je commence à faire des croquis bruts sur la manière dont les données fluient.

Après avoir obtenu une belle image sur la façon dont le DB fonctionne, je viens de commencer à vérifier les endroits où changer de choses. C'est ça.

Je ne sais pas pourquoi mais je préfère le papier sur tout logiciel de modélisation de base de données.

5
eiefai

En plus de découvrir la structure de la base de données, j'ai constaté qu'il était également important de regarder la Qualité des données. Une fois que vous avez compris la signification de chaque colonne, vous pouvez rechercher des endroits où il y a beaucoup de valeurs manquantes. Lorsque vous devenez plus familier avec les données que vous pouvez également examiner où il existe des incohérences entre les valeurs dans différentes colonnes.

4
Eric Ness

Cela dépend de la façon dont vous devez interagir. Pour les scénarios d'utilisation où le mélange est acceptable, j'ai souvent trouvé le plus rentable (en termes de temps de développement et donc de coûts pour le client) afin de lotter les données à une structure plus amicale et de travailler contre cela.

4
Russell Steen

Si vous avez la visio (partie de Microsoft Office), vous pouvez essayer la fonction ingénieur inverseur . Ce n'est pas joli, mais cela vous donnera au moins un départ (à une fraction du coût des "vrais" outils comme Rational Rose).

4
Gaius

Schéma espion est un outil vraiment intéressant pour générer un ER.

3
Dónal

Bill a donné une excellente réponse. J'ajouterais que je me connecterais à l'interface utilisateur en tant qu'utilisateur de test et essayez de comprendre exactement ce que les utilisateurs font avec les données. Cela vous aidera à comprendre pourquoi derrière certains des processus ou design stockés. Comprendre ce que le moyen de données et est utilisé pour la compréhension d'une base de données une base de données.

Si la base de données est sur une fonction d'entreprise ou une matière, vous êtes généralement inconnu avec (disons que cela planifie et que vous avez déjà travaillé uniquement sur des applications financières), demandez aux utilisateurs de lire des éléments de lecture sur le sujet ou d'aller à la bibliothèque. vous-même ou recherchez Internet sur le sujet. Demandez aux utilisateurs s'il existe des problèmes juridiques ou réglementaires dont vous avez besoin. Encore une fois, une partie de ce sujet peut expliquer ce qui semble être des choix de conception étranges.

3
HLGEM

Ah ... La lache de la base de données laid, la grande entreprise est les bases de données les plus hérissées que nous trouverons.

  • Tuning for Performance Les gens ne se plaignent pas de ces bases de données jusqu'à ce qu'elles ne trouvent de problèmes de performance. Donc, dans notre organisation, nous identifions des requêtes individuelles et les ajusticulons comme un patch.
  • Limiter des données Maintenant, nous savons où se trouve la poubelle puante, essayez donc d'éviter le flux de données dans de telles bases de données. Créez des bases de données de stadification et redirigez vos données sur ces tableaux pour commencer et utiliser les anciens comme des décharges de données.
  • Évitez la thésaution de données Archives/Tronquez d'anciennes données qui ne sont plus nécessaires. Il devrait y avoir une équipe qui décide combien de temps les données sont nécessaires dans une base de données. Après cela, vous pouvez le déplacer vers des fichiers plats ou même pour enregistrer des lecteurs.
  • Phase IT Une fois que vous pouvez obtenir la redirection et la troncature des données. Convainquez les autres équipes de commencer à utiliser la nouvelle base de données.

Cela ne fonctionne pas toujours, mais si nous ne mettons pas d'efforts, cela ne va que s'aggraver. J'essaie de redéfinir les bases de données avec les applications, cela pourrait ajouter plus de travail pour moi avec la migration de données, mais la performance est une astuce magique que je tire toujours de mon chapeau.

Bonne chance avec votre petite amie laide;)

3
darwindeeds

S'il s'agit d'une base de données de fournisseur (et j'ai vu des très mauvaises), tout ce que vous pouvez faire est de vous plaindre au vendeur.

Pour les applications construites dans la maison, il prend généralement une certaine éducation aux développeurs et vous pouvez commencer à faire modifier le schéma afin que les performances s'améliorent. Cela prend du temps et c'est généralement un processus lent.

Dans mon expérience, la construction d'une nouvelle base de données n'est pas vraiment une option, car le déplacement des centaines de gbs ou de TBS de données n'est pas tout ce qui est réalisable.

Le laissant seul, il n'est généralement pas une option. Comme la quantité de données dans la base de données augmente les performances iront pire et pire (accordée au moment où je vois les problèmes qu'ils sont généralement assez mauvais.). Finalement, les utilisateurs ne pourront pas utiliser l'application car la performance est si mauvaise.

3
mrdenny

Voyez si l'option d'une session de transfert de connaissances est disponible pour vous, et si oui, profitez-en pleinement.

De plus, de nombreux SDBM sont livrés avec des outils qui vous permettent de dessiner/d'imprimer le schéma de la base de données avec des informations utiles (c'est-à-dire des clés étrangères).

De plus, (volé à partir de NXC), vous pouvez inverser l'ingénieur la base de données via des outils tels que Visio.

2
Kon

J'aime enfiler un profileur de requête et regarder ce qui se passe sur un système de production. Donne-moi une idée de quelles tables sont "chaudes" et le genre de requêtes qui y sont contre eux.

2
n8wrl

Mettez une copie de sauvegarde sur un serveur Sandbox, puis commencez à écrire et à exécuter des requêtes de test. Je trouve toujours un système complexe plus facile à comprendre si je peux avoir la main dessus et ne pas vous inquiéter de la casser.

De plus, j'aime avoir le quotidien WTF Ouvrir dans une fenêtre de navigateur. Prendre la conception de quelqu'un d'autre implique généralement beaucoup de "je ne peux pas croire qu'ils ont fait {wtf}" moments, et cela aide à avoir quelque part d'aller où les gens comprennent votre douleur.

1
MusiGenesis