回答:
最初に行うことは、Entity-Relationship Diagram(ERD)を作成することです。コマンドラインツールでメタデータを簡単に説明できる場合もありますが、時間を節約するために、ダイアグラムを自動的に生成できるツールがいくつかあります。
次に、各テーブルと列を調べて、格納されているものの意味を確実に学習します。
第三に、各関係を調べて、テーブルが互いにどのように関係しているかを理解していることを確認します。
第4に、ビューまたはトリガーを読んで、カスタムデータ整合性の強制またはカスケード操作を理解します。
5番目に、ストアドプロシージャを読み取ります。また、SQLアクセス権限がある場合は読み取ります。
6番目に、データベースを使用するアプリケーションコードの一部を読み通します。そこで、追加のビジネスルールとデータ整合性ルールが適用されます。
更新: おもしろいチェックリスト付きの興味深い記事「データベースを継承するときの9つのこと」を読んだだけです。
概要:
データ辞書はあなたの友達です。また、Visioのリバースエンジニアリングツールを使用してデータベースをリバースエンジニアリングし、独自のダイアグラムセットを作成してみてください。リバースエンジニアリングはインタラクティブであるため(図を作成する場合)、データディクショナリを読むよりもはるかに魅力的です。プロセスの積極性はその利点であり、これを行うことは非常にリラックスできると思います。
私が行う作業のほとんどはデータウェアハウジングで行われます。そこでは、ソースシステムデータベーススキーマを突くことが中核的な活動の1つです。私はこのようなことを非常に多くの機会に行ってきましたが、それは本当にうまくいくと思います。
Visio proはそれほど高価ではありません。Visioモデリングエンジンを使用すると、複数の図でモデルを共有できます。ボーナスとして、不足している外部キーを図に追加すると、システムに関する有用な一連のドキュメントを最後まで取得できます。
Bill Karwinのアイデアに加えて、ユーザーと話すことをお勧めします-時折、ユーザーがデータベースの用途をかなり知っていることがあります。
ベンダーのソフトウェアの非常にいものを扱っていますが、提案をすることは別として、それを変更することはあまりできません。私は常に物事を変えようと努力していますが、それは私の制御の範囲外であるため、私はジャンクにこだわっています。
データベースにはまったく関係がないため、私がすぐに使い始めたものの1つは、スキーマの一般的な名前クエリです。
--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
または
--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
一部のテーブルには名前が不適切な列が多すぎるため、テーブル間でリレーションシップを形成するために使用できるものを見つけるにはあまりにも多くの列があります。
これは質問の再設計の部分ではあまり役に立たないことは知っていますが、悪いスキーマの理解と解読には非常に役立ちます。
SchemaCrawlerは、databaseいデータベースの探索を容易にするいくつかの機能を備えた私のデータベース検出ツールです。SchemaCrawlerには「grep」のような機能があり、正規表現を使用してテーブルと列を検索できます。たとえば、名前の一部に「ACCOUNT」が含まれるテーブルと列を検索できますが、それらはおそらく何らかの形で関連しているでしょう。
SchemaCrawlerは、外部キーがない場合でも、外部キーの関係も推測します。これは、テーブルは通常複数であるが、列名はそうではなく、列名には接頭辞_IDがあるなど、一般的な命名規則を使用して「弱い関連付け」を見つけることによってこれを行います。これらの推測された関係を使用して、関連するテーブルを見つけることができます。
それがいかにいか、そしてあなたがデザインに対してどれだけコントロールできるか、そしてそれと相互作用するものに依存します。私は現在の仕事で長年にわたって多くのいデータベースとやり取りしなければなりませんでした。
従業員データ
従業員データを保持するデータベースがあります。そのベンダーデータベースなので、私はそれを制御することはできません。(Un?)残念ながら、私は直接アクセスできません。毎朝DTSダンプを取得します。
私が管理できた最善の方法は、モーニングダンプからの入力をスクラブするスクリプトを記述し(そう、その単語の選択は意図的なものでした)、より便利な形式に移行し、スクラブされたデータから動作することです。
たとえそれを変更できたとしても、私はおそらくそうしないでしょう-それがそのように設定されていることに依存している他のプログラムがたくさんあるからです。そして、それらの変更を強制することはできません。
オンライントレーニングデータ
これは私自身のデザインの混乱でした。私はそれを私を助けるためにメンターなしで大学から新鮮に作りました...私はそれ以来少しずつそれを修正してきました。データにアクセスする唯一のプログラムを制御するため、サイトの一部をアップグレードするときに、データベースの構成を「アップグレード」します。変換スクリプトを作成し、コピーで精力的にテストして、必要なすべての変更が確実に行われるようにします。
それは長いプロセスでしたが、うまくやって来ました。
クラスルームトレーニングデータ
私のパイロットプロジェクトは、3つの異なるデータベースからのデータを統合しました。すべては私の前任者によって設計が少し異なります。
それは別の遅いプロセスです。データにアクセスするプログラムを完全に制御できるので、オンライントレーニングデータのように少しずつ変更しています。
振り返ってみると、これはクリーンを開始するための最有力候補だったでしょう...後視は常に20/20です。
最終的には...
これがどれほど役立つかはわかりませんが、さらに詳しく説明することができます(ある程度、会社の法的やだやだなど)。最終的な答えは「依存する」です。
それはあなたがどのように対話しなければならないかによります。バッチ処理が許容される使用シナリオの場合、データをより使いやすい構造にバッチ処理し、それに対処することが(開発時間の観点から、したがってクライアントのコストの観点から)最もコスト効率が高いことがよくわかりました。
Visio(Microsoft Officeの一部)がある場合は、リバースエンジニアリング機能を試すことができます。きれいではありませんが、少なくとも(Rational Roseのような「本物の」ツールの数分の1のコストで)開始できます。
Schema Spyは、ERDを生成するための本当に素晴らしいツールです。
ビルはすばらしい答えを出しました。私は、テストユーザーとしてユーザーインターフェイスにログインし、ユーザーがデータをどう処理するかを正確に理解しようとすることを追加します。ストアドプロシージャまたはデザインの背後にある理由を理解するのに役立ちます。データベースの理解には、データの意味と用途を理解することが重要です。
データベースがビジネス機能またはあなたが一般的になじみのない主題である場合(たとえば、飛行計画を行い、以前は金融アプリケーションのみに取り組んだことがある場合)、主題に関するユーザー向けの資料をユーザーに依頼するか、ライブラリにアクセスしますあなた自身または主題についてインターネットを検索してください。ユーザーに注意する必要がある法的または規制上の問題があるかどうかを尋ねます。繰り返しますが、この主題の背景のいくつかは、奇妙な設計選択と思われるものを説明するかもしれません。
それがベンダーデータベースである場合(そして、私はいくつかの本当に悪いものを見たことがあります)、あなたにできることはベンダーにそれについて不平を言うだけです。
社内に構築されたアプリケーションの場合、通常は開発者にいくらかの教育を受け、パフォーマンスを向上させるためにスキーマを変更し始めることができます。それには時間がかかり、通常は遅いプロセスです。
私の経験では、数百GBまたはTBのデータを移動することはそれほど現実的ではないため、新しいデータベースを構築することは実際には選択肢ではありません。
通常、そのままにしておくことも選択肢ではありません。データベース内のデータ量が増えると、パフォーマンスはますます悪化します(問題が発生するまでに、それらは通常かなりひどいものです)。パフォーマンスが非常に悪いため、最終的にユーザーはアプリケーションを使用できなくなります。
ああ... Uいデータベースです。企業が大きいほど、私たちが見つけるより古いデータベースです。
常に機能するわけではありませんが、努力しなければ悪化するだけです。データベースをアプリケーションと一緒に再設計しようとしています。データの移行により作業が増える可能性がありますが、パフォーマンスは魔法のトリックであり、私は常に帽子から抜け出します。
あなたのいガールフレンドと頑張ってください;)
ナレッジトランスファーセッションのオプションが利用可能かどうかを確認し、利用可能な場合は、それを最大限に活用してください。
また、多くのDBMSには、有用な情報(外部キーなど)を使用してデータベーススキーマを描画/印刷できるツールが付属しています。
さらに、(NXCから盗まれた)Visioなどのツールを使用してデータベースをリバースエンジニアリングできます。
クエリプロファイラーを起動し、運用システムで何が起こるかを監視するのが好きです。どのテーブルが「ホット」であるか、およびそれらに対するクエリの種類についていくつかのアイデアを提供します。
サンドボックスサーバーにバックアップコピーを配置し、テストクエリの作成と実行を開始します。複雑なシステムは、壊れることを心配せずに手に入れることができれば、理解しやすいものです。
また、ブラウザウィンドウでThe Daily WTFを開くのが好きです。他の人のデザインを引き継ぐには、通常、「{WTF}をやったとは信じられない」瞬間が多く含まれます。