Как вы определяете функциональные зависимости и первичный ключ?

В моем курсе Oracle Database Programming первая часть нашей окончательной лабораторной оценки требует, чтобы мы:

  • Определите первичный ключ таблицы, как она отображается в данный момент.
  • Найдите все функциональные зависимости таблицы, с которыми нам дано работать.
  • Нарисуйте диаграмму зависимостей для таблицы

Таблица в 1NF для начала.

Из проведенного мною исследования кажется, что мне нужно по существу объединить все возможные FD, которые не только потребуют очень много времени, но и кажутся странными, учитывая, что он хочет, чтобы мы затем отобразили эти отношения на диаграмме зависимостей. Это в основном заставляет все связываться со всем - и поэтому я считаю, что не понимаю функциональных зависимостей.

Я понимаю, что функциональная зависимость состоит в том, что в R, X->Y, где Y не создается ничем другим X, и должна позволять вам определять каждое другое значение в таблице через эту зависимость.

Я также понимаю, что "X" и "Y" могут состоять из нескольких атрибутов. Это то, чего я не понимаю, потому что, если я сопоставляю свои атрибуты с алгебраическими переменными (что, кажется, является способом сделать это?), У меня есть буквы AJ; количество зависимостей, которые я бы придумал, кажется поразительным, и я не хочу тратить время на неправильные действия.

Означает ли это, что мне нужно предоставить все полностью функциональные зависимости, частичные зависимости и транзитивные зависимости? Просто мысль об этом подавляющая.

Моя таблица состоит из 10 столбцов в ее текущем состоянии 1NF - таким образом, AJ будет моим идентификатором атрибута в процессе. Я обнаружил, что R(AD) представляет собой грозный первичный ключ, но я не уверен, нужно ли мне извлекать PK из разметки всех FD или я могу выбрать PK и найти свои FD с этого момента. Если это так, то выкладываю ли я каждый FD, учитывая, что мой PK действительно определит отображение отношений внутри модели?

Извините за стену текста, я подчеркнут, смущен, и исчерпан. Любая помощь была бы замечательной для понимания этого, и если я могу предоставить больше информации, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: Я не могу представить таблицу здесь, потому что это 10 столбцов в ширину, вместо этого я предоставил общую ссылку через Dropbox для просмотра другими, чтобы помочь:
https://www.dropbox.com/s/3vwo1axe7a1i20s/final%20lab%20instructions.pdf?dl=0

Большое спасибо.

1 ответ

Решение

Сначала вы должны знать, что означают таблица и правила. Видимо, таблица означает что-то вроде:

/*
student with id [si] has name [sn] and address [sa] and major [sm]
    and takes course [ci] with title [ct]
        from instructor with id [ii] and name [in] and office [io]
        with grade [scg]
*/
t(si,sn,sa,sm,ci,ct,ii,in,io,scg)

Таблица (она же отношение) содержит строки, которые делают критерий (он же предикат) истинным. Этот критерий может быть выражен как AND множества отдельных критериев, и разложение его на них - вот что такое дизайн и нормализация. Подобная таблица из AND, объединяющая все, что вы можете сказать о своем приложении, называется "универсальным отношением".

Теперь, используя то, что означает этот критерий и что означают правила, вы должны выяснить для каждого подмножества столбцов, когда заданное для него значение всегда появляется с одним значением для другого столбца, то есть того, что содержат FD. Обратите внимание, что если подмножество определяет столбец, то все надмножества этого столбца определяют этот столбец. Вы также можете исключить FD, если вы знаете, что данное подмножество может отображаться с несколькими значениями столбца. Узнайте о "транзитивном закрытии" и "минимальном покрытии" набора FD, чтобы выразить все FD кратко. Вы должны показать, что вы учли все возможные детерминанты, т. Е. Каждое подмножество столбцов.

Каждый раз, когда вы декомпозируете, вы должны решить, хотите ли вы, чтобы данный компонент только когда-либо содержал проекцию строк оригинала на его столбцы или он мог также содержать другие строки. Например, может ли профессор существовать без преподавания курса? Если это так, это означает, что вашего исходного критерия / таблицы на самом деле недостаточно для того, чтобы сказать все, что вы хотите о своем приложении, и вам нужна дополнительная таблица, которая не является проекцией, но имеет те же столбцы. Это часто описывается как часть нормализации, но это не так. Это замечает, что ваш дизайн был неправильным во время нормализации.

Возможно, вам придется выдвинуть гипотезу, потому что вы не знаете, какие ситуации могут возникнуть. Обычно мы предполагаем, что X_ids 1:1 с Xs; это так? Может ли ученик иметь более одного имени? Если нет, то {si} -> sn. Даже если они это сделают, будет ли таблица записывать только один? Если это так, критерием становится "... и имеет имя [sn], которое было выбрано для записи...", и все ваши запросы, которые включают имена учеников, будут включать те, которые "были выбраны для записи", и вышеупомянутый FD имеет место.

  • Только один класс преподается для каждого ID курса.
  • Студенты могут пройти до 4 курсов.
  • Каждый курс может иметь максимум 25 студентов.
  • Каждый курс преподается только одним инструктором.
  • У каждого студента может быть только одна специальность.

Что за класс? Существуют ли подклассы значений 1:1 с классами, так что то, что относится к классам, относится к этим подстрокам?

Ci определяет ct? II определяет в? Из правил, данный ci появляется только с одним ii. FD. Из правил, данный Си появляется только с одним см. FD. Из правил si не определяет ci, а курс не определяет si.

Оставшиеся без ответа вопросы должны быть решены между вами и вашим клиентом (профессором).

Вы можете определить ключи-кандидаты (один из которых вы можете вызвать первичным ключом) на FD.

(Ваше назначение использует ER, поэтому вам нужно найти критерии / предикаты для сущностей, а затем найти соответствующие для наборов столбцов, которые идентифицируют сущности, которые получают таблицы.)