18

私の質問は少し奇妙に思えるかもしれませんが、あなたのほとんどはこの段階を経たかもしれないと確信しています。

私は現在、データベース移行プロジェクト(FoxProからSQL Serverへ)に取り組んでいます。移行されるDBは膨大であり、私はこのプロジェクトに不慣れです。そのようなデータベースを理解する簡単な方法はありますか?テーブルがどのように関連し、どのようにモデル化されたかのように。このDBには適切なドキュメントがありません。

それがどのように構築されているかを理解することで、新しいクエリ/ストアドプロシージャを作成するのがはるかに簡単になると思います。ショートカットを知りたいだけです。

ありがとう。

4

8 に答える 8

21

私は、これらの文書化されていない大規模なデータモデルにアクセスし、それらを理解しようとすることに基づいてキャリアを築いてきたので、ここで答えがあまり見つからないことを実際に望んでいます. しかし、それだけの価値があります:

  • これは個人的な意見かもしれませんが、自動データモデラー/電子モデラーは好きではありません。私の好みは、ホワイト ボード (または紙) を見つけて、データ モデルを手で描くことです。あなたが運動感覚の学習者である場合 (参加して実践的に学ぶ)、これが新しいデータベースに慣れるための最良の方法であることがわかりました... 自動化されたシステムがデータベースを読み取るのと同じくらい素晴らしいですが、あなたはそうしません。手で描くときに何をするかを学びます。

  • データ モデリング手法の数は限られていますが、さまざまな方法で組み合わせることができます。ここにあるような大規模なデータベースでは、複数のプログラマーがデータベースを作成していると思います。つまり、同じデータベースで複数の手法が使用されている可能性があります。過去に、顧客情報セクションが非常に単純なスターデザインであるのに対し、データ回路の情報を格納するために繰り返し自己結合する単一のテーブルとして回路情報が格納されているシステムを見つけました... 2 非常に分離プログラミング スタイル、おそらく 2 つの別々の開発者。その後、アプリの電話回路セクションに足を踏み入れたところ、データ回路セクションと同じスタイル (おそらく同じプログラマー) であることがすぐにわかりました。いつもの、

  • 物理的なデータベース構造は理解すべき 1 つのセクションにすぎません...左側 (データベースの前) は、データがどのように生成され、データベース (データ ウェアハウス?) にロードされるかです。データが何であり、どのように作成されるかを理解することは、データベースがロードされた後にデータベースで何を探しているかを理解するための最初のステップです。

  • 上記とは反対に、データがデータベースに格納された後...データがどのように消費されるか (ユーザーが使用するか) を理解することは、データから何を取得し、何を必要としているかを理解するのに役立ちます。from ステートメントは既存のテーブルがどのように使用されているかを確認するのに役立つため、既存のレポートを生成するために使用されるスクリプトを手に入れることができれば、余分なポイントがあります。

  • ユーザーにインタビューすることを忘れないでください...特に、システムの最初の展開に使用されたユーザーを見つけることができる場合はなおさらです。社内で設計されている場合、システムの最初の要件のいくつかを提供したのはこれらの人々である可能性が高く、彼らと話すことで、システムを設計した人々が要件収集に行ったときに最初に聞いたことがわかります。会社の論理的な区分 (カスタマー ケア、運用、請求、など) は、通常、データ モデルが従う区分と同じです。

  • そして最後に...プレイ!開発環境または QA 環境が利用可能な場合は、クエリの作成を開始し、何が返されるかを確認してください。ステートメントを変更して、もう一度試してください。

あなたが避けたい最大の愚かさは、テーブルがどのように配置されているかだけに注目することだと思います. そこに含まれるデータ、その生成方法、消費方法を理解します。あなたの会社、それがどのように配置され、どのように機能するかを理解してください。それが格納される方法 (データ モデリング) は、この理解に次ぐものです。

于 2012-06-19T17:26:07.977 に答える
9

数百のテーブルと数百万のレコードを含む大規模な SQL Server データベースに飛び込む場合、すべてを理解するために使用する 2 つのクエリを使用し、「メイン」テーブルを見つけてから、特定のテーブルと列に絞り込みます。

--Query to show list of tables ordered by number of records in each table
    SELECT
        t.NAME AS TableName,
        SUM(p.rows) AS [RowCount]
    FROM 
        sys.tables t
    INNER JOIN      
        sys.indexes i ON t.OBJECT_ID = i.object_id
    INNER JOIN 
        sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
    INNER JOIN 
        sys.columns c on t.object_id = c.object_id
    WHERE   
        i.index_id <= 1
    GROUP BY 
        t.NAME, i.object_id, i.index_id, i.name 
    ORDER BY 
        SUM(p.rows) DESC



--Query to show any columns or table names like what I'm looking for
SELECT
    c.name, t.name
FROM sys.columns c
    INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%#ColumnName%' OR t.name LIKE '%#TableName%'
于 2015-08-07T19:57:05.303 に答える
1

私は最近同じプロセスを経験しました... 私が最も役に立ったと思うのは、独自のデータベース図を作成することでした。無料ツール wwwsqldesigner を使用しました。とても簡単に思えました。私が抱えていた唯一の問題は、何らかの理由で Chrome では動作しないことでしたが、Firefox では問題なく動作しました。よく使う表を並べただけで、何か新しいことをする必要があるときに頻繁に参照することがわかりました。

自動生成されたデータベース ダイアグラムを使用できる場合は、それがより良い方法ですが、個人的には動作させることができませんでした (SQL サーバーを使用しています)。

幸運を!

于 2012-06-19T16:28:12.300 に答える
1

こんにちは、次のスクリプトが役に立ちます。開発されたデータベースでこれを使用すると、少なくともテーブルの関係を知ることができます。

SELECT
fk.name 'FK Name',
tp.name 'Parent table',
cp.name, cp.column_id,
tr.name 'Refrenced table',
cr.name, cr.column_id
FROM 
    sys.foreign_keys fk
INNER JOIN 
    sys.tables tp ON fk.parent_object_id = tp.object_id
INNER JOIN 
    sys.tables tr ON fk.referenced_object_id = tr.object_id
INNER JOIN 
    sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN 
    sys.columns cp ON fkc.parent_column_id = cp.column_id AND fkc.parent_object_id = cp.object_id
INNER JOIN 
    sys.columns cr ON fkc.referenced_column_id = cr.column_id AND fkc.referenced_object_id = cr.object_id
ORDER BY
 tp.name, cp.column_id
于 2017-10-17T20:39:17.990 に答える
0

SQL Server Management Studio を使用してエンティティ関係モデルを作成できるため、db テーブル間の関係を簡単に確認できます。基本的に、管理スタジオの db フォルダー内には、「データベース ダイアグラム」という名前のフォルダーがあります。それを右クリックして、[新しいデータベース ダイアグラム] を選択します。

于 2012-06-19T16:24:49.117 に答える
0

移行後、古い Foxpro サーバーは新しい SQL サーバーと共存しますか? そうでない場合は、システムを少しずつ解読してみてください。停滞した未使用のコードで時間を無駄にする必要はありません。データの流れの一般的な感触をつかみ、掘り下げ始めるためのメモと図!

于 2012-06-19T16:29:24.953 に答える