一目で。。。
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。