Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
- | [[Базы Данных, 05 лекция (от 21 сентября)|Предыдущая лекция]] | [[Базы Данных, 07 лекция (от 28 сентября)|Следующая лекция]]
| + | == From Ebaums Inc to MurkLoar. == |
- | | + | We at EbaumsWorld consider you as disgrace of human race. |
- | <div class="comment">Лектор рассказывает своё представление о реляционной модели, отличное, как от Кодда, так и от Дейта.</div>
| + | Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated. |
- | | + | Dig yourself a grave - you will need it. |
- | Не было понятия реляционной модели до реляционной модели Кодда.
| + | |
- | | + | |
- | =Реляционная модель данных= | + | |
- | | + | |
- | <div class="definition">'''Модель данных''' — совокупность следующих компонент:</div>
| + | |
- | | + | |
- | ==Структурная часть==
| + | |
- | | + | |
- | В нее входит совокупность типов данных, с которыми можно работать.
| + | |
- | | + | |
- | <div class="comment">Пример: есть только булевские типы, и на них всё строится.</div>
| + | |
- | | + | |
- | Если посмотреть, какие сейчас модели данных существуют, есть реляционные, объектно-ориентированные, объектно-реляционные, и у них у всех модели совпадают, и встроенные типы данных одни и те же, механизмы наследования похожи... Что их различает? Появляется понятие переменных, и речь идёт о ''долговременных'' (persistent) переменных — переменных, которые сохраняют свои значение вплоть до завершения программы, которая их cоздала. И всё отличие этих трёх моделей, (объектно реляционной лектор будет называть SQL) в том, какие переменные могут храниться в БД. В ОО БД могут хранится переменные любого типа, в реляционных только типа отношения. В объектно-реляционных БД тип мультимножества. Во всех трёх моделях тип мультимножества не запрещается, вопрос в том, виден ли он наверху как набор данных, с которыми работает пользователь. И от Дейты структурная составляющая модели данных.
| + | |
- | | + | |
- | <div class="definition">'''Тип данных''' — некоторая сущность, которая обладает тремя характеристиками:</div>
| + | |
- | | + | |
- | * Множество значений
| + | |
- | ** Явно заданное или точно специфицированное
| + | |
- | * Множество операций
| + | |
- | ** Многие опреации работают с разными типами данных, и по этому поводу есть два подхода:
| + | |
- | **# Тип опреации приводится к типу первого операнда, но это не хорошо, и у Дейты это показано в его системе типов, и надо искать правильную реализацию не для одного типа, а для всех
| + | |
- | **# Операции определяются отдельно от данных
| + | |
- | * Литералы или представление значений
| + | |
- | ** Требуется, когда необходимо написать какою-то переменную типа
| + | |
- | ** У Дейты показано, что литерал означает немного другое: при написании 3.14 я хочу выбрать значение типа, у которого такое представление, то есть это операция, и у Дейты есть оператор SELECT
| + | |
- | | + | |
- | Существенная особенность типов данных, используемых в БД и в программировании вообще — конечность диапазона.
| + | |
- | | + | |
- | БД в реляционной модели данных представляет собой конечный набор переменных типа отношение — краткое содержание структурной части.
| + | |
- | | + | |
- | ==Манипуляционная часть==
| + | |
- | | + | |
- | Манипуляционная часть модели содержит определение множества операций. Здесь не вводится точный синтаксис, но формулируются два механизма:
| + | |
- | | + | |
- | # Алгебраический подход — вводим реляционную алгебру, и с помощью этой алгебры можно строить выражения, которые берут, обрабатывают и ставят. Есть у действительных чисел алгебра, и она хорошая, так как результат всех действий есть действительное число. Реляционная алгебра — это очень похожая вещь. Реляционная алгебра замкнута в множестве отношений.
| + | |
- | # Логический подход — реляционное исчисление. Немного по-другому определяются операции, точнее они не вводятся, а определяются правила манипуляции. Будет рассмотрено два вида исчислений — исчисление кортежей и доменов. При исчислении кортежей для определения любой формулы, является множество. Исчисление доменов — значением предикатной переменной является значение какого-то типа данных, на основе которого этот тип данных строится.
| + | |
- | | + | |
- | ==Целостная часть==
| + | |
- | | + | |
- | Принципиальной отличием БД от ФС является то, что данные являются логически связанными. БД удовлетворяет нас, если она не противоречит нашим знаниям о предметной области.
| + | |
- | | + | |
- | Базовые классы ограничений:
| + | |
- | | + | |
- | # Если в БД хранятся данные о двух разных сущностях мира, то эти данные отличаются своими внутренними характеристиками
| + | |
- | # Если на объект ссылаются, то он должен существовать, или ссылка должна явно показывать, что она не ссылается никуда (в программировании называется отсутствием висячих ссылок)
| + | |
- | | + | |
- | ===Тип отношений===
| + | |
- | | + | |
- | Лектор рассматривает подмножество надмножества алгебры Кодда
| + | |
- | | + | |
- | <div class="defintion">'''Тип отношения''' — множество пар, которые включают два компонента — имя атрибута и тип данных этого атрибута. Одно ограничение — требуется, чтобы в этом множестве первые элементы были различны. Обозначение: {<A, T>}</div>
| + | |
- | | + | |
- | <div class="defintion">'''Домен''' — не есть часть реляционной модели данных — исторически важно, используется в SQL — именованное подмножество типа данных или доменов. Вносят некоторую семантику над значением типов данных. Ограничивает не только значения, над которыми можно выполнять операцию, но и результат. В действительности, определение домена это всего-навсего способ определения нового типа данных. Этот аспект уходит в систему типов, и каким образом этот тип образован, выходит за реляционную модель.</div>
| + | |
- | | + | |
- | <div class="comment">А, лектор не выключил звук мобильного!</div>
| + | |
- | | + | |
- | В современном понимании реляционной модели это может быть любой тип данных.
| + | |
- | | + | |
- | Надо ещё понимать, что такое значение отношения.
| + | |
- | | + | |
- | <div class="defintion">'''Кортеж''' — множество упорядоченных троек: атрибут, тип (домен), значение. Обозначение: {<A, T, V>}</div>
| + | |
- | | + | |
- | Любой язык должен обладать таким свойством, что в любом месте, если мы видим значение типа, то мы должны по нему понять, какого оно типа.
| + | |
- | | + | |
- | С этой точки зрения определение кортежа избыточно, но это делается исключительно для технического удобства, так как теперь можно сказать, что ''значение типа отношения - это отношение кортежей''.
| + | |
- | | + | |
- | В обиходе тип отношение часто называют заголовком отношения или схемой отношения. Значение типа отношения должно состоят из отношения кортежей, каждый из которых соответствует схеме отношения.
| + | |
- | | + | |
- | Типы отношения это множество, и поэтому любое подмножество типа отношения является типом отношения. И кортеж это множество, и любое подмножество кортежа является кортежем.
| + | |
- | | + | |
- | Типы отношений анонимны.
| + | |
- | | + | |
- | <div class="comment">[[Подшивалов|Дмитрий Б. Подшивалов]] — известный человек. Он в своё время был редактором перевода книжки [[Вирт|Вирта]] про [[Modula|Modula-2]], написал послесловие, у там есть пассаж относительно вреда структурной эквивалентности типов, оно порождает многочисленные трудности при реализации и не даёт никакой свободы. В SQL нет возможности определить заголовок таблицы до CREATE TABLE, хотя на самом деле в реальных БД есть таблицы, у которых одинаковые заголовки.</div>
| + | |
- | | + | |
- | ==Итог==
| + | |
- | | + | |
- | Ещё одно замечание: чем отличается то, что говорит лектор, от Дейты. Дейта в своих последних публикациях включил кроме базовых абстрактных спецификаций описание конкретной системы типов, но это несчастье для реляционной модели данных.
| + | |
- | | + | |
- | <div class="defintion">'''Переменные отношения''' (relvar — relation variable) — переменная некоего типа отношение, которая хранит (...).</div>
| + | |
- | | + | |
- | <div class="defintion">'''РБД''' — конечный набор переменных отношения.</div>
| + | |
- | | + | |
- | <div class="comment">!!!Лектор обозначает отношением и тип отношение, и значение типа отношения, в зависимости от контекста.</div>
| + | |
- | | + | |
- | Единственное требование — хранимые в БД данные должны быть типизированы.
| + | |
- | | + | |
- | Чем отличаются 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.
| + | |
- | | + | |
- | Таблица для конъюнкции:
| + | |
- | {| border="1"
| + | |
- | !&
| + | |
- | !true
| + | |
- | !false
| + | |
- | !unknown
| + | |
- | |-
| + | |
- | !true
| + | |
- | |true
| + | |
- | |false
| + | |
- | |unknown
| + | |
- | |-
| + | |
- | !false
| + | |
- | |false
| + | |
- | |false
| + | |
- | |false
| + | |
- | |-
| + | |
- | !unknown
| + | |
- | |unknown
| + | |
- | |false
| + | |
- | |unknown
| + | |
- | |}
| + | |
- | | + | |
- | <div class="comment">!!!Лектор не любит, когда путают конъюнкцию и дизъюнкцию, и когда забывают их значки</div>
| + | |
- | | + | |
- | <div class="comment">!!!При рассмотрении реляционной модели про Microsoft говорить нельзя</div>
| + | |
- | | + | |
- | {{Базы Данных}}
| + | |
- | {{Lection-stub}}
| + | |