いデータベースに飛び込むには?


26

多くの人がmanyいデータベースを扱っている/使っていると確信しています。まったく正規化されていないデータベース、最も些細なデータを取得するために大きな苦痛を伴うクエリを実行する必要があるデータベース、運用中のデータベース、少し変更することはできません... 、 "それです"。

私の質問は、どのように対処しますか?

  • 新しいデータベースを作成しようとしていますか?
  • あきらめて、放っておけますか?
  • どのようなアドバイスができますか?

回答:


29
  • 最初に行うことは、Entity-Relationship Diagram(ERD)を作成することです。コマンドラインツールでメタデータを簡単に説明できる場合もありますが、時間を節約するために、ダイアグラムを自動的に生成できるツールがいくつかあります。

  • 次に、各テーブルと列を調べて、格納されているものの意味を確実に学習します。

  • 第三に、各関係を調べて、テーブルが互いにどのように関係しているかを理解していることを確認します。

  • 第4に、ビューまたはトリガーを読んで、カスタムデータ整合性の強制またはカスケード操作を理解します。

  • 5番目に、ストアドプロシージャを読み取ります。また、SQLアクセス権限がある場合は読み取ります。

  • 6番目に、データベースを使用するアプリケーションコードの一部を読み通します。そこで、追加のビジネスルールとデータ整合性ルールが適用されます。


更新: おもしろいチェックリスト付きの興味深い記事「データベースを継承するときの9つのこと」を読んだだけです。

概要:

  1. バックアップ
  2. 調査(上記のスキーマ文書化手順)
  3. 元開発者と話をする
  4. バグデータベース
  5. ソースコード管理
  6. ユーザーや事業主に相談する
  7. いくつかの点を修正するか、いくつかの機能強化を行うことにより、ユーザーとの信頼性を確立します
  8. 開発環境を作成する
  9. 廃止されたオブジェクトを削除する

13

これは常に可能というわけではありませんが、特定の状況で私のために機能したことの1つは、テーブルの一部をビューに置き換えることです。その後、下のテーブルを整理し、場合によっては最終的にビューを破棄できます。私が言ったように、いくつかのケースでのみ動作します。


Oracleでは、マテリアライズド・ビューもこれに役立ちます。
リーリッフェル

9

データ辞書はあなたの友達です。また、Visioのリバースエンジニアリングツールを使用してデータベースをリバースエンジニアリングし、独自のダイアグラムセットを作成してみてください。リバースエンジニアリングはインタラクティブであるため(図を作成する場合)、データディクショナリを読むよりもはるかに魅力的です。プロセスの積極性はその利点であり、これを行うことは非常にリラックスできると思います。

私が行う作業のほとんどはデータウェアハウジングで行われます。そこでは、ソースシステムデータベーススキーマを突くことが中核的な活動の1つです。私はこのようなことを非常に多くの機会に行ってきましたが、それは本当にうまくいくと思います。

Visio proはそれほど高価ではありません。Visioモデリングエンジンを使用すると、複数の図でモデルを共有できます。ボーナスとして、不足している外部キーを図に追加すると、システムに関する有用な一連のドキュメントを最後まで取得できます。


6

Bill Karwinのアイデアに加えて、ユーザーと話すことをお勧めします-時折、ユーザーがデータベースの用途をかなり知っていることがあります。


6

ベンダーのソフトウェアの非常にいものを扱っていますが、提案をすることは別として、それを変更することはあまりできません。私は常に物事を変えようと努力していますが、それは私の制御の範囲外であるため、私はジャンクにこだわっています。

データベースにはまったく関係がないため、私がすぐに使い始めたものの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

一部のテーブルには名前が不適切な列が多すぎるため、テーブル間でリレーションシップを形成するために使用できるものを見つけるにはあまりにも多くの列があります。

これは質問の再設計の部分ではあまり役に立たないことは知っていますが、悪いスキーマの理解と解読には非常に役立ちます。


6

SchemaCrawlerは、databaseいデータベースの探索を容易にするいくつかの機能を備えた私のデータベース検出ツールです。SchemaCrawlerには「grep」のような機能があり、正規表現を使用してテーブルと列を検索できます。たとえば、名前の一部に「ACCOUNT」が含まれるテーブルと列を検索できますが、それらはおそらく何らかの形で関連しているでしょう。

SchemaCrawlerは、外部キーがない場合でも、外部キーの関係も推測します。これは、テーブルは通常複数であるが、列名はそうではなく、列名には接頭辞_IDがあるなど、一般的な命名規則を使用して「弱い関連付け」を見つけることによってこれを行います。これらの推測された関係を使用して、関連するテーブルを見つけることができます。


5

それがいかにいか、そしてあなたがデザインに対してどれだけコントロールできるか、そしてそれと相互作用するものに依存します。私は現在の仕事で長年にわたって多くのいデータベースとやり取りしなければなりませんでした。

従業員データ

従業員データを保持するデータベースがあります。そのベンダーデータベースなので、私はそれを制御することはできません。(Un?)残念ながら、私は直接アクセスできません。毎朝DTSダンプを取得します。

私が管理できた最善の方法は、モーニングダンプからの入力をスクラブするスクリプトを記述し(そう、その単語の選択は意図的なものでした)、より便利な形式に移行し、スクラブされたデータから動作することです。

たとえそれを変更できたとしても、私はおそらくそうしないでしょう-それがそのように設定されていることに依存している他のプログラムがたくさんあるからです。そして、それらの変更を強制することはできません。

オンライントレーニングデータ

これは私自身のデザインの混乱でした。私はそれを私を助けるためにメンターなしで大学から新鮮に作りました...私はそれ以来少しずつそれを修正してきました。データにアクセスする唯一のプログラムを制御するため、サイトの一部をアップグレードするときに、データベースの構成を「アップグレード」します。変換スクリプトを作成し、コピーで精力的にテストして、必要なすべての変更が確実に行われるようにします。

それは長いプロセスでしたが、うまくやって来ました。

クラスルームトレーニングデータ

私のパイロットプロジェクトは、3つの異なるデータベースからのデータを統合しました。すべては私の前任者によって設計が少し異なります。

それは別の遅いプロセスです。データにアクセスするプログラムを完全に制御できるので、オンライントレーニングデータのように少しずつ変更しています。

振り返ってみると、これはクリーンを開始するための最有力候補だったでしょう...後視は常に20/20です。

最終的には...

これがどれほど役立つかはわかりませんが、さらに詳しく説明することができます(ある程度、会社の法的やだやだなど)。最終的な答えは「依存する」です。


5

あなたの答えをすべて読んだ後、私にあなたに私のものをあげます:

最初に「マスターテーブル」を検索し、次にペンと紙で他のテーブルとの関係のマッピングを開始します。その後、確認するアプリコードがある場合、データの流れに関する生のスケッチを作成し始めます。

dbがどのように機能するかについての良い写真を入手した後、物事を変更する場所のチェックを開始するだけです。それでおしまい。

理由はわかりませんが、データベースモデリングソフトウェアよりも紙のほうが好きです。


5

外部アプリケーションで使用するため、データベースの「インターフェース」を変更できません。使用しているデータベースのタイプ(oracle、mysql、mssql)はわかりませんが、これは1つの方法と考えています。

  • ビューやストアドプロシージャなどの種類のオブジェクトを使用して、データベースインターフェイスを構築します。
  • ステップごとのリファクタリング(正規化、フィールド名の変更...)
  • クライアントのアプリケーションの変更(必要な場合)

ビュー、ストアドプロシージャは、内部データベースの変更(変更)を隠します。


4

データベースの構造を発見することに加えて、データ品質を調べることも重要であることがわかりました。各列の意味を理解したら、多くの欠損値がある場所を探すことができます。データに慣れてきたら、異なる列の値のどこに矛盾があるかを調べることもできます。


4

それはあなたがどのように対話しなければならないかによります。バッチ処理が許容される使用シナリオの場合、データをより使いやすい構造にバッチ処理し、それに対処することが(開発時間の観点から、したがってクライアントのコストの観点から)最もコスト効率が高いことがよくわかりました。


4

問題を脳に巻き付けることができる問題に分割できる場合、一度に1つずつ攻撃できます。時々、すべてが盗聴されているわけではないテーブル1つしかないことを知っているだけで、作業の足がかりになります。このように、「クリーンスポット」を拡張して、より多くのデータベースをチャンクに含めることができます。


4

Visio(Microsoft Officeの一部)がある場合は、リバースエンジニアリング機能を試すことができます。きれいではありませんが、少なくとも(Rational Roseのような「本物の」ツールの数分の1のコストで)開始できます。



3

ビルはすばらしい答えを出しました。私は、テストユーザーとしてユーザーインターフェイスにログインし、ユーザーがデータをどう処理するかを正確に理解しようとすることを追加します。ストアドプロシージャまたはデザインの背後にある理由を理解するのに役立ちます。データベースの理解には、データの意味と用途を理解することが重要です。

データベースがビジネス機能またはあなたが一般的になじみのない主題である場合(たとえば、飛行計画を行い、以前は金融アプリケーションのみに取り組んだことがある場合)、主題に関するユーザー向けの資料をユーザーに依頼するか、ライブラリにアクセスしますあなた自身または主題についてインターネットを検索してください。ユーザーに注意する必要がある法的または規制上の問題があるかどうかを尋ねます。繰り返しますが、この主題の背景のいくつかは、奇妙な設計選択と思われるものを説明するかもしれません。


3

それがベンダーデータベースである場合(そして、私はいくつかの本当に悪いものを見たことがあります)、あなたにできることはベンダーにそれについて不平を言うだけです。

社内に構築されたアプリケーションの場合、通常は開発者にいくらかの教育を受け、パフォーマンスを向上させるためにスキーマを変更し始めることができます。それには時間がかかり、通常は遅いプロセスです。

私の経験では、数百GBまたはTBのデータを移動することはそれほど現実的ではないため、新しいデータベースを構築することは実際には選択肢ではありません。

通常、そのままにしておくことも選択肢ではありません。データベース内のデータ量が増えると、パフォーマンスはますます悪化します(問題が発生するまでに、それらは通常かなりひどいものです)。パフォーマンスが非常に悪いため、最終的にユーザーはアプリケーションを使用できなくなります。


3

ああ... Uいデータベースです。企業が大きいほど、私たちが見つけるより古いデータベースです。

  • パフォーマンスのチューニングを行う人は、パフォーマンスの問題が見つかるまで、そのようなデータベースについて不満を言うことはありません。したがって、私たちの組織では、個々のクエリを特定し、パッチとして微調整します。
  • データ制限することで、臭いゴミの場所がわかったため、そのようなデータベースを介したデータフローを回避してください。ステージングデータベースを作成し、それらのテーブルにデータをリダイレクトして、古いものをデータダンプとして使用します。
  • データの蓄積を避ける不要になった古いデータをアーカイブ/切り捨てます。データベースでデータが必要な期間を決定するチームが必要です。その後、フラットファイルまたはテープドライブに移動できます。
  • データのリダイレクトと切り捨てができたら、段階的に廃止します。他のチームを説得して、新しいデータベースの使用を開始します。

常に機能するわけではありませんが、努力しなければ悪化するだけです。データベースをアプリケーションと一緒に再設計しようとしています。データの移行により作業が増える可能性がありますが、パフォーマンスは魔法のトリックであり、私は常に帽子から抜け出します。

あなたのいガールフレンドと頑張ってください;)


2

ナレッジトランスファーセッションのオプションが利用可能かどうかを確認し、利用可能な場合は、それを最大限に活用してください。

また、多くのDBMSには、有用な情報(外部キーなど)を使用してデータベーススキーマを描画/印刷できるツールが付属しています。

さらに、(NXCから盗まれた)Visioなどのツールを使用してデータベースをリバースエンジニアリングできます。


2

クエリプロファイラーを起動し、運用システムで何が起こるかを監視するのが好きです。どのテーブルが「ホット」であるか、およびそれらに対するクエリの種類についていくつかのアイデアを提供します。


1

サンドボックスサーバーにバックアップコピーを配置し、テストクエリの作成と実行を開始します。複雑なシステムは、壊れることを心配せずに手に入れることができれば、理解しやすいものです。

また、ブラウザウィンドウでThe Daily WTFを開くのが好きです。他の人のデザインを引き継ぐには、通常、「{WTF}をやったとは信じられない」瞬間が多く含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.