Базы Данных, 06 лекция (от 22 сентября)
Материал из ESyr's Wiki pages.
Предыдущая лекция | Следующая лекция
Не было понятия реляционной модели до реляционной модели Кодда.
Содержание |
Реляционная модель данных
Структурная часть
В нее входит совокупность типов данных, с которыми можно работать.
Если посмотреть, какие сейчас модели данных существуют, есть реляционные, объектно-ориентированные, объектно-реляционные, и у них у всех модели совпадают, и встроенные типы данных одни и те же, механизмы наследования похожи... Что их различает? Появляется понятие переменных, и речь идёт о долговременных (persistent) переменных — переменных, которые сохраняют свои значение вплоть до завершения программы, которая их cоздала. И всё отличие этих трёх моделей, (объектно реляционной лектор будет называть SQL) в том, какие переменные могут храниться в БД. В ОО БД могут хранится переменные любого типа, в реляционных только типа отношения. В объектно-реляционных БД тип мультимножества. Во всех трёх моделях тип мультимножества не запрещается, вопрос в том, виден ли он наверху как набор данных, с которыми работает пользователь. И от Дейты структурная составляющая модели данных.
- Множество значений
- Явно заданное или точно специфицированное
- Множество операций
- Многие опреации работают с разными типами данных, и по этому поводу есть два подхода:
- Тип опреации приводится к типу первого операнда, но это не хорошо, и у Дейты это показано в его системе типов, и надо искать правильную реализацию не для одного типа, а для всех
- Операции определяются отдельно от данных
- Многие опреации работают с разными типами данных, и по этому поводу есть два подхода:
- Литералы или представление значений
- Требуется, когда необходимо написать какою-то переменную типа
- У Дейты показано, что литерал означает немного другое: при написании 3.14 я хочу выбрать значение типа, у которого такое представление, то есть это операция, и у Дейты есть оператор SELECT
Существенная особенность типов данных, используемых в БД и в программировании вообще — конечность диапазона.
БД в реляционной модели данных представляет собой конечный набор переменных типа отношение — краткое содержание структурной части.
Манипуляционная часть
Манипуляционная часть модели содержит определение множества операций. Здесь не вводится точный синтаксис, но формулируются два механизма:
- Алгебраический подход — вводим реляционную алгебру, и с помощью этой алгебры можно строить выражения, которые берут, обрабатывают и ставят. Есть у действительных чисел алгебра, и она хорошая, так как результат всех действий есть действительное число. Реляционная алгебра — это очень похожая вещь. Реляционная алгебра замкнута в множестве отношений.
- Логический подход — реляционное исчисление. Немного по-другому определяются операции, точнее они не вводятся, а определяются правила манипуляции. Будет рассмотрено два вида исчислений — исчисление кортежей и доменов. При исчислении кортежей для определения любой формулы, является множество. Исчисление доменов — значением предикатной переменной является значение какого-то типа данных, на основе которого этот тип данных строится.
Целостная часть
Принципиальной отличием БД от ФС является то, что данные являются логически связанными. БД удовлетворяет нас, если она не противоречит нашим знанием о предметной области.
Базовые классы ограничений:
- Если в БД хранятся данные о двух разных сущностях мира, то эти данные отличаются своими внутренними характеристиками
- Если на объект ссылаются, то он должен существовать, или ссылка должна явно показывать, что она не ссылается никуда (в программировании называется отсутствием висячих ссылок)
Тип отношений
Лектор рассматривает подмножество надмножества алгебры Кодда
В современном понимании реляционной модели это может быть любой тип данных.
Надо ещё понимать, что такое значение отношения.
Любой язык должен обладать таким свойством, что в любом месте, если мы видим значение типа, то мы должны по нему понять, какого оно типа.
С этой точки зрения определение кортежа избыточно, но это делается исключительно для технического удобства, так как теперь можно сказать, что значение типа отношение это отношение кортежей.
В обиходе тип отношение часто называют заголовком отношения или схемой отношения. Значение типа отношения должно состоят из отношения кортежей, каждый из которых соответствует схеме отношения.
Типы отношения это множество, и поэтому любое подмножество типа отношения является типом отношения. И кортеж это множество, и любое подмножество кортежа является кортежем.
Типы отношений анонимны.
Итог
Ещё одно замечание: чем отличается то, что говорит лектор, от Дейты. Дейта своих последних публикациях включил кроме базовых абстрактных спецификаций описание конкретной системы типов, но это несчастье для реляционной модели данных.
Единственное требование — хранимые в БД данные должны быть типизированы.
Чем отличаются 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 |
Базы Данных
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 |