Проектирование без потерь соединения, сохранение зависимостей, база данных 3NF - PullRequest
3 голосов
/ 03 ноября 2011

Мне нужно спроектировать базу данных, которая будет отслеживать следующие атрибуты:

    stdnum       // student number
    postcode     // postal code
    phone_number // student phone number
    city         // student address: city

Также перечислены функциональные зависимости:

    stdnum -> postcode
    stdnum -> phone_number
    postcode -> city
    phone_number -> city

Мне нужно найти без потерь соединение, сохранение зависимостей, 3-я нормальная форма декомпозиции атрибутов .
Я пробовал разные декомпозиции, но не было никого, кто отвечал бы всем требованиям (это: без потерь соединение, сохранение зависимостей, 3-я нормальная форма).
Например если я оставлю исходное отношение без изменений (таблица будет иметь все 4 атрибута), я получу соединение без потерь, сохраняя зависимость, но не 3NF, только 2NF.
Следующее разложение:

(stdnum, postcode, phone_number, city) = 
=(stdnum, postcode, phone_number) JOIN (postcode, city) JOIN (phone_number, city)

в 3NF, сохраняет зависимость, но не без потерь.
Есть ли решение моей проблемы?

Спасибо.

Ответы [ 4 ]

1 голос
/ 03 ноября 2011

Возможно, цель задания состоит в том, чтобы заставить вас найти отрицательный ответ на ваш вопрос «Есть ли какое-нибудь решение для моей проблемы?».

Наличие вашей базы данных как единой вещи с 4 атрибутами обязательно означаетможет быть только один D (город) для каждого A (стад).Разложение обычным образом для B-> D и C-> D FDs обязательно вводит возможность наличия двух разных D, связанных с каждым A.

Работа с этим требует введения ограничения базы данных вдизайн, но ограничения базы данных выходят за рамки собственно теории нормализации.

И не декомпозиция обязательно означает, что вы не получите 3NF.

Следовательно: возможно, целью назначения является сделатьВы обнаружите, что нормализация не является святым Граалем проектирования баз данных.Я думаю, что вы уже были на этом треке.

1 голос
/ 09 февраля 2013

Как объяснили на этих слайдах , всегда есть соединение, сохраняющее зависимости, без потерь 3NF.Описанный алгоритм его вычисления реализован в этом скрипте пролога ( объяснение и источник ).

Такое разложение всегда существует, и в данном случае это то, что выподошел:

(stdnum, postcode, phone_number) JOIN
(postcode, city) JOIN
(phone_number, city)

Вы можете запустить Алгоритм Таблицы , чтобы проверить, действительно ли это соединение без потерь.

1 голос
/ 03 ноября 2011

Ваша разбивка исходного отношения предполагает, что эти зависимости указывают на один и тот же CITY.

postcode -> city
phone_number -> city

В реальной жизни это не всегда так. Например, в моей местности есть адреса, в которых есть телефонный номер с кодом города ЛОНДОН, но в почтовом индексе KINGSTON, SURREY. А еще есть мобильные телефоны, которые не отображаются ни в каком географическом местоположении.

Так что я бы решил вашу проблему, изменив модель данных.


"Атрибуты - это абстракция. Вам не нужно понимать значение atributes. Вся информация о них находится в функционале зависимости, перечисленные в задании. "

Размышление на конкретных примерах - лучший способ понять недостатки наших абстракций. В этом случае, возможно, у вас действительно пять атрибутов, а не четыре. Или, возможно, существует функциональная зависимость postcode -> city, но phone_number -> city является поддельной. Или, возможно, вам нужно смоделировать тот факт, что студент может иметь более одного номера телефона, например, роет стационарный (общий), мобильный (персонал).

0 голосов
/ 22 апреля 2014

В теории зависимостей зависимость соединения является ограничением для набора правовых отношений по схеме базы данных.Таблица T подчиняется зависимости объединения, если T всегда можно воссоздать путем объединения нескольких таблиц, каждая из которых имеет подмножество атрибутов T. Если одна из таблиц в объединении имеет все атрибуты таблицы T, зависимость объединенияназывается тривиальным.

Зависимость соединения играет важную роль в пятой нормальной форме, также известной как нормальная форма присоединения к проекту, поскольку можно доказать, что при разложении схемы R в таблицах с R_1 на R_nдекомпозиция будет декомпозицией без потерь при соединении, если вы ограничите правовые отношения на R зависимостью соединения с R, называемой * (R_1, R_2, ... R_n).

Другой способ описать зависимость соединения - этоскажем, что набор отношений в зависимости соединения не зависит друг от друга.

В отличие от случая функциональных зависимостей, нет никакой полной и полной аксиоматизации для зависимостей соединения, хотя аксиоматизация существует для более выразительных языков зависимостей, таких каккак полные типизированные зависимости.Тем не менее, влияние зависимостей соединения является разрешимым.

...