2

前回の投稿と少し混乱していたので、問題を解決するための良い例を見つけました。ここに画像の説明を入力してください

HireDateとcarRegが主キーです。だから私の質問は、私が以下で特定したもの以外の追加の機能依存性を誰かが見つけることができます....変更も歓迎します:

fd1 carReg -> make, model, outletNo, outletLoc
fd2 custNo -> custName
fd3 outletNo -> outletLoc
fd4 model -> make (only if we assume a model name is unique to a make)
fd5 carReg, hireDate -> make, model, custNo, custName, outletNo, outletLoc 

上記が正しいかどうかはわかりませんが、もっとあると思います。誰かが私がこれらの忌まわしいFDを最終的に理解するのを手伝ってくれませんか!

編集:catcallの答えに基づいて....私の質問はこれです:custName-> custNoはどのように有効なFDですか?上記の関係では、確かに、顧客名は正確に1つの顧客番号にマッピングされますが、直感的には、複数のJSMithをテーブルに追加できることがわかります。この場合、このFDは1 .. *関係を形成するため、無効になります。この事実を知っているcustName->custNoと本当に言えますか?FDはサンプルデータに基づいているだけですか?それとも、追加できる可能性のある値を考慮に入れていますか?

4

4 に答える 4

7

一目で。。。

custName -> custNo
model -> make
outletLoc -> outletNo
carReg, custNo -> hireDate
carReg, custName -> hireDate

そして、私は他にもあると確信しています。サンプルデータは代表的なものではなく、データから機能依存性を判断しようとすると問題になります。サンプルデータに1行しかなかったとしましょう。

carReg    hireDate make  model  custNo  custName  outletNo  outletLoc
--
MS34 0GD  14/5/03  Ford  Focus  C100    Smith, J  01        Bearsden

FDは、「「x」に1つの値が与えられた場合、「y」に1つだけの値を知っていますか?」という質問に答えます。その1行のサンプルデータのセットに基づいて、すべての属性が他のすべての属性を決定します。custNoはhireDateを決定します。HireDateはoutletLocを決定します。custNameがモデルを決定します。

サンプルデータが代表的でない場合、有効でないFDを簡単に見つけることができます。いくつかの無効な機能依存性を取り除くには、より代表的なサンプルデータが必要です。

custName -> custNo isn't valid ('C101', 'Hen, P')
carReg, custNo -> hireDate isn't valid ('MS34 0GD', 'C100', '15/7/04')
carReg, custName -> hireDate isn't valid ('MS34 0GD', 'Hen, P', '15/8/03')

SQLを使用して、サンプルデータの機能依存性を調査できます。

create table reg (
  CarReg char(8) not null,
  hireDate date not null,
  Make varchar(10) not null,
  model varchar(10) not null,
  custNo char(4) not null,
  custName varchar(10) not null,
  outletNo char(2) not null,
  outletLoc varchar(15) not null
);

insert into reg values
('MS34 OGD', '2003-05-14', 'Ford', 'Focus', 'C100', 'Smith, J', '01', 'Bearsden'),
('MS34 OGD', '2003-05-15', 'Ford', 'Focus', 'C201', 'Hen, P', '01', 'Bearsden'),
('NS34 TPR', '2003-05-16', 'Nissan', 'Sunny', 'C100', 'Smith, J', '01', 'Bearsden'),
('MH34 BRP', '2003-05-14', 'Ford', 'Ka', 'C313', 'Blatt, O', '02', 'Kelvinbridge'),
('MH34 BRP', '2003-05-20', 'Ford', 'Ka', 'C100', 'Smith, J', '02', 'Kelvinbridge'),
('MD51 OPQ', '2003-05-20', 'Nissan', 'Sunny', 'C295', 'Pen, T', '02', 'Kelvinbridge');

モデルはメーカーを決定しますか?

select distinct model 
from reg
order by model;

model
--
Focus
Ka
Sunny

3つの異なるモデル。。。

select model, make
from reg
group by model, make
order by model;

model   make
--
Focus   Ford
Ka      Ford
Sunny   Nissan

うん。モデルごとに1つのメーカー。サンプルデータに基づいて、モデル->作成します。

carReg、custName-> HireDateですか?

select distinct carReg, custName
from reg
order by custName;

carReg
--
MH34 BRP  Blatt, O
MS34 OGD  Hen, P
MD51 OPQ  Pen, T
MS34 OGD  Smith, J
NS34 TPR  Smith, J
MH34 BRP  Smith, J

carRegとcustNameの6つの異なる組み合わせ。

select carReg, custName, hireDate
from reg
group by carReg, custName, hireDate
order by custName;

carReg  custName  hireDate
--
MH34 BRP  Blatt, O  2003-05-14
MS34 OGD  Hen, P    2003-05-15
MD51 OPQ  Pen, T    2003-05-20
MH34 BRP  Smith, J  2003-05-20
NS34 TPR  Smith, J  2003-05-16
MS34 OGD  Smith, J  2003-05-14

うん。carRegとcustNameの組み合わせごとに1つのhireDate。したがって、サンプルデータに基づいて、{carReg、custName}->hireDate。

于 2011-04-25T19:45:26.917 に答える
4

さて、あなたがセカンドオピニオンを求めたので、私はあなたにそれをあげます。

セカンドオピニオンは、最初の(CatCallの)は完全に正しいというものです。

サンプルデータは、データ内の機能依存性を識別/決定するのに十分ではありません。データ内の機能依存性を識別/決定するために必要なのは、ユーザー要件、データベースがサポートすることを目的としたビジネス環境の説明/定義、...

どの機能依存性が適用されるかは、ユーザーだけが何らかの方法で教えてくれます。(これは、ユーザーに「該当するFDとは何か」を伝える必要があることを意味するものと解釈しないでください。ユーザーは通常、その用語の意味を知らないためです。ただし、該当するFDとは、それでも、ユーザーが提供するビジネス仕様以外の何物からも導き出されません。)

(逆に、PSサンプルデータは、特定のFDが確実に適用されないことを示すのに十分な場合があります。しかし、それはあなたの質問ではありません。)

于 2011-04-25T21:08:35.257 に答える
1

FD(関数従属性)は、関係値または変数の特定のプロパティを表します。与えられた関係値に対して、それが成り立つ、または成り立たない(満たされる、または満たされない)(真である、または真ではない)と言うことができます。関係変数を保持する、または保持しないと言うときは、アプリケーションで発生する可能性のある変数のすべての可能な値を保持する、または保持しないことを意味します。

また、値が与えられ、それが満たすFDは、それを保持できる変数が満たすFDであると言われた場合、その仮定により、変数のFDは値のFDです。(これは、変数の「代表データ」と呼ばれることもあります。)しかし、変数に対して発生する可能性のある値が与えられた場合、それは次のことしかわかりません。

  • 値を保持しないFDも変数を保持しません
  • 両方の自明なFD
    (S-> Sのサブセットの形式
    のもの)(属性のみに基づいて、値に関係なく保持する必要があるもの)
    (値と変数で同じである必要があります)

この回答も参照してください。

于 2018-03-25T10:57:39.253 に答える
0

これが人間関係の私の試みです:

ここに画像の説明を入力してください

于 2011-04-27T11:24:27.970 に答える