Рассмотрим следующее соотношение, которое моделирует клиенты где-тореляционная модель: Множественные, перекрывающихся функциональных зависимостей
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]
Как моделировать отношения?
Нормализация основана на семантике - на что указывают данные? Что означает «city_location»? Широта/долгота в центре города? Географический регион? Что-то другое? –
Хорошо, давайте рассмотрим его широту/долготу. Обратите внимание, что это всего лишь пример, чтобы показать мое общее дело, несмотря на то, насколько это точно, пожалуйста, рассмотрите общий случай в конце моего вопроса. –
В этом случае также выполняются FDs 'living_city_location-> living_city' и' birth_city_location-> birth_city'. –