Выявление функциональных зависимостей II - PullRequest
3 голосов
/ 25 апреля 2011

Я немного запутался с последним постом, поэтому нашел хороший пример, который должен прояснить ситуацию.enter image description here

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?Конечно, для вышеуказанного отношения имя клиента отображается точно на один номер клиента, но благодаря интуиции мы знаем, что в таблицу можно добавить более одного J SMith.Если это так, этот FD является недействительным, поскольку он формирует отношение 1 .. *.Можем ли мы сказать, что custName -> custNo, зная этот факт?Мы просто основываем FD на данных выборки?Или мы учитываем возможные значения, которые можно добавить?

Ответы [ 4 ]

6 голосов
/ 25 апреля 2011

С первого взгляда. , .

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

И я уверен, что есть и другие. Образец данных не является репрезентативным, и это проблема, когда вы пытаетесь определить функциональные зависимости от данных. Допустим, у ваших выборочных данных была только одна строка.

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

FD отвечают на вопрос: «Учитывая одно значение для« x », знаю ли я одно и только одно значение для« y »?» На основе этого набора данных из одной строки каждый атрибут определяет каждый другой атрибут. 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

Три разные модели. , .

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

model   make
--
Focus   Ford
Ka      Ford
Sunny   Nissan

Да. Одна марка для каждой модели. На основании данных выборки модель -> марка.

Имеет ли 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.

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. Таким образом, на основе данных примера {carReg, custName} -> hireDate.

4 голосов
/ 26 апреля 2011

Ну, так как вы запросили второе мнение, я дам вам одно.

Второе мнение состоит в том, что первое (CatCall's) полностью верно.

Образцы данных не соответствуютдостаточно для выявления / определения функциональных зависимостей в данных.Что необходимо для определения / определения функциональных зависимостей в данных, это требования пользователей, описания / определения бизнес-среды, которую база данных предназначена для поддержки, ...

Только ваши пользователи могут сказать вам, так или иначедругое, какие функциональные зависимости применяются.(Не интерпретируйте это как означающее, что вы должны говорить своим пользователям, что они должны говорить вам «что такое применимые FD», потому что ваши пользователи, как правило, не будут знать, что означает этот термин. Однако то, что представляют собой применимые FD, могутпо-прежнему получаются из ничего, кроме бизнес-спецификаций, которые предоставляет вам пользователь.)

(примерных данных PS, наоборот, может быть действительно достаточно для демонстрации того, что определенный данный FD, безусловно, не будет применяться. Но это не ваш вопрос.)

1 голос
/ 25 марта 2018

FD (функциональная зависимость) выражает определенное свойство отношения значение или переменную .Мы можем сказать, что оно соответствует или не удовлетворяет (удовлетворено или не удовлетворено) (истинно или не верно) данного отношения значение .Когда мы говорим, что оно сохраняется или не выполняется для отношения переменная , мы имеем в виду, что оно сохраняется или не сохраняется для каждого возможного значения переменной, которая может возникнуть в приложении.

Такжеесли нам дано значение , и нам говорят, что FD, которым оно удовлетворяет, это FD, которым переменная, которая может содержать его, удовлетворяет , тогда , исходя из этого предположения FD переменной являются FD значения.(Это иногда называют «репрезентативными данными» для переменной.) Но если нам просто дается значение, которое может возникнуть для переменной, то мы знаем только, что

  • FD, которые don 't удерживать в значении также не в переменной
  • тривиальные FD обоих держат
    (те, что в форме S -> подмножество S)
    (те, которые должны храниться независимо от значения, основываясь только на атрибутах)
    (которые должны быть одинаковыми для значения и переменной)

См. Также thisответить .

0 голосов
/ 27 апреля 2011

Вот моя попытка отношений:

enter image description here

...