2010-12-04 10 views

答えて

2

先頭から、必ずしもSQLクエリである必要はありません。機能的依存の問題は、適切なdatabase normalizationによって対処されます。特に、2番目と3番目の正規形を考慮する場合。単一のエンティティ内で機能的な依存関係を発見しようとしている場合は、その属性を分解してスキーマを修正することができます。

あなたはまだ与えられたテーブルでfunctional dependence:

の定義を満たすクエリを作成、その場で直接関数依存性を証明したい場合は、属性Yは、上の機能の依存関係を持っていると言われています各X値が正確に1つのY値に関連付けられている場合に限り、属性Xのセット(X→Yと書かれる)たとえば、「従業員ID」および「従業員の生年月日」の属性を含む「従業員」テーブルでは、機能従属関係の従業員ID→{従業員の生年月日}が保持されます。

あなたは、一方が他方に対して繰り返すかどうかを決定その後、AとBを選択することにより弱い関数依存性を証明することができます。

これを行うには、クエリを構成します。SELECT UNIQUE A,B FROM ABCD;。一意の集合{A、B}の反復要素は、Aが集合内で繰り返す場合にのみ、関数の依存関係A→Bを反証する。 Aが十分に大きなデータセット内でBに対して反復しない場合、BはAに弱く機能的に依存していると言えるかもしれない。換言すれば、「は無効であり、関数依存ではない。直接的または間接的にそうであるかもしれない」

これ以上のことは、検査対象のエンティティに関する追加情報を判断することです。あなたがそれを行うことができれば、上記の正規化に関する私の元のアドバイスを参照してください。

+0

"FD"には、値と変数の2つの異なる用途があります。 FDは、引用された定義ごとにリレーション(テーブル)値を保持します。 FDは、可能なすべてのデータベース状態でその値(前の意味で)を保持するときに、リレーション変数(基本表)に保持されます。問題は単純に最初の意味を使うことです。 「弱いFD」という用語には、標準的な使用はありません。 – philipxy

7
SELECT * from R r1, R r2 where r1.A=r2.A and r1.B <> r2.B 

これは、FDが保持されている場合は空のセットを返します。

+0

これはA→Bをチェックします。 AB-> Cをチェックしたいのですが? – user3503711

関連する問題