Je suis sûr que vous êtes nombreux à avoir affaire à une base de données laide. Vous savez, cette base de données qui n'est pas du tout normalisée, cette base de données où vous devez faire une grande requête douloureuse pour obtenir les données les plus triviales, cette base de données qui est en production et vous ne pouvez pas changer un peu ... vous savez , "celui-là".
Ma question est, comment gérez-vous cela?
- Essayez-vous de créer une nouvelle base de données?
- Vous abandonnez et le laissez tranquille?
- Quels conseils pouvez-vous donner?
la source
Le dictionnaire de données est votre ami. Essayez également de procéder à la rétro-ingénierie de la base de données avec l'outil de rétro-ingénierie sur Visio et de créer votre propre ensemble de diagrammes. Parce que l'ingénierie inverse est interactive - vous créez les diagrammes - c'est beaucoup plus engageant que de lire un dictionnaire de données. L'activité du processus est son avantage et je trouve cela très relaxant de le faire.
La plupart du travail que je fais est dans l'entreposage de données, où fouiller les schémas de base de données du système source est quelque chose d'une activité principale. J'ai fait ce genre de choses à plusieurs reprises et je trouve que cela fonctionne très bien.
Visio pro n'est pas si cher et le moteur de modélisation Visio vous permet de partager un modèle entre plusieurs diagrammes. En prime, 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.
la source
En plus des idées de Bill Karwin, je suggère de parler aux utilisateurs - occasionnellement, les utilisateurs savent un peu à quoi sert leur base de données, surtout s'ils en font des rapports.
la source
J'en ai un très moche pour le logiciel d'un fournisseur, à part faire des suggestions, je ne peux pas faire grand-chose pour le changer. J'essaie toujours de faire changer les choses, mais comme c'est hors de mon contrôle, je suis coincé avec la camelote.
L'une des choses que j'ai rapidement commencé à utiliser, car la base de données n'a absolument aucune relation, est une requête de nom générale pour le schéma:
ou
Étant donné que certaines tables ont trop de colonnes mal nommées et beaucoup trop de colonnes à parcourir pour trouver ce que je pourrais utiliser pour former des relations entre les tables.
Je sais que cela n'aide pas beaucoup dans la partie de la refonte de la question, mais c'est très utile pour comprendre et déchiffrer le mauvais schéma.
la source
SchemaCrawler est mon outil de découverte de base de données qui possède quelques fonctionnalités qui facilitent l'exploration d'une base de données laide. SchemaCrawler possède une fonctionnalité de type "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 leur nom, et elles seraient probablement liées d'une manière ou d'une autre.
SchemaCrawler déduit également des relations de clés étrangères, même en l'absence de clés étrangères. Pour ce faire, il trouve des «associations faibles» à l'aide de conventions de dénomination communes, telles que les tableaux sont des noms sont généralement pluriels, mais les noms de colonnes ne le sont pas, et les noms de colonnes peuvent avoir un préfixe _ID. Vous pouvez trouver des tableaux associés à l'aide de ces relations inférées.
la source
Cela dépend de sa laideur, du contrôle que vous avez sur la conception et de 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 les ai traitées:
Données sur les employés
Il y a la base de données qui contient les données des employés. C'est une base de données de fournisseurs, donc je n'ai aucun contrôle dessus. (Un?) Heureusement, je n'y ai pas accès directement. Je reçois un vidage DTS tous les matins.
Le mieux que j'ai pu gérer est d'écrire un script qui nettoie les entrées du vidage du matin (oui, ce choix de mots était intentionnel) et le migre dans un format plus utile, et travaille à partir des données nettoyées.
Même si je pouvais le changer, je ne le ferais probablement pas - uniquement parce qu'il existe un grand nombre d'autres programmes qui dépendent de sa configuration telle qu'elle est, et je ne peux pas forcer un changement en eux.
Données de formation en ligne
C'était un gâchis de ma propre conception. Je l'ai construit tout juste sorti de l'université sans mentor pour m'aider ... Depuis, je le répare un peu à la fois. Puisque je contrôle le seul programme qui accède aux données, comme je mets à niveau des parties du site, je "mets à niveau" la configuration de la base de données. J'écrirai un script de transformation et le testerai vigoureusement sur une copie afin que je puisse m'assurer que toutes les modifications qui doivent être apportées soient effectuées.
Ça a été un long processus, mais ça avance bien.
Données de formation en classe
Mon projet pilote a été d'intégrer 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 infirmière enseignante qui a suivi un ou deux cours de programmation.
Cela a été un autre processus lent. Depuis que j'ai un contrôle total sur les programmes qui accèdent aux données, je les modifie petit à petit comme les données de formation en ligne.
Rétrospectivement, cela aurait été un candidat idéal pour commencer propre ... la vue arrière est toujours de 20/20.
À la fin...
Je ne sais pas à quel point cela a été utile, et je peux en dire plus (jusqu'à un certain point, yada yada juridique d'entreprise et tout). La réponse finale est "Ça dépend".
la source
Donc, après avoir lu toutes vos réponses, je vous donne les miennes:
Je cherche d'abord la "table principale", puis, avec un stylo et du papier, je commence à mapper les relations avec d'autres tables, après cela, s'il y a du code d'application à regarder, je commence à faire des croquis bruts sur le flux des données.
Après avoir obtenu une belle image sur le fonctionnement de la base de données, je commence juste à vérifier les endroits où changer les choses. C'est ça.
Je ne sais pas pourquoi mais je préfère le papier à tout logiciel de modélisation de base de données.
la source
En raison de son utilisation par une application externe, vous ne pouvez pas modifier "l'interface" de la base de données. Je ne sais pas quel type de base de données vous utilisez (oracle, mysql, mssql), mais je vois cela comme l'une des façons:
Les vues, les procédures stockées masquent les modifications (modifications) des bases de données internes.
la source
En plus de découvrir la structure de la base de données, j'ai constaté qu'il est également important de regarder la qualité des données . Une fois que vous avez compris la signification de chaque colonne, vous pouvez rechercher les endroits où il y a beaucoup de valeurs manquantes. Au fur et à mesure que vous vous familiarisez avec les données, vous pouvez également examiner où il existe des incohérences entre les valeurs des différentes colonnes.
la source
Cela dépend de la façon dont vous devez interagir. Pour les scénarios d'utilisation où le traitement par lots est acceptable, j'ai souvent trouvé qu'il était plus rentable (en termes de temps de développement et donc de coût pour le client) de regrouper les données dans une structure plus conviviale et de travailler contre cela.
la source
Si vous pouvez segmenter le problème en problèmes que vous pouvez envelopper votre cerveau, vous pouvez les attaquer un à la fois. Parfois, le simple fait de savoir qu'il y a une table qui n'est pas toute enculée peut vous donner une tête de pont pour travailler. De cette façon, vous étendez votre "espace propre" pour englober plus de la base de données en morceaux.
la source
Si vous avez Visio (qui fait partie de Microsoft Office), vous pouvez essayer la fonction de rétro-ingénierie . Ce n'est pas joli, mais cela vous donnera au moins un début (à une fraction du coût des "vrais" outils comme Rational Rose).
la source
Schema Spy est un très bel outil pour générer un ERD.
la source
Bill a donné une excellente réponse. J'ajouterais que je me connecterais à l'interface utilisateur en tant qu'utilisateur de test et essayer de comprendre exactement ce que les utilisateurs font avec les données. Cela vous aidera à comprendre pourquoi derrière certains des proc ou de la conception stockés. Comprendre ce que les données signifient et sont utilisées est essentiel pour comprendre une base de données.
Si la base de données concerne une fonction commerciale ou un sujet que vous ne connaissez généralement pas (par exemple, elle fait de la planification de vol et que vous n'avez auparavant travaillé que sur des applications financières), demandez aux utilisateurs du matériel de lecture sur le sujet ou allez à la bibliothèque. vous-même ou recherchez sur Internet le sujet. Demandez aux utilisateurs s'il existe des problèmes juridiques ou réglementaires dont vous devez être conscient. Encore une fois, certains de ces antécédents peuvent expliquer ce qui semble être des choix de conception étranges.
la source
S'il s'agit d'une base de données de fournisseurs (et j'en ai vu de très mauvaises), tout ce que vous pouvez faire est de vous en plaindre auprès du vendeur.
Pour les applications qui sont construites en interne, il suffit généralement de quelques informations aux développeurs et vous pouvez commencer à modifier le schéma afin d'améliorer les performances. Cela prend du temps et c'est généralement un processus lent.
D'après mon expérience, la création d'une nouvelle base de données n'est pas vraiment une option, car le déplacement de centaines de Go ou de To de données n'est pas tout à fait possible.
Le laisser seul n'est généralement pas une option. Au fur et à mesure que la quantité de données dans la base de données augmente, les performances vont de pire en pire (accordées au moment où je vois les problèmes, elles sont généralement sacrément mauvaises). Finalement, les utilisateurs ne pourront pas utiliser l'application car les performances sont si mauvaises.
la source
Ah ... la base de données laide, plus l'entreprise est grande, plus nous trouverons de bases de données héritées.
Cela ne fonctionne pas toujours, mais si nous ne faisons pas d'efforts, cela ne fera qu'empirer. J'essaie de repenser les bases de données avec les applications, cela pourrait ajouter plus de travail pour moi avec la migration des données, mais les performances sont un tour de magie que je retire toujours de mon chapeau.
Bonne chance avec ta vilaine petite amie;)
la source
Voyez si l'option d'une session de transfert de connaissances est à votre disposition, et si oui, profitez-en pleinement.
De plus, de nombreux SGBD sont livrés avec des outils qui vous permettent de dessiner / imprimer le schéma de la base de données avec des informations utiles (par exemple, des clés étrangères).
De plus, (volé à NXC), vous pouvez effectuer une rétro-ingénierie de la base de données via des outils comme Visio.
la source
J'aime lancer un profileur de requêtes et regarder ce qui se passe sur un système de production. Me donne une idée des tables qui sont «chaudes» et du type de requêtes qu'il y a contre elles.
la source
Placez 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 mettre la main dessus et ne pas m'inquiéter de le casser.
De plus, j'aime que The Daily WTF soit ouvert dans une fenêtre de navigateur. Prendre en charge la conception de quelqu'un d'autre implique généralement beaucoup de moments "Je ne peux pas croire qu'ils ont fait {WTF}", et il est utile d'avoir un endroit où aller où les gens comprennent votre douleur.
la source