web-dev-qa-db-ja.com

データベースが第3正規形に正規化されているかどうかをチェックするツールはありますか?

私は最近正規化について学び、新しいスキーマを実装するときにそれがどれほど重要であるかを理解しました。

データベースが2NFまたは3NFに準拠しているかどうかを確認するにはどうすればよいですか?

手動レビューは確かなオプションですが、自動化ツールをここで探しています。

私はポイントアンドクリックツールを探していません。テーブルを3NFに準拠させるために可能な最適化を強調するものを探しています。良いサンプルデータに基づく統計や列名のセマンティック分析、あるいはその両方を使用している可能性があります。

20
ack__

正規化は現実世界で絶対に使用されています...そして、うまくいけば、3NFは3番目の1つにすぎないことを知っているでしょう...現在、8は何ですか?しかし、3NFは簡単なターゲットです。

しかし……そんなツールはあり得ないと言ってみよう。

技術的には、正規化は各テーブルの属性です。特定のデータベース内では、テーブルごとに正規化のレベルが異なります。

各テーブルは、事実を表しています。特定の種類の事物(個人、アカウント、注文、出荷、アイテム、場所)のインスタンスに関する事実、時には、その事柄に関する他の種類の事実につながる外部キーも含まれます。

正規化は、ファクトが表にどの程度正確かつ効率的に表されているか、およびあいまいで冗長なデータパターンを防止する表の設計の機能に関係しています。

したがって、実際の事実を理解する必要があります...これは自動化ツールの範囲外です。

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

すべてのインストラクターがすべての科目を指導し、各学生が各インストラクターから各科目のコースを1つ以下の組み合わせで履修できる世界では、このテーブルは実際に3NFであると言えます。現実の世界では、このテーブルに対して3NFを主張するのはばかげています。

それが3NFにないことを理解するには、それが表す事実の性質を理解する必要があります。私たちの現実では、このテーブルは3NFにはなりません。なぜなら、(他の理由の中でも)科目とインストラクターは学生とは何の関係もない方法で関連付けられているからです。講師がデータベースの別の場所に保存されている科目を教えるコースがある場合、他のテーブルから、学生がコースに登録したことを示す外部キーではなく、両方の値をここにコピーするのはなぜですか?インストラクターが交代した場合、複数の場所で複数のレコードを変更する必要があります。

データベースの正規化が進むほど、データベースは現実世界およびそれ自体と本質的に一致し、データベースの事実がうっかり不正確になることは困難になります。データベースの設計は芸術ですが、間違いなく科学でもあります。

私は彼が書いたすべてのことを真っ向から見ているわけではありませんが、クリス・デートの本を勧めます データベース設計とリレーショナル理論:正規形とすべてのジャズ これは、関係モデルの根底にある理論についての耐え難いほどの詳細に入ります。

24

関係理論の開発で形式的な方法を使用するポイントの一部は、自動化できる手順を開発することでした。 C.J.デイトがすぐに出てきて、彼のデータベースシステム入門でそれを言っていると確信しています。

1980年代後半または1990年代初頭にリリースされたいくつかのCASEツールは、ER図を分析するか、サンプルデータの統計分析によって、考えられるすべての5NFスキーマを導き出すことができました。

Visio Enterprise Architect(私は思う)は、これらの分野に沿った比較的最近のツールです。

あなたがまだ答えを必要としていることを私は非常に疑いますが、あなたまたは他の誰かが利益を得る可能性がある場合は、このツールを試してみることをお勧めします: http://uisacad5.uis.edu/cgi- bin/mcrem2/database_design_tool.cgi

あなたがそれを行うためのツールを書くことができたとしても、それはそれでも仕事をするために手動のレビューが必要だと思います。通常のフォームは機能の依存関係に基づいて定義され、これらはデータの単なる検査からは決定できません。つまり、機能的な依存関係が存在するかどうかを判断するには、演繹的なロジックではなく、帰納的なロジックの問題です。

2
Chris Travers