Базы Данных, 06 лекция (от 22 сентября)

Материал из ESyr's Wiki pages.

Перейти к: навигация, поиск

Предыдущая лекция | Следующая лекция

Лектор рассказывает своё представление о реляционной модели, отличное, как от Кодда, так и от Дейта.

Не было понятия реляционной модели до реляционной модели Кодда.

Содержание

Реляционная модель данных

Модель данных — совокупность следующих компонент:

Структурная часть

В нее входит совокупность типов данных, с которыми можно работать.

Пример: есть только булевские типы, и на них всё строится.

Если посмотреть, какие сейчас модели данных существуют, есть реляционные, объектно-ориентированные, объектно-реляционные, и у них у всех модели совпадают, и встроенные типы данных одни и те же, механизмы наследования похожи... Что их различает? Появляется понятие переменных, и речь идёт о долговременных (persistent) переменных — переменных, которые сохраняют свои значение вплоть до завершения программы, которая их cоздала. И всё отличие этих трёх моделей, (объектно реляционной лектор будет называть SQL) в том, какие переменные могут храниться в БД. В ОО БД могут хранится переменные любого типа, в реляционных только типа отношения. В объектно-реляционных БД тип мультимножества. Во всех трёх моделях тип мультимножества не запрещается, вопрос в том, виден ли он наверху как набор данных, с которыми работает пользователь. И от Дейты структурная составляющая модели данных.

Тип данных — некоторая сущность, которая обладает тремя характеристиками:
  • Множество значений
    • Явно заданное или точно специфицированное
  • Множество операций
    • Многие опреации работают с разными типами данных, и по этому поводу есть два подхода:
      1. Тип опреации приводится к типу первого операнда, но это не хорошо, и у Дейты это показано в его системе типов, и надо искать правильную реализацию не для одного типа, а для всех
      2. Операции определяются отдельно от данных
  • Литералы или представление значений
    • Требуется, когда необходимо написать какою-то переменную типа
    • У Дейты показано, что литерал означает немного другое: при написании 3.14 я хочу выбрать значение типа, у которого такое представление, то есть это операция, и у Дейты есть оператор SELECT

Существенная особенность типов данных, используемых в БД и в программировании вообще — конечность диапазона.

БД в реляционной модели данных представляет собой конечный набор переменных типа отношение — краткое содержание структурной части.

Манипуляционная часть

Манипуляционная часть модели содержит определение множества операций. Здесь не вводится точный синтаксис, но формулируются два механизма:

  1. Алгебраический подход — вводим реляционную алгебру, и с помощью этой алгебры можно строить выражения, которые берут, обрабатывают и ставят. Есть у действительных чисел алгебра, и она хорошая, так как результат всех действий есть действительное число. Реляционная алгебра — это очень похожая вещь. Реляционная алгебра замкнута в множестве отношений.
  2. Логический подход — реляционное исчисление. Немного по-другому определяются операции, точнее они не вводятся, а определяются правила манипуляции. Будет рассмотрено два вида исчислений — исчисление кортежей и доменов. При исчислении кортежей для определения любой формулы, является множество. Исчисление доменов — значением предикатной переменной является значение какого-то типа данных, на основе которого этот тип данных строится.

Целостная часть

Принципиальной отличием БД от ФС является то, что данные являются логически связанными. БД удовлетворяет нас, если она не противоречит нашим знанием о предметной области.

Базовые классы ограничений:

  1. Если в БД хранятся данные о двух разных сущностях мира, то эти данные отличаются своими внутренними характеристиками
  2. Если на объект ссылаются, то он должен существовать, или ссылка должна явно показывать, что она не ссылается никуда (в программировании называется отсутствием висячих ссылок)

Тип отношений

Лектор рассматривает подмножество надмножества алгебры Кодда

Тип отношения — множество пар, которые включают два компонента — имя атрибута и тип данных этого атрибута. Одно ограничение — требуется, чтобы в этом множестве первые элементы были различны. Обозначение: {<A, T>}
Домен — не есть часть реляционной модели данных — исторически важно, используется в SQL — именованное подмножество типа данных или доменов. Вносят некоторую семантику над значением типов данных. Ограничивает не только значения, над которыми можно выполнять операцию, но и результат. В действительности, определение домена это всего-навсего способ определения нового типа данных. Этот аспект уходит в систему типов, и каким образом этот тип образован, выходит за реляционную модель.
А, лектор не выключил звук мобильного!

В современном понимании реляционной модели это может быть любой тип данных.

Надо ещё понимать, что такое значение отношения.

Кортеж — множество упорядоченных троек: атрибут, тип (домен), значение. Обозначение: {<A, T, V>}

Любой язык должен обладать таким свойством, что в любом месте, если мы видим значение типа, то мы должны по нему понять, какого оно типа.

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

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

Типы отношения это множество, и поэтому любое подмножество типа отношения является типом отношения. И кортеж это множество, и любое подмножество кортежа является кортежем.

Типы отношений анонимны.

Дмитрий Б. Подшивалов — известный человек. Он в своё время был редактором перевода книжки Вирта про Modula-2, написал послесловие, у там есть пассаж относительно вреда структурной эквивалентности типов, оно поражает многочисленные трудности при реализации и не даёт никакой свободы. В SQL нет возможности определить заголовок таблицы до CREATE TABLE, хотя на самом деле в реальных БД есть таблицы, у которых одинаковые заголовки.

Итог

Ещё одно замечание: чем отличается то, что говорит лектор, от Дейты. Дейта своих последних публикациях включил кроме базовых абстрактных спецификаций описание конкретной системы типов, но это несчастье для реляционной модели данных.

Переменные отношения (relvar — relation variable) — переменная некоего типа отношение, которая хранит (...).
РБД — конечный набор переменных отношения.
!!!Лектор обозначает отношением и тип отношение, и значение типа отношения, в зависимости от контекста.

Единственное требование — хранимые в БД данные должны быть типизированы.

Чем отличаются relvar от обыкновенных переменных — если обыкновенные переменные нельзя не инициализировать перед использованием, то при работе с БД, когда имеем отношение с контейнерами, широкая таблица, и сплошь и рядом пытаемся собрать все возможные данные, например, БД военно-учётного стола, и там должно быть очень много данных, тем не менее, когда человека приписывают, как правило, про него известно не всё, например, какой человек скажет, что одна нога короче другой, а данные хранить в базе нужно, и для того, чтобы можно было бороться с проблемой отсутствующей информации, Кодд же предложил ввести одно псевдозначение, которое называется NULL, оно не является членом какого-либо типа данных, и может использоваться в любой операции, где может использоваться какое-то значения типа данных, причём оно обладает следующими свойствами: в русском языке оно называется неопределенным значением, что неправильно, так как это псевдозначение. Так вот, для любого значения А типа Т A op NULL ≡ NULL op A ≡ NULL op NULL ≡ NULL. Для логических операций A comp_op NULL ≡ NULL comp_op A ≡ NULL comp_op NULL ≡ unknown.

Таблица для конъюнкции:

& true false unknown
true true false unknown
false false false false
unknown unknown false unknown
!!!Лектор не любит, когда путают конъюнкцию и дизъюнкцию, и когда забывают их значки
!!!При рассмотрении реляционной модели про Microsoft говорить нельзя


Базы Данных


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32


Календарь

пт чт пт чт пт чт пт чт пт чт
Сентябрь
01 07 14 15 21 22 28 29
Октябрь
  05 06 12 13 19 20 26 27
Ноябрь
  02 03 09 16 17 23 24 30
Декабрь
01 07 08 14 15 21 22 28


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйтса, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты