2014-10-28 3 views
1

Рассмотрим следующее соотношение, которое моделирует клиенты где-тореляционная модель: Множественные, перекрывающихся функциональных зависимостей

R1 = (customer_num, birth_city, living_city, birth_city_location, living_city_location) 

где birth_city является городом, который клиент родился в то время как living_city это город, где клиент живет. Кроме того, мы считаем, что одно значение города определяет одно значение местоположения.

и давайте рассмотрим, мы имеем следующий список функциональных зависимостей:

customer_num --> birth_city 
customer_num --> living_city 

birth_city --> birth_city_location 
living_city --> living_city_location 

Наилучшая разложение для достижения нормальных форм будет:

(customer_num, birth_city, living_city) 
(birth_city, birth_city_location) 
(living_city, living_city_location) 

Это означает, что создание двух отношений для города.

Действительно, я думаю, что одного отношения достаточно, потому что, если мы знаем город, мы знаем его местоположение, и эти два отношения означают избыточность данных. Но если мы рассмотрим birth_city = living_city в основном отношении, мы потеряем семантику, что birth_city может отличаться от living_city для каждого клиента.

Учитывая два соотношения для города и мест не справедливо, потому что их значения могут перекрывать друг друга, и если мы решим изменить расположение некоторых городов в birth_city ценностей и этот город существует в living_city значений , то мы оставляем DB в несогласованном состоянии.

Я могу перефразировать вопрос в более общем плане:

R = (A, X1, X2, Y1, Y2) 

где

A --> X1 
A --> X2 

X1 --> Y1 
X2 --> Y2 

и у нас есть особое положение, которое:

if t1[X1] = t2[X2] then t1[Y1] = t2[Y2] 

Как моделировать отношения?

+0

Нормализация основана на семантике - на что указывают данные? Что означает «city_location»? Широта/долгота в центре города? Географический регион? Что-то другое? –

+0

Хорошо, давайте рассмотрим его широту/долготу. Обратите внимание, что это всего лишь пример, чтобы показать мое общее дело, несмотря на то, насколько это точно, пожалуйста, рассмотрите общий случай в конце моего вопроса. –

+0

В этом случае также выполняются FDs 'living_city_location-> living_city' и' birth_city_location-> birth_city'. –

ответ

1

Хотя ваша модель делает следовать принципу полной нормализации не следует Принципа ортогонального проектирования то есть у вас есть два отношения, которые имеют перекрывающиеся значения.

Если вы должны были следовать этому принципу отношения будут:

Клиенты (customer_num, birth_city, living_city)
города (город, city_location)

, что:

ρ город/birth_city (∏ birth_city (клиенты)) ⊆ ∏ город (города)
ρ город/living_city (∏ living_city (клиенты)) ⊆ ∏ город (города)

где

∏: Проекция
ρ: Переименовать

Я хотел бы отметить, не существует соглашение о точном определении ортогонального дизайна.

+0

Я понимаю это, но как вы можете выразить это в реляционной алгебре? Я имею в виду именно ту часть: birth_city и living_city относятся к городу? –

+0

@MedianHilal добавила реляционную алгебру для ссылочной целостности. – DrabJay

+0

ОК, это кажется ясным, но оно не может быть выражено как функциональные зависимости. Может это? –

Смежные вопросы