文書化されていない大規模なデータベースに取り組む方法


10

私は最近、特定のX社の唯一のITガイとして雇われ、彼らのアプリケーションを修正する必要があります。私の意見では、データベースを理解することから始めるのが最善の方法です。

彼らの現在のデータベースは186のテーブルを持つMySQLデータベースです(いくつかのテーブルは神が理由を知っているので空であることに注意してください)。また、アプリケーションはMS Accessデータベースインターフェイスを介してデータベースと通信しています。(私はなぜ開発者もそれをしたのか自問します)

質問は、この文書化されていない大規模なデータベースへの取り組みをどのように開始するかです。はい、それは文書化されていません。アプリケーションの開発者は、私の生活を簡単にするために、ERDやデータディクショナリ、またはデータベースに関する情報を提供するつもりがないからです。かなり大規模なデータベースの隅々を理解するというこの危険な努力にどう取り組むべきでしょうか。

関連質問:醜いデータベースに飛び込む方法は?


5
... developpersが協力して喜んでいるまで、ゆっくりと次々表を削除し、空のテーブルで始まる
ルネNyffenegger

コメントする前に考えてください。OPは、彼が唯一のIT担当者であると明確に述べています。では、それらの開発者は誰ですか?外部の請負業者はたぶん、ものを組み立てるのにかかった時間だけのために支払われましたか?なぜそれらが追加のサポートに時間を費やすことをいとわないのですか?それとも彼らはおそらく彼らが高すぎるために解雇された元従業員でしたか?なぜ彼らは問題を抱えているX社を支援するために時間を割くのでしょうか?そして、誰がテーブルを落とすことで怪我をするのでしょうか?
Erwin Smout 2013年

6
@ErwinSmout私はルネのコメントが軽快なジャイブとして解釈されることを意図されていたと信じています。それは私がそれを見た方法です。
Mark Storey-Smith

回答:


11

リンクされた回答は、データベースを最初にボトムアップで問題に取り組みます。あなたの責任はアプリケーションデータベースを網羅しているので、アプリケーションから始めてこのトップダウンで攻撃する傾向があります。

ユーザーベースとの協議を通じて、アプリケーションの最も頻繁に使用される機能の理解に注意を向けます。プロファイリング/ロギングツールを介してこれらの機能のデータベースの相互作用を追跡し、主要なテーブルと手順を特定できるようにします。

このようにして、初期の作業は、ほとんどまたはまったく使用されない可能性があるテーブルとクエリを文書化する時間を浪費するのではなく、「重要なこと」に制限されます。焦点を合わせると、パレートの原則がバグ修正の取り組みに費やされるはずですとにかくMicrosoftはそう言っています)。


すばらしい答えをありがとう。正直に言って、サーバーで実行されているクエリをログに記録できるとは思いもしませんでした。どうもありがとう!

1

MySQL Workbenchを入手して、データベースからEERモデルを作成してみます。これは、どのリンクに何がリンクされているかを確認し、開発者が何を考えていたかを知ることができることを意味します。すべては、アプリケーションの構造にも依存します。


私はそのルートを試してみましたが、186のテーブルがあり、ワークベンチがキャンバスの中央にあるすべてのテーブルをたたいただけなので、途中でかなり面倒になりました。小さな画面の面積は物事を小さくするのに役立ちませんでした。しかし、その外観からは、難しい方法で物事を逃れることはできません

Workbenchでこれを実行しようとしないでください。欠陥(バグ)がたくさんあるので、役立つものを達成するよりも多くの時間をかけてそれらを克服しようとします。代わりに、この短い記事のリンクで説明されているように、Microsoft Visioを使用して既存のデータベースをモデルにリバースエンジニアリングすることを検討してください
KXNV-89.1FM

より適切なリンク:リンク -「既存のデータベースをデータベースモデルにリバースエンジニアリングする」(Microsoft Visioを使用)。
KXNV-89.1FM

1

私が見つけDBLintをデータベースに問題を識別するのに有用であると。以下の素晴らしいプロパティがあります:

  1. 調査結果を(主観的)重要度でランク付けするため、軽微な警告が殺到することはありません。
  2. 重要な調査結果は、しばしば議論の余地がなく、実行可能です。
  3. データベースに単一の数値でスコアを付けるため、進捗状況を測定し、さまざまなデータベースの品質を比較できます。やる気を起こさせるものだと思います。
  4. スキーマベースのチェックのみを使用するようにDBLintを設定するのは簡単です。そのため、大規模なデータベースでもすばやく試すことができます。私が持っている唯一の不満は、DBLintを実行するためにWindowsを実行しなければならないことです。

MySQLデータベース上のホットスポットをすばやく特定するために、Neor Profile SQLは、アプリケーションとデータベースの間に位置する少数のプロキシです。それの美しさは、セットアップが速いことです。

データベース内で定義されていないにもかかわらず、データベース内の事実上の主キーと外部キーを検出するには、Linkifierを使用できます。ERDプロットの場合、推定値をyEdにエクスポートできます。yEdには、テーブルの配置のための多くのレイアウトアルゴリズムがあります。BPMNはERDの私のお気に入りです。


0

My Sqlデータベースにアクセスするためのoracle(My SQl workbench)のツールがあります。これは、データベースのERDを提供できるインターフェイスです。


うん、私はワークベンチに精通していますが、リバースエンジニア機能はすべてのテーブルをキャンバスの中央にダンプするだけです... 186テーブルは整理するのが面倒です。それからの方法を知っていますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.