13

私は現在、大学のプロジェクトに取り組んでおり、機能依存関係の部分について少し混乱しています。このプロジェクトでは、独自のプロジェクト仕様に基づいて論理データ モデルを作成し、機能の依存関係も決定する必要がありました。

たとえば、「User」テーブルに次の属性を指定しました。
R(user_id、ユーザー名、regDate、タイプ、サブスクリプション)

主キー: user_id
一意のキー:ユーザー名
外部キー:サブスクリプション

データセットの例は次のようになります。

1, JohnS, 01-01-2012, 管理者, NULL
2, PeterB, 02-01-2012, モデレーター, 映画
3, PeterA, 02-01-2012, ユーザー, 映画
4, Gary, 03-01-2012, ユーザー, ブックス
5, アイリーン, 2012 年 3 月 1 日, ユーザー, 映画
6, スタン, 2012 年 3 月 1 日, ユーザー, 映画
7, アイザック, 2012 年 4 月 1 日, ユーザー, ブックス

私が理解していない部分は、機能の依存関係をどのように判断するかです。私の最初の感覚は、2 つの機能的な依存関係があり、これらは次のとおりであるということでした:
user_id -> username、regDate、type、subscription
username -> user_id、regDate、type、subscription

しかし、講義スライドの他の例を見ると、これが正しいかどうか疑問に思っています。

4

4 に答える 4

8

"username" が一意かつ必須 (一意で null でない) の場合、それは候補キーです。リレーショナル モデリングでは、ある候補キーと別の候補キーの間に理論上の違いはありません。より具体的には、リレーショナル モデリングでは、候補キーを 1 つ選んでそれを「主キー」とラベル付けする理論的な理由はありません。鍵は鍵です。

だからあなたは正しいです。ここには 2 つの機能依存関係があります。(または、右側を個々の列に分解する場合は 8、、、user_id -> usernameなどuser_id -> regDate)

于 2013-01-02T14:38:31.127 に答える
7

機能依存関係は、理論的な観点から次のように定義されます ( Wikipedia )。

関係 R が与えられると、R 内の属性 X のセットは、各 X 値が正確に 1 つの Y 値に関連付けられている場合にのみ、R 内の別の属性 Y のセット (X → Y と表記) を機能的に決定すると言われます。R は、機能依存性 X → Y を満たすと言われます。

技術的な観点からは、他の属性を一意に識別する属性を見つけようとしています。ショートカットとして、候補キーとそれらに依存する属性を決定します。username, regDate, type, and subscriptiona all は の値に依存するため、あなたの例は正しいですuser_idusernameが一意null でない場合、それは候補キーであり、属性のセットも識別します。

于 2013-01-02T14:41:06.623 に答える
3

他の人が言ったことに加えて、属性(または属性のセット)が候補キーである場合、すべての属性は機能的にそれに依存している必要があります。

すべての属性は機能的にキーに依存しているため、に機能的な依存関係がある場合は、自動的に推移的な依存関係が発生し、3NFに違反します。したがって、「非キー」依存関係は、正規化エラーを見つけるための危険信号として機能する可能性があります。


反対の方向からも考えることができます。まず、ドメインでどの機能依存性が意味をなすかを理解し、次にそれらを使用して、どの属性がキーとして機能するかを識別します。

于 2013-01-03T10:11:55.703 に答える