データベースが3番目の正規形に正規化されているかどうかを確認するツールはありますか?


20

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

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

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

私は、ポイントアンドクリックツールを探しているのではなく、テーブル3NFを準拠させるために可能な最適化を強調するものを探しています。良いサンプルデータやカラム名のセマンティック分析に基づいた統計を使用するかもしれないと思います。


1
そのようなツールが存在しないことを願っています。2NF / 3NFを実施する必要はありません。多くの場合、スキーマ/モデルを設計することは、通常のウィンドウの外にXNFチャックアカウントに実用性とパフォーマンスの考慮事項を取るために持っている
Philᵀᴹ

2
正規化は実際には使用されないということですか?私はこれを出発点として使用することを計画し、パフォーマンスが低下したときに非正規化を検討します。
ack__

3
スキーマ設計は、科学というよりも芸術です。従うべき基本的なルールは確かにありますが、それを十分に行うと、何が機能し、何が機能しないのかをよく理解し始めます。職人技。
datagod

Philには同意しません。正規化は、時には行く方法です。また、スタースキーマの方が優れている場合もあります。それはあなたが何をしているかに依存します。自動化する価値がある前に、非常に多くのテーブルが必要になります。
ウォルターミッティ

回答:


24

正規化は絶対に現実の世界で使用されます...そして、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をお勧めします。


2
この詳細な回答をありがとう。ただし、例に従って、サンプルデータを分析するツールで、「インストラクター」の値が頻繁に繰り返され、別のテーブルにも表示されることを検出できるため、外部キーまたはその他の変更の候補になる可能性がありますこのテーブルを3nf準拠にするか、何か不足していますか?
ack__

2
本当ですが、キーワードはまだ「提案」です。ツールは、見かけの冗長性を探すことで構造の変更を提案できますが、そのようなツールを区別するために、真の冗長性と相関関係の偶然の出現は依然として困難だと思います。データの実際の性質に関する知識が必要です。
マイケル-sqlbot

@ack__:3番目の正規形であるかどうかは、ペアまたは関係のセットではない関係のプロパティです。したがって、外部キー関係を確立することは、第3正規形と関係があることはわかりません。
奇跡173

大きな問題は、複数列の機能的な依存関係を特定することが特に問題だと思います。値が同じでも異なるエンティティを表す場合(つまり、複合キーが関係する場合)。テーブルを考えてみましょう:(address_text、city、state_province、mail_code、country)。現在、これは正規化されていません。(市、state_province)->(国)。したがって、完全に正規化するには、これを少なくとも3つのテーブル、おそらく4つのテーブルに分割する必要があります(mail_codeの処理!)。またコンプ。キーはnfのアイデアの鍵なので、無視しないでください!
クリストラヴァーズ

「学生が1つの科目でのみコースを受講でき、すべてのインストラクターがすべての科目を教えた世界では、この表は確かに3NFであると言える」理由を説明できますか?このテーブルのキーは(学生、インストラクター)であると思うので、3NFが壊れないでしょうか?すべての科目を教えるすべての教師は、私たちに何を助けますか?
ドリューヴァーリー14

5

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

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

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


いいね 実際、スキーマを分析する両方の方法(ER図とサンプルデータ分析)を探していました。Visio以外の最近のソフトウェアを知っていますか?私は(まだ)ライセンスを持っていません。
ack__

1
しかし、ERダイアグラムは本質的にオブジェクトモデルダイアグラムです。これは、既存のデータベースを取得して、それから正規化されているかどうかを判断することとまったく同じことではありません。
クリス・トラヴァース

2
サンプルデータと正規化の提案を含むテーブルの分析はAccessの機能であり、初期バージョンではよく覚えています。
ypercubeᵀᴹ

@クリス:はい、私はセマンティック分析のためだけにER図を参照していました。
ack__

@ypercube:ヒントをありがとう、Accessを見てみましょう。
ack__


2

それを行うためのツールを作成できたとしても、作業を行うにはまだ手動でのレビューが必要だと思います。通常の形式は機能的な依存関係に基づいて定義され、これらはデータの単なる検査から決定することはできません。言い換えれば、機能的な依存関係が存在するかどうかを判断するためには、演ductive論理というよりも帰納論理の問題です。


実際、手動によるレビューがいくつか行われますが、ツールがそれを完全に自動的に行うことは期待していません。しかし、DBの既存のデータ(少なくとも、そのサンプル)やフィールドname / typeを分析することで、ほとんどの作業を自動化できると確信しています。
ack__

1
どうやって?正規化は、結合の依存関係と機能の依存関係で定義されます。機能的な依存関係は、基本的に次のように簡単に定義できます。スーパーキーのすべての可能な値に対して、機能的な依存関係には1つの値があります。データのレビューを自動化してもそこに到達することはできません。なぜなら、現在のセットには機能的な依存関係があるように見えても、それは新しいキーが適合することを意味しないからです。これは、古い相関対因果区分に非常によく似ています。現在データベースにあるものを観察しても、機能的な依存関係を誘発することはできません。
クリストラヴァーズ

2
少なくともツールは、関係が存在する可能性を示唆できます。データサンプルの品質とサイズが十分に大きい場合、そのような推測の精度は実際的な目的に十分なほど高くなります。
奇跡173

多分。しかし、かなり地獄的なリレーショナルデザインの賢明な実際の例を見てみましょう。アドレスです。郵送先住所はどのように正規化する必要がありますか?いくつのテーブルが提案されるべきですか?私の3NFの理解では、国、州/県、および都市のテーブルが必要です。郵便番号/都市の内訳が意味をなすかどうかはわかりませんが、おそらくそうでしょう。しかし、既存のデータをどのように分析し、(都市、州)->国を決定するのでしょうか?郵便番号がこれらの構成要素にグローバルに関連しているかどうかをどのように判断しますか?
ラバーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.