[МУЗЫКА]
[МУЗЫКА] Здравствуйте.
В прошлый раз мы с вами поговорили про диаграммы сущность‐связь.
Сейчас начнём разговор про модели данных.
В 70‐е, 80‐е годы...
Эти годы вы можете вспомнить себе, глядя на эту фотографию, да?
Когда на людях обычно были такие большие очки с квадратными оправами.
Что тогда из себя представляло хранение данных?
Тогда данные хранились в файлах, это обычно были обычные текстовые файлы,
где поля отделялись друг от друга какими‐то разделителями,
например запятыми или знаками табуляции.
Ну вот пример вы видите на экране.
С такими данными работать было очень неудобно,
и появились специально разработанные для хранения данных модели.
Что должна делать эта модель?
Она должна определять некую абстракцию данных для определённого приложения.
Что включает в себя модель?
Модель включает в себя структуры данных, которые соответствуют хранимой предметной
области, она описывает операции, которые с данными будут происходить.
Также там, в модели, прописываются все зависимости и ограничения,
которые есть между данными, информацию о которых мы храним.
Наибольшее распространение получили следующие модели данных:
иерархическая модель, сетевая модель и реляционная.
Рассмотрим их подробнее.
Рассмотрим первую модель, иерархическую модель.
Она исторически появилась первой, потому что многим,
многим предметным областям свойственна иерархическая организация.
Рассмотрим это на примере факультета.
Например, факультет является верхушечкой дерева.
У факультета есть студенты, которые учатся на каких‐то курсах,
курсы делятся на группы.
И вот на самом нижнем, на самом нижнем уровне этого дерева находятся студенты.
В то же время, на факультетах работают преподаватели,
которые подразделяются по кафедрам.
Там могут ещё какие‐то, например, научные лаборатории,
какой‐то вспомогательный штат и так далее.
Но в любом случае, в иерархической модели у нас есть один верхний центральный узел,
от которого начинается доступ ко всем другим элементам.
И для того, чтобы получить доступ к элементам нижнего уровня, мы всегда
начинаем сверху вниз, спускаясь на каждом уровне, начиная от корня нашего дерева.
Из этой модели видно,
что не очень удобно прослеживаются связи между разными объектами.
Как, например,
в иерархической модели проследить связь между преподавателем и студентом?
Поэтому на смену иерархической модели пришла другая,
сетевая, которая уже позволяла организовать
горизонтальные связи для объектов нижних уровней.
Вот, например, на этой диаграмме мы видим отделы,
в которых работают сотрудники.
У сотрудников есть дети, да?
Есть разные организации‐заказчики, которые ведут какие‐то проекты,
в проектах участвуют сотрудники, и проекты также закрепляются за какими‐то отделами.
Вот здесь мы уже видим, что у нас между разными объектами существует
несколько видов связей: Связь не только сверху вниз,
согласно иерархической модели, а есть связи и горизонтальные.
Иерархическая и сетевая модели существовали какое‐то время, ими
пользовались, там данные были организованы обычно в виде направленных списков.
Разбираться в структуре, которая описывала данные в таких моделях, было очень сложно.
И им на смену пришла реляционная модель,
которая и закрепилась теорией баз данных на огромный промежуток времени.
Первые публикации по этой модели появились в 1969 году,
а интенсивное развитие реляционная теория,
которая основана на этой реляционной модели, получила в 70‐е годы.
Первые попытки реализовать и запустить промышленно базы данных,
основанные на такой модели, были в конце 70‐х годов.
Специально для этой модели был разработан специальный язык,
который называется SQL, или Sequel.
Первый стандарт этого языка появился в 1986 году, достаточно давно,
и эффективные реализации языка SQL появились уже с 1990 года.
Обязательно нужно указать автора этой модели,
которая получила такую популярность, это Эдгар Франк Кодд.
Первой статьёй на эту тематику стала статья,
которая называется A Relational Model of Data for Large Shared Data Banks,
которая была опубликована в журнале Communications of the ACM.
И Эдгар Кодд считается основателем реляционной теории.
Что же из себя представляет реляционная модель?
Вся информация в базе данных на логическом уровне должна быть явно
представлена единственным образом значениями в таблицах.
То есть для представления любого вида информации у нас есть таблицы.
Мы можем считать, что наши столбцы играют роль атрибутов,
наши сущности представляются в таблицах, строки являются
экземплярами данных для каждой сущности, а шапка таблицы — это имена атрибутов.
Давайте рассмотрим на конкретном примере.
В данном случае мы видим на экране таблицу,
которая представляет себе сущность — студент,
у студента есть имя, отчество, есть номер группы,
и есть номер зачётки, который для данной сущности является ключевым атрибутом.
Мы специально подчеркнули его, чтобы указать на его важность.
Нам нужно ввести некие определения,
для того чтобы манипулировать реляционными данными.
Первые определения, которые мы вводим — это домены.
Что такое домен?
Это множество, элементы которого рассматриваются как скалярные значения.
Отношения.
Отношения мы можем считать предикатом, заданном на прямом произведении доменов,
и эти домены должны быть необязательно разными.
Атрибуты являются аргументами отношений.
Введём некоторые формулы.
Домены обозначим здесь буквами D, атрибуты — буквами A, кортежи,
которые представляют экземпляры сущности, мы будем обозначать в угловых скобочках.
Значение каждого атрибута берётся из своего домена, из своей
области определения, и формально мы можем считать отношения, которые на этом слайде
обозначены буквой R, неким подмножеством прямого произведения доменов.
То есть ну предположим, если нам нужно получить нашу таблицу со студентами,
то мы берём все возможные номера зачёток, все возможные фамилии, имена,
все возможные номера групп, делаем прямое произведение,
то есть любые сочетания элементов этих доменов,
и какое‐то подмножество будет являться нашим отношением.
Дополнительная терминология к реляционной теории.
Мы считаем экземпляром конкретное наполнение базы данных.
А конкретное наполнение таблицы будем называть телом отношения.
Совокупность атрибутов нашего отношения является его заголовком,
иногда его называют схемой отношения.
Заголовок вместе с телом образует значение отношения.
Каждая строка таблицы называется кортежем.
Говоря формальным языком,
схема отношения — это конечное множество упорядоченных пар вида A и t,
где первый элемент пары является именем атрибута, а t обозначает
название некоторого базового типа данных или ранее определённого домена,
Напомним, что значение каждого атрибута должно быть атомарное,
и оно должно быть какого‐то определённого типа данных, который поддерживает СУБД.
По определению, требуется, чтобы все имена атрибутов в рамках одного отношения
были различными, иначе мы не сможем их отличать.
У каждого отношения может быть разное количество атрибутов.
Количество атрибутов отношения мы называем его арностью, или размерностью.
Приведём наиболее типичные, наиболее распространённые
типы данных, которые могут служить для представления атрибутов.
Ну, во‐первых, это, конечно, символ этих данных,
мы будем хранить строки, строки могут быть произвольной длины, какая нам нужна.
Могут быть данные в битовой форме.
Это могут быть точные числа, которые также могут отличаться в
зависимости от максимального значения, которое нам может потребоваться.
Мы можем хранить округлённые числа, которые также могут отличаться точностью.
Бывает специальный тип данных для представления денег,
для представления даты и времени.
Бывают разные даты для интервала времени.
Ещё есть специфические типы данных, например географические, например для
хранения иерархических идентификаторов, но это уже специфика определённых СУБД.
Кортежи.
Чем отличаются друг от друга кортежи?
Они отличаются друг от друга исключительно значением своих атрибутов.
У нас, напомню вам, что отношение — это множество,
а у множества нет никакого порядка, это просто набор элементов.
Поэтому у кортежа нет ни порядкового номера, ни времени,
никаких других значений, кроме значений атрибутов.
И ещё раз напомню вам, что в реляционной базе данных не может быть двух одинаковых
кортежей в одной таблице, потому что таково требование теории множеств.
Последнее, что мы рассмотрим — это пример таблицы.
Ещё раз проговорим на примере терминологию.
Мы изображаем таблицу «Студент», в которой первичный
ключ — это номер зачётки, это первый атрибут.
Фамилия, имя, отчество студента и номер группы — это его неключевые атрибуты.
Вместе номер зачётки, фамилия,
имя, отчество студента и номер группы образуют заголовок отношения.
Кортежи представляют для отображения данных о конкретных студентах.
Вместе все записи отношения с заголовком образуют значение отношения.
Типы данных.
Номер зачётки у нас, наверное, будет целочисленным, фамилия,
имя, отчество студента будет строковым значением, и номер группы,
наверно, тоже может быть число, а может быть строка, как нам потребуется.
Итак, мы с вами рассмотрели наиболее популярные модели для представления данных
и привели примеры.