1

私の Oracle Database Programming コースでは、ラボの最終評価の最初の部分で次のことを行う必要があります。

  • 現在表示されているテーブルの主キーを特定します
  • 作業するために与えられたテーブルのすべての機能依存関係を見つけます。
  • テーブルの依存関係図を描く

テーブルはそもそも 1NF にあります。

私が行った調査によると、考えられるすべての FD を本質的に組み合わせる必要があるようです。これは非常に多くの時間を消費するだけでなく、これらの関係を依存関係図にマッピングすることを彼が望んでいることを考えると奇妙に思えます。これにより、基本的にすべてがすべてにリンクされます。これが、機能の依存関係を理解し​​ていないと私が信じている理由です。

関数の依存関係は、R では X->Y を構成し、Y は他の X によって生成されないことを理解しており、この依存関係を通じてテーブル内の他のすべての値を決定できるようにする必要があります。

また、'X' と 'Y' は複数の属性で構成できることも理解しています。これは私が理解していないことです。なぜなら、属性を代数変数にマップすると (これがその方法のように思われます)、AJ という文字を持っているからです。考えつく依存関係の数は驚くべきものに思えますが、何か間違った方法で時間を無駄にしたくはありません。

これは、完全に機能する依存関係、部分的な依存関係、および推移的な依存関係をすべて提供する必要があるということですか?

私のテーブルは、現在の 1NF の状態では 10 列で構成されています。したがって、AJ はプロセス内の属性識別子になります。R(AD) が手ごわい主キーを構成することがわかりましたが、すべての FD を配置して PK を導出する必要があるのか​​、それとも PK を選択してこの時点から FD を見つけることができるのかはわかりません。その場合、PK がモデル内の関係のマッピングを実際に決定することを考えると、それでもすべての FD をレイアウトしますか?

https://www.dropbox.com/s/3vwo1axe7a1i20s/final%20lab%20instructions.pdf?dl=0

4

1 に答える 1

1

まず、テーブルとルールの意味を理解する必要があります。どうやら、テーブルは次のようなものを意味します。

/*
student with id [si] has name [sn] and address [sa] and major [sm]
    and takes course [ci] with title [ct]
        from instructor with id [ii] and name [in] and office [io]
        with grade [scg]
*/
t(si,sn,sa,sm,ci,ct,ii,in,io,scg)

テーブル (別名リレーション) は、基準 (別名述語) を真にする行を保持します。その基準は、一連の個別の基準の AND として表すことができ、それをそれらに分解することが設計と正規化の目的です。アプリケーションについて言えることすべてを AND で結合したこのような表は、「普遍的な関係」と呼ばれます。

その基準が何を意味し、ルールが何を意味するかを使用して、特定の値が常に別の列の 1 つの値と共に表示される場合、つまり FD が保持するものを、列のサブセットごとに把握する必要があります。サブセットが列を決定する場合、その列のすべてのスーパーセットがその列を決定することに注意してください。特定のサブセットが列の複数の値で表示される可能性があることがわかっている場合は、FD を除外することもできます。すべての FD を簡潔に表現するために、一連の FD の「推移閉包」と「最小限のカバー」について学びます。考えられるすべての決定要因、つまり列のすべてのサブセットを説明したことを示さなければなりません。

分解するたびに、特定のコンポーネントがその列に元の行の射影のみを保持するか、それとも他の行も保持できるかを決定する必要があります。たとえば、教授はコースを教えずに存在できますか? もしそうなら、あなたの元の基準/テーブルは実際にはあなたのアプリケーションについてあなたが望むすべてのことを言うのに十分ではなく、それの射影ではないが同じ列を持つ追加のテーブルが必要であることを意味します. これは正規化の一部として説明されることがよくありますが、そうではありません。正規化中に設計が間違っていたことに気付いています。

どのような状況が発生するかわからないため、仮説を立てなければならない場合があります。通常、X_id は X と 1:1 であると想定しています。そうですか?学生は複数の名前を持つことができますか? そうでない場合は {si} -> sn. そうだとしても、テーブルは 1 つしか記録しないのでしょうか? その場合、基準は「...and has name [sn] that has been selected to be recording...」となり、学生の名前を含むすべてのクエリには、「選択されて記録される」ものが含まれます。上記の FD が成立します。

  • コース ID ごとに 1 つのクラスのみが教えられます。
  • 学生は最大 4 つのコースを受講できます。
  • 各コースには、最大 25 人の学生がいる場合があります。
  • 各コースは、1 人のインストラクターのみによって教えられます。
  • 各学生は、専攻を 1 つだけ持つことができます。

クラスとは何ですか?クラスと 1 対 1 の値のサブ行があり、クラスの場合はそれらのサブ行に適用されますか?

ci は ct を決定しますか? で決めますか?ルールから、特定の ci は 1 つの ii だけで表示されます。FD. ルールから、特定の si は 1 つの sm だけで表示されます。FD. ルールから、si は ci を決定せず、コースは si を決定しません。

未回答の質問は、あなたとクライアント (教授) の間で解決する必要があります。

FD の候補キー (主キーと呼べるキーの 1 つ) のみを決定できます。

(割り当ては ER を使用するため、エンティティに関する基準/述語を見つけてから、テーブルを取得するエンティティを識別する列セットに関する対応するものを見つける必要があります。)

于 2014-12-11T03:19:30.200 に答える