これは、データベースの本で割り当てられた宿題です。基本的に、これらのどれが関数の依存関係であり、どれが多値の依存関係であるかを判断し、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
これはもっと理にかなっていますか?おそらく、単一の複合キーを使用する方が理にかなっているでしょう。