最近、正規化について学び、新しいスキーマを実装するときにそれがどれほど重要かを理解しました。
データベースが2NFまたは3NFに準拠しているかどうかを確認するにはどうすればよいですか?
手動レビューは確かなオプションですが、ここでは自動化されたツールを探しています。
私は、ポイントアンドクリックツールを探しているのではなく、テーブル3NFを準拠させるために可能な最適化を強調するものを探しています。良いサンプルデータやカラム名のセマンティック分析に基づいた統計を使用するかもしれないと思います。
最近、正規化について学び、新しいスキーマを実装するときにそれがどれほど重要かを理解しました。
データベースが2NFまたは3NFに準拠しているかどうかを確認するにはどうすればよいですか?
手動レビューは確かなオプションですが、ここでは自動化されたツールを探しています。
私は、ポイントアンドクリックツールを探しているのではなく、テーブル3NFを準拠させるために可能な最適化を強調するものを探しています。良いサンプルデータやカラム名のセマンティック分析に基づいた統計を使用するかもしれないと思います。
回答:
正規化は絶対に現実の世界で使用されます...そして、3NFが3番目のものに過ぎないことをご存じでしょうか?しかし、3NFは簡単なターゲットです。
しかし...私はそのようなツールはあり得ないと言うことを敢えてするでしょう。
技術的には、正規化は各テーブルの属性です。特定のデータベース内で、テーブルごとに正規化レベルが異なる場合があります。
各テーブルは事実を表します...特定の種類の事物(人、アカウント、注文、出荷、アイテム、場所)のインスタンスに関する事実。
正規化は、テーブルでファクトがどの程度正確かつ効率的に表現されるか、およびテーブルの設計があいまいで冗長なデータパターンを防ぐ能力に関係しています。
したがって、実際の事実を理解する必要があります...これは自動化ツールの範囲外です。
Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?
すべてのインストラクターがすべての科目を教え、各生徒が各インストラクターの各科目で複数のコースを組み合わせて受講できる世界では、このテーブルは実際に3NFであると言えます。現実の世界では、このテーブルに対して3NFを主張するのはばかげています。
それが3NFではないことを理解するには、それが表す事実の性質を理解する必要があります。現実には、このテーブルは3NFにはなりません。これは(他の理由もありますが)主題と講師が学生とは無関係の方法で関連付けられているためです。インストラクターがデータベースの他の場所に保存されている科目を教えるコースがある場合、学生がコースにサインアップしたことを示す他のテーブルの外部キーの代わりに両方の値をここにコピーするのはなぜですか?インストラクターが置き換えられた場合、複数の場所で複数のレコードを変更する必要があります。
データベースが正規化されればされるほど、データベースは実世界およびそれ自体と本質的に一貫し、データベースの事実が不注意で真実ではなくなるのが難しくなります。データベース設計は芸術ですが、間違いなく科学でもあります。
彼が書いたものすべてに目を向けているわけではありませんが、私はChris Dateの本、Database Design and Relational Theory:Normal Forms and All That Jazzをお勧めします。
関係理論の開発に形式的方法を使用するポイントの一部は、自動化できる手順を開発することでした。CJ Dateがすぐに出てきて、彼のデータベースシステム入門でそれを言っていると確信しています。
1980年代後半または1990年代初頭にリリースされたいくつかのCASEツールは、ER図を分析するか、サンプルデータの統計分析を行うことにより、考えられるすべての5NFスキーマを導き出すことができました。
Visio Enterprise Architect(私は思う)は、これらのラインに沿った比較的最近のツールです。
あなたがまだ答えを必要としていることを非常に疑いますが、あなたまたは他の誰かが利益を得るかもしれない場合、あなたはこのツールを試してみることを望むかもしれません:http : //uisacad5.uis.edu/cgi-bin/mcrem2/ database_design_tool.cgi
それを行うためのツールを作成できたとしても、作業を行うにはまだ手動でのレビューが必要だと思います。通常の形式は機能的な依存関係に基づいて定義され、これらはデータの単なる検査から決定することはできません。言い換えれば、機能的な依存関係が存在するかどうかを判断するためには、演ductive論理というよりも帰納論理の問題です。