Вопросы на понимание принципов построения СУБД

Рейтинг: 2Ответов: 1Опубликовано: 09.09.2014

Читал на просторах Интернета, что среди вопросов на работу (junior-developer) бывает и такие:

  1. Что такое первая нормальная форма и процесс нормализации? Какие бывают нормальные формы?

  2. В чем смысл индекса СУБД, как они устроены, как хранятся? Как бы вы реализовали тот же функционал? Последний вопрос задают в случае, если нет четкого понимания индексов.

Ответ честно скажу - не знаю. Собственно в ответе на эти вопросы и заключается мой вопрос.

Ещё я напишу ту мешанину, которая у меня образовалась в голове при попытке найти ответы на эти вопросы, возможно, найдётся добрый (очень добный) человек и подскажет, в чём я заблуждаюсь.

Вот, что я предполагаю под некоторыми понятиями: по поводу первого знаю, что есть 6 нормальных форм + Бойса-Кодда и ДКНФ.

  • Знаю, что первая нормальная форма (н.ф.) - это невозможность нахождения двух идентичных строк в таблице и содержание в каждом поле лишь одного значения.
  • Приведение ко второй форме - это, возможно, вынесение из таблицы первой нормальной формы всех неключевых полей с повторяющимися значениями в отдельную таблицу (через внешний ключ).
  • Третья - это вторая н.ф. с отсутствием слабо связанных с ключом полей (т.е., например, зависящих от одного ключевого столбца и независящих от второго ключевого столбца при ключе по нескольким столбцам).
  • Бойса-Кодда - это третья н.ф., в которой отсутствует потенциальная возможность установить ключ по другим столбцам.
  • Четвёртая - это форма, удовлетворяющая правилу Бойса-Кодда и в которой отсутствует следующая избыточность, заключающаяся в обязательном присутсвии строки b при условии наличия в таблице строки a.
  • Пятая - это четвёртая, в которой, как я читал, все возможные вынесения полей в отдельные таблицы сделаны, но, что это значит, я понятия не имею (ведь это вроде бы сделано во второй н.ф.).
  • Шестая - понятия не имею. Что это? О_о
  • Доменно-ключевая нормальная форма - это состояние базы данных, в которой, при условии выполнения определённых ограничений, никаким запросом нельзя нарушить целостность. Здесь речь идёт, насколько я понимаю, не о целостности информации в базе данных, а о целостности базы данных, и я не знаю, как сформулировать это определение в отношении б.д.

Со вторым вопросом мои познания ещё меньше: я привык, что create index пишется в случае, если необходимо увеличить скорость поиска по этим столбцам и уменьшить скорость добавления и удаления строк в эти таблицы. Когда начал читать, с удивлением для себя обнаружил, что бывают кластерные и некластерные индексы. Я предполагаю, что первые выглядят в виде таблицы с первыми значениями индексируемых полей с каждой страницы из кучи, напротив которых указаны номер файла и страницы. Некластерные индексы - честно говоря, не представляю, что это... Вроде видел описание, как дерева из двух уровней, на пером из которых то же, что и у кластерных индексов, а на втором - страницы с индексируемыми значениями, напротив которых указанны номер файла, страницы и строки из кучи, где эта запись строки находится... Но даже если на секунду предположить, что что-то из написанного имеет место быть, то зачем такая реализация некластерных индексов нужна, мне не удалось предположить.

Ответы

▲ 2
НФ Требование Примечание
1 Отсутствие множественных значений Т.е. такого значения как "Nick, Mike, Alex" быть не должно
2 Отсутствие зависимости неключевых атрибутов от части составного ключа По определению получается, что наличие id автоматически приводит таблицу к соответствию этому требованию т.к. это несоставной ключ
3 Отсутствие зависимости неключевых атрибутов от других неключевых атрибутов -
BCNF (3.5) Все функциональные зависимости (ФЗ) в отношении должны включать Super Key В отношении "A, B, C" есть 2 ФЗ: А -> В и А -> С. Для соответствия 3.5НФ атрибут А обязательно должен быть Super Key
4 Отсутствие multi-valued зависимостей (multi-valued зависимость - это когда 2 атрибута зависят от 3-его, но не зависят друг от друга) Отношение "Пиццерия, Сорт пиццы, Район доставки" не в 4НФ, т.к. "Сорт пиццы" и "Район доставки" зависят от "Пиццерия" и не зависят друг от друга
5 Отношение находится в 5НФ, когда дальнейшая декомпозиция (на подтаблицы) невозможна. Т.е оно уже максимально декомпозировано По крайней мере невозможно без потери данных

Кроме описанных требований есть общее требование для всех НФ - соответствие предыдущей НФ (т.е. 3-я НФ предполагает обязательное соответствие 2-й НФ).

Примечание для лучшего понимания таблицы:

  • Функциональная зависимость (ФЗ) - в таблице "A, B" есть ФЗ "A -> B", если каждому уникальному значению A соответствует только 1 определенное значение B. Т.е. по А мы точно знаем, какое В.
  • SuperKey - это 1 или несколько атрибутов, которые уникально идентифицируют кортеж в отношении.
  • Primary Key - это Super Key, состоящий из минимально возможного количества атрибутов.

Index - это объект БД, который служит для ускорения поиска.

  • Индекс представляет из себя структуру данных.
  • Индекс должен создаваться на то поле, по которому происходит поиск. Или на несколько полей, если поиск по нескольким.
  • Индекс положительно влияет только на скорость SELECT. На скорость INSERT и UPDATE он влияет отрицательно.
  • Индекс влияет на скорость операций с WHERE и JOIN. На HAVING не влияет.
  • Работа индекса м.б. основана на Binary Tree, B-Tree, HashMap и Bitmap