Объясните неаддитивные свойства, используя пример декомпозиции нормальной формы Бойса-Кодда.

Я прочитал определение и вроде понял - после соединения без потерь вы не должны терять никакой информации. Но почему этот конкретный пример подходит для третьего решения декомпозиции? Этот пример взят из книги «Основы систем баз данных» Эльмасри и Навате.

У нас есть таблица TEACH со столбцами «Студент», «Учитель» и «Курс». Он находится в 3-й нормальной форме, и мы пытаемся превратить его в BCNF (нормальная форма Бойса-Кодда).

УЧИТЬ (СТУДЕНТ, КУРС, ПРЕПОДАВАТЕЛЬ)

STUDENT  COURSE    INSTRUCTOR
Nathan   Database  Mark
Smith    Database  Navathe
Smith    Op Sys    Ammar
Smith    Theory    Schulman
Wallace  Database  Mark
Wallace  Op Sys    Ahamad
Wong     Database  Omienscki
Zelaya   Database  Navathe

В тексте говорится, что есть три возможных разложения отношения TEACH

1) {Student, Instructor} and {Student, Course}
2) {Course, Instructor} and {Course, Student}
3) {Instructor, Course} and {Instructor, Student}

Согласно тексту, есть только две FUnctional зависимости

1) {студент, курс} -> инструктор

2) инструктор -> курс

Согласно тексту, допустимо только решение 3, поскольку оно не будет генерировать ложные кортежи и, следовательно, обладает неаддитивным свойством.

Ложные кортежи возникают из-за объединения не первичных атрибутов или не внешних ключей. Разве студент не является основным атрибутом? Так почему же решение 1 не работает?

Мое понимание того, почему это решение 3, заключается в том, что мы не можем получить такую ​​информацию, как «У меня есть инструктор, какой курс преподает инструктор?» из решений 1 и 2. Это будет связано с функциональной зависимостью в исходной таблице, что инструктор -> курс.




Ответы (1)


Вы, кажется, не уловили нормализацию. Вам нужно выучить и использовать точные определения.

Нормализация заменяет отношение его проекциями, которые (без потерь/неаддитивно) присоединяются к нему. Бинарная декомпозиция, удаляющая проблемную FD (функциональную зависимость), является без потерь / неаддитивной, когда она находится в столбцах суперключа одного из компонентов. (Суперключ является надмножеством CK (ключа-кандидата).) ("Соединение по непервичным атрибутам или не внешним ключам" не характеризует случаи с потерями. Почему вы так думаете?) После того, как вы компоненты, вы должны определить, каковы их CK/суперключи.

Предположительно, вы имеете в виду, что эти два FD образуют прикрытие для исходной таблицы. (То есть, действительны только те FD, которые выполняются, потому что они выполняются.) Тогда единственным нетривиальным FD, который выполняется в компонентах, является Instructor -> Course, а {Instructor} является CK компонента {Instructor, Course} , и единственный вариант, который является соединением суперключа компонента, — 3).

Student является основным атрибутом каждого компонента, в котором он появляется, что означает, что он является членом CK. Но для без потерь важно, выполняется ли соединение на суперключе и {student} не является суперключом какого-либо компонента.

PS 1. Дело не в том, что "после соединения без потерь информация не должна теряться". По определению соединение без потерь когда вы не теряете никакой информации. Точно так же «не будет генерировать ложные кортежи» означает то же самое по определению, что и «имеет неаддитивное свойство».

PS 2. Ваше "понимание" непонятно объяснено. Предположим, исходное отношение содержит строки, в которых «инструктор ПРЕПОДАВАТЕЛЬ преподает курс КУРС студенту СТУДЕНТ». Когда FD Instructor -> Course сохраняется в оригинале, это также можно описать как наличие строк, в которых «инструктор INSTRUCTOR преподает курс COURSE, а инструктор INSTRUCTOR обучает студента STUDENT». Поскольку смысл СОЕДИНЕНИЯ таблиц — это И/соединение значений таблиц, мы можем реконструировать таблицу, соединив две таблицы для «ПРЕПОДАВАТЕЛЬ преподает курс КУРС» и «ПРЕПОДАВАТЕЛЬ преподает СТУДЕНТУ СТУДЕНТА» согласно 3). Но этот FD не позволяет нам перефразировать исходное значение с помощью И на 1) и 2). Поэтому в таких случаях нецелесообразно заменять его на JOIN.

person philipxy    schedule 16.04.2017
comment
Хорошо, я добавил функциональные зависимости, указанные в книге. Да, я не разбираюсь в нормализации, но наш курс ускорил этот компонент за последние 2 дня занятий, и у нас не было задания по этому материалу. Нет возможности потренироваться. - person Kent Wong; 17.04.2017