notes

Декомпозиция

Функциональная зависимость

  1. Если в двух строках одинаковое значение в столбце B => у них одинаковое значение в столбце C
  2. Не должно существовать экземпляров таблицы, в которых это правило нарушается
  3. Тогда B функционально определяет C: B -> C.
  4. B в этой ситуации называется детерминантом в функциональной зависимости
  5. Функциональная зависимость является тривиальной если X -> X

Декомпозиция без потерь

  1. Пусть в таблице T есть атрибуты A, B и C:
     T = {A,B,C}
    
  2. Если B -> C то декомпозиция:
     T1 = {A,B}
     T2 = {B,C}
    

    является декомпозицией без потерь и

     T = T1 JOIN T2
    

Нормальная форма Бойса-Кодда

  1. В любой нетривиальной фунциональной зависимости детерминантом является ключ
  2. Если выписать все функциональные зависимости в нашей БД, и в каждой из этих зависимостей детерминантом является ключ - то база находится в нормальной форме Бойса-Кодда

Ошибки при проектировании БД

  1. Не корректный составной ключ
    • таблица

      | University | Researcher | Conference | City | | — | — | — | — |

    • Ключ {Researcher, Conference}:
    • с одной тороны кажется что всё норм, т.к. имееются следующие зависимости
      • Researcher, Conference -> University
      • Researcher, Conference -> City
    • но по факту
      • Researcher -> University
      • Conference -> City
    • таким образом детерминантом является не ключ а его часть, поэтому имеем нарушении нормальной формы Бойса-Кодда
  2. Не являющийся ключом детерминант
    • таблица Researchers

      University Address Resercher
          Key
    • С одной стороны зависимости выглядят вот так
      • Researcher -> University
      • Researcher -> Address
    • Но если присмотреться то адресс университета зависит не от исследователя а от университета:
      • University -> Address
    • Получаем детерминант который не является ключом => нарушение нормальной формы
  3. Не все столбцы являющиеся ключевыми таковыми объявлены
    • таблица Researchers

      University Researcher Email
        Key  
    • Email в данной ситуации должен быть объявлен как Unique

  4. Сввязь 1:N вместо M:N
    • таблица Researchers

      University Researcher Conference
      FK: University.Name Key FK: Conference.Name
    • В данной структуре исследователь не может принимать участие в нескольких конференциях

  5. Связь M:N вместо 1:N