1

これは、データベースの本で割り当てられた宿題です。基本的に、これらのどれが関数の依存関係であり、どれが多値の依存関係であるかを判断し、BCNF または 4NF にあるかどうかを判断し、より良い設計 (必要に応じて別のテーブル) を考え出すことになっています。 BCNF と 4NF の両方で。これまでのところ、私が知っている(または少なくとも知っていると思う)ことは次のとおりです。

機能依存性: X は 1 つだけの Y を決定します (X->Y)

複数値の依存性: X は複数の Y を決定します (x->>Y)

候補キー: 主キーとして使用できる一意の列

主キー: 一意の候補キー (最適な候補キーを選択)

パーソナルトレーナー_セッション

【コラム】

トレーナー、TrainerPhone、TrainerEmail、TrainerFee、ClientLastName、ClientFirstName、ClientPhone、ClientEmail、TrainingDate、TrainingTime


さて、これらの依存関係を一般的にではなく、テーブルによって提供される列とデータのみに絞り込むときに焦点を絞ることになっていることはわかっていますが、明確な依存関係はないようです。たとえば、列「トレーナー」を見てみましょう。「トレーナー」は、私が推測する電子メールまたは同様のものを特定できます...しかし、それは明確で簡潔な接続ではないでしょうか?

同様に、候補キーに関して.....TrainerEmail、TrainerPhone、ClientEmail、および ClientPhone はすべて候補キーの可能性があるように思えます。電話番号とメールはどちらも実生活では一意ですが、電話番号は特定の国にのみ一意であるのに対し、メールは世界中で一意であると想像できます。では、テーブルの適切な主キーはどれでしょうか?

多分私の考えは正しくないかもしれませんが、宿題は機能的および多値の依存関係を最初にリストしてからテーブルを再構成するように言ったので、どこかに何かが欠けていると思います.

これを正しい方法で行う方法についてのアイデアをいただければ幸いです:D

================================================== ======================= 編集: わかりましたので、この表を 3 に変更しました。

トレーナー

TrainerID、Trainer、TrainerPhone、TrainerEmail、TrainerFee

クライアント

ClientID、ClientLastName、ClientFirstName、ClientPhone、ClientEmail

トレーニングセッション

TrainerID(外部キー)、ClientID(外部キー)、TrainingDate、TrainingTime

これはもっと理にかなっていますか?おそらく、単一の複合キーを使用する方が理にかなっているでしょう。

4

1 に答える 1

1

すでに提案されているいくつかのアイデアをピックアップするには: 実際には、メールアドレスは一意ですか? 実際、電話番号は一意ですか? 最も間違いなくそうです。実際には、事実は常に他の事実から一意に識別可能であり、それはトレーナー、クライアント、およびデータベースに記録したいその他すべてのものについても同様です。キー付き。

正規化の宿題では、学生は通常、キーなどの新しい属性を発明することは期待されていません。ポイントは、通常、一連の依存関係に基づいて、指定された属性の正規化された統合に到達することです。

ここでの真の問題は、データベースでどのタイプのファクト (述語) を表す必要があるか、およびそれらに適用されるビジネス ルール (依存関係) は何かということです。あなたの質問にはその情報は含まれていません-推測と仮定のみが可能です。

このような恣意的な演習を考えると、唯一の賢明な答えは、属性の完全なセットをキーとする単一の関係であると言いたくなるでしょう。そのままにしておきます。

[* 疑義を避けるために: 私は、メールや電話番号がトレーナーやその他のものに使用する正しいキーであると主張しているわけではありません. 私の要点は、電子メールは他の事実と同様に本質的に「一意」であるということですが、質問の文脈がなければ、電子メールがデータベースのキーとして実装できる、または実装すべき有用な識別子であるかどうかを判断する十分な根拠はありません]

于 2013-06-19T22:32:30.723 に答える