БЛ
|
Блюдо
|
Вид
|
1
|
Лобио
|
Закуска
|
2
|
Харчо
|
Суп
|
3
|
Шашлык
|
Горячее
|
4
|
Кофе
|
Десерт
|
БЛ
|
Порций
|
Дата_Р
|
1
|
158
|
1/9/94
|
2
|
144
|
1/9/94
|
3
|
207
|
1/9/94
|
4
|
235
|
1/9/94
|
...
|
...
|
...
|
Расход
Продукты
ПР
|
Продукт
|
Калор.
|
1
|
Фасоль
|
3070
|
2
|
Лук
|
450
|
3
|
Масло
|
7420
|
4
|
Зелень
|
180
|
5
|
Мясо
|
1660
|
6
|
Томаты
|
240
|
7
|
Рис
|
3340
|
8
|
Кофе
|
2750
|
Рецепты
Состав
БЛ
|
Рецепт
|
1
|
Ломаную очищ
|
...
|
...
|
БЛ
|
ПР
|
Веc (г)
|
1
|
1
|
200
|
1
|
2
|
40
|
1
|
3
|
30
|
1
|
4
|
10
|
2
|
5
|
80
|
2
|
2
|
30
|
2
|
6
|
40
|
2
|
7
|
50
|
2
|
3
|
15
|
2
|
4
|
15
|
3
|
5
|
180
|
3
|
6
|
100
|
3
|
2
|
40
|
Поставщики
ПОС
|
Поставщик
|
Город
|
1
|
"Полесье"
|
Киев
|
2
|
"Наталка"
|
Киев
|
3
|
"Хуанхэ"
|
Пекин
|
4
|
"Лайма"
|
Рига
|
5
|
"Юрмала"
|
Рига
|
6
|
"Даугава"
|
Рига
|
Города
Поставки
Город
|
Страна
|
Киев
|
Украина
|
Пекин
|
Китай
|
Рига
|
Латвия
|
ПОС
|
ПР
|
Вес (кг)
|
Цена
|
Дата_П
|
1
|
6
|
120
|
0.45
|
27/8/94
|
1
|
3
|
50
|
1.82
|
27/8/94
|
1
|
2
|
50
|
0.61
|
27/8/94
|
2
|
2
|
100
|
0.52
|
27/8/94
|
2
|
5
|
100
|
2.18
|
27/8/94
|
2
|
4
|
10
|
0.88
|
27/8/94
|
3
|
1
|
250
|
0.37
|
24/8/94
|
3
|
7
|
75
|
0.44
|
24/8/94
|
3
|
8
|
40
|
2.87
|
24/8/94
|
4
|
3
|
70
|
1.56
|
30/8/94
|
5
|
5
|
200
|
2.05
|
30/8/94
|
Рис. 1 База данных "Питание"
Блюдо
|
Вид
|
Реце пт
|
Порц ий
|
Дат а Р
|
Проду кт
|
Калорийно сть
|
Ве с (г)
|
Поставщ ик
|
Горо д
|
Стран а
|
Ве с (кг
)
|
Цен а ($)
|
Дата П
|
Лобио
|
Закус ка
|
Лом.
|
158
|
1/9/9
4
|
Фасоль
|
3070
|
20
0
|
"Хуанхэ"
|
Пеки н
|
Китай
|
25
0
|
0.37
|
24/8/
94
|
|
|
|
|
|
Лук
|
450
|
40
|
"Наталка"
|
Киев
|
Украи на
|
10
0
|
0.52
|
27/8/
94
|
|
|
|
|
|
Масло
|
7420
|
30
|
"Лайма"
|
Рига
|
Латвия
|
70
|
1.55
|
30/8/
94
|
|
|
|
|
|
Зелень
|
180
|
10
|
"Даугава"
|
Рига
|
Латвия
|
15
|
0.99
|
30/8/
94
|
Харчо
|
Суп
|
...
|
144
|
1/9/9
4
|
Мясо
|
1660
|
80
|
"Наталка"
|
Киев
|
Украи на
|
10
0
|
2.18
|
27/8/
94
|
|
|
|
|
|
Лук
|
450
|
30
|
"Наталка"
|
Киев
|
Украи на
|
10
0
|
0.52
|
27/8/
94
|
|
|
|
|
|
Томат ы
|
240
|
40
|
"Полесье"
|
Киев
|
Украи на
|
12
0
|
0.45
|
27/8/
94
|
|
|
|
|
|
Рис
|
3340
|
50
|
"Хуанхэ"
|
Пеки н
|
Китай
|
75
|
0.44
|
24/8/
94
|
|
|
|
|
|
Масло
|
7420
|
15
|
"Полесье"
|
Киев
|
Украи на
|
50
|
1.62
|
27/8/
94
|
|
|
|
|
|
Зелень
|
180
|
15
|
"Наталка"
|
Киев
|
Украи на
|
10
|
0.88
|
27/8/
94
|
Шашл ык
|
Горяч ее
|
...
|
207
|
1/9/9
4
|
Мясо
|
1660
|
18
0
|
"Юрмала
"
|
Рига
|
Латвия
|
20
0
|
2.05
|
30/8/
94
|
|
|
|
|
|
Лук
|
450
|
40
|
"Полесье"
|
Киев
|
Украи на
|
50
|
0.61
|
27/8/
94
|
|
|
|
|
|
Томат ы
|
240
|
10
0
|
"Полесье"
|
Киев
|
Украи на
|
12
0
|
0.45
|
27/8/
94
|
|
|
|
|
|
Зелень
|
180
|
20
|
"Даугава"
|
Рига
|
Латвия
|
15
|
0.99
|
30/8/
94
|
Кофе
|
Десер т
|
...
|
235
|
1/9/9
4
|
Кофе
|
2750
|
8
|
"Хуанхэ"
|
Пеки н
|
Китай
|
40
|
2.87
|
24/8/
94
|
Риc.2 Данные, необходимые для создания базы данных "Питание"
Таблица на рис. 3 представляет собой экземпляр корректного отношения. Его называют универсальным отношением проектируемой БД. В одно универсальное отношение включаются все представляющие интерес атрибуты, и оно может содержать все данные, которые предполагается размещать в БД в будущем. Для малых БД (включающих не более 15 атрибутов) универсальное отношение может использоваться в качестве отправной точки при проектировании БД.
Блюдо__Порций__Дата_Р'>Блюдо__Рецепт'>Блюдо__Вид'>Блюдо__Вид__Рецеп_т__Порци_й'>Блюдо
|
Вид
|
Рецеп т
|
Порци й
|
Дат а Р
|
Проду кт
|
Калорийнос ть
|
Ве с (г)
|
Поставщ ик
|
Горо д
|
Стран а
|
Ве с (кг
)
|
Цен а ($)
|
Дата П
|
Лобио
|
Закуск а
|
Лом.
|
158
|
1/9/9
4
|
Фасоль
|
3070
|
20
0
|
"Хуанхэ"
|
Пеки н
|
Китай
|
25
0
|
0.37
|
24/8/9
4
|
Лобио
|
Закуск а
|
Лом
|
108
|
1/9/9
4
|
Лук
|
450
|
40
|
"Наталка"
|
Киев
|
Украи на
|
10
0
|
0.52
|
27/8/9
4
|
Лобио
|
Закуск а
|
Лом
|
108
|
1/9/9
4
|
Масло
|
7420
|
30
|
"Лайма"
|
Рига
|
Латвия
|
70
|
1.55
|
30/8/9
4
|
Лобио
|
Закуск а
|
Лом
|
108
|
1/9/9
4
|
Зелень
|
180
|
10
|
"Даугава"
|
Рига
|
Латвия
|
15
|
0.99
|
30/8/9
4
|
Харчо
|
Суп
|
...
|
144
|
1/9/9
4
|
Мясо
|
1660
|
80
|
"Наталка"
|
Киев
|
Украи на
|
10
0
|
2.18
|
27/8/9
4
|
Харчо
|
Суп
|
...
|
144
|
1/9/9
4
|
Лук
|
450
|
30
|
"Наталка"
|
Киев
|
Украи на
|
10
0
|
0.52
|
27/8/9
4
|
Харчо
|
Суп
|
...
|
144
|
1/9/9
4
|
Томаты
|
240
|
40
|
"Полесье"
|
Киев
|
Украи на
|
12
0
|
0.45
|
27/8/9
4
|
Харчо
|
Суп
|
...
|
144
|
1/9/9
4
|
Рис
|
3340
|
50
|
"Хуанхэ"
|
Пеки н
|
Китай
|
75
|
0.44
|
24/8/9
4
|
Харчо
|
Суп
|
...
|
144
|
1/9/9
4
|
Масло
|
7420
|
15
|
"Полесье"
|
Киев
|
Украи на
|
50
|
1.62
|
27/8/9
4
|
Харчо
|
Суп
|
...
|
144
|
1/9/9
4
|
Зелень
|
180
|
15
|
"Наталка"
|
Киев
|
Украи на
|
10
|
0.88
|
27/8/9
4
|
Шашл ык
|
Горяч ее
|
...
|
207
|
1/9/9
4
|
Мясо
|
1660
|
18
0
|
"Юрмала"
|
Рига
|
Латвия
|
20
0
|
2.05
|
30/8/9
4
|
Шашл ык
|
Горяч ее
|
...
|
207
|
1/9/9
4
|
Лук
|
450
|
40
|
"Полесье"
|
Киев
|
Украи на
|
50
|
0.61
|
27/8/9
4
|
Шашл ык
|
Горяч ее
|
...
|
207
|
1/9/9
4
|
Томаты
|
240
|
10
0
|
"Полесье"
|
Киев
|
Украи на
|
12
0
|
0.45
|
27/8/9
4
|
Шашл ык
|
Горяч ее
|
...
|
207
|
1/9/9
4
|
Зелень
|
180
|
20
|
"Даугава"
|
Рига
|
Латвия
|
15
|
0.99
|
30/8/9
4
|
Кофе
|
Десер т
|
...
|
235
|
1/9/9
4
|
Кофе
|
2750
|
8
|
"Хуанхэ"
|
Пеки н
|
Китай
|
40
|
2.87
|
24/8/9
4
|
Рис.3 Универсальное отношение "Питание"
Начинающий проектировщик будет использовать отношение "Питание" (рис.3) в качестве завершенной БД. Действительно, зачем разбивать отношение "Питание" на несколько более мелких отношений, если оно заключает в себе все данные? А разбивать надо потому, что при использовании универсального отношения возникает несколько проблем:
Избыточность. Данные практически всех столбцов многократно повторяются. Повторяются и некоторые наборы данных (Блюдо-Вид-Рецепт, Продукт-Калорийность, Поставщик__Город__Страна'>Поставщик-Город-Страна). Нежелательно повторение рецептов, некоторые из которых намного больше рецепта "Лобио". И уж совсем плохо, что все данные о блюде (включая рецепт) повторяются каждый раз, когда это блюдо включается в меню.
Потенциальная противоречивость (аномалии обновления). Вследствие избыточности можно обновить адрес поставщика в одной строке, оставляя его неизменным в других. Если поставщик кофе сообщил о своем переезде в Харбин и была обновлена строка с продуктом кофе, то у поставщика "Хуанхэ" появляется два адреса, один из которых не актуален. Следовательно, при обновлениях необходимо просматривать всю таблицу для нахождения и изменения всех подходящих строк.
Аномалии включения. В БД не может быть записан новый поставщик ("Няринга", Вильнюс, Литва), если поставляемый им продукт (Огурцы) не используется ни в одном блюде. Можно, конечно, поместить неопределенные значения в столбцы Блюдо, Вид, Порций и Вес (г) для этого поставщика. Но если появится блюдо, в котором используется этот продукт, не забудем ли мы удалить строку с неопределенными значениями?
По аналогичным причинам нельзя ввести и новый продукт (например, Баклажаны), который предлагает существующий поставщик (например, "Полесье"). А как ввести новое блюдо, если в нем используется новый продукт (Крабы)?
Аномалии удаления. Обратная проблема возникает при необходимости удаления всех продуктов, поставляемых данным поставщиком или всех блюд, использующих эти продукты. При таких удалениях будут утрачены сведения о таком поставщике.
Многие проблемы этого примера исчезнут, если выделить в отдельные таблицы сведения о блюдах, рецептах, расходе блюд, продуктах и их поставщиках, а также создать связующие таблицы "Состав" и "Поставки" (рис. 4).
Блюда
Блюдо
|
Вид
|
Лобио
|
Закуска
|
Харчо
|
Суп
|
Шашлык
|
Горячее
|
Кофе
|
Десерт
|
...
|
...
|
Продукты
Рецепты
Блюдо
|
Рецепт
|
Лобио
|
Ломаную очищ
|
...
|
...
|
Состав
Расход
Блюдо
|
Порций
|
Дата_Р
|
Лобио
|
158
|
1/9/94
|
Харчо
|
144
|
1/9/94
|
Шашлык
|
207
|
1/9/94
|
Кофе
|
235
|
1/9/94
|
...
|
...
|
...
|
Поставщики
Продукт
|
Калор.
|
Фасоль
|
3070
|
Лук
|
450
|
Масло
|
7420
|
Зелень
|
180
|
Блюдо
|
Продукт
|
Вес (г)
|
Лобио
|
Фасоль
|
200
|
Лобио
|
Лук
|
40
|
Лобио
|
Масло
|
30
|
Лобио
|
Зелень
|
10
|
Поставщик
|
Город
|
Страна
|
"Полесье"
|
Киев
|
Украина
|
"Наталка"
|
Киев
|
Украина
|
"Хуанхэ"
|
Пекин
|
Китай
|
"Лайма"
|
Рига
|
Латвия
|
Харчо
|
Мясо
|
80
|
... ...
|
...
|
"Юрмала"
|
Рига Латвия
|
...
|
... ...
|
Поставки
Поставщик
|
Город
|
Продукт
|
Вес (кг)
|
Цена ($)
|
Дата_П
|
"Полесье"
|
Киев
|
Томаты
|
120
|
0.45
|
27/8/94
|
"Полесье"
|
Киев
|
Масло
|
50
|
1.62
|
27/8/94
|
"Полесье"
|
Киев
|
Лук
|
50
|
0.61
|
27/8/94
|
"Наталка"
|
Киев
|
Лук
|
100
|
0.52
|
27/8/94
|
...
|
...
|
...
|
...
|
...
|
...
|
Рис. 4 Преобразование универсального отношения "Питание"
Включение. Простым добавлением строк (Поставщики; "Няринга", Вильнюс, Литва) и (Поставки; "Няринга", Вильнюс, Огурцы, 40) можно ввести информацию о новом поставщике. Аналогично можно ввести данные о новом продукте (Продукты; Баклажаны, 240) и (Поставки; "Полесье", Киев, Баклажаны, 50).
Удаление. Удаление сведений о некоторых поставках или блюдах не приводит к потере сведений о поставщиках.
Обновление. В таблицах рис.3 все еще много повторяющихся данных, находящихся в связующих таблицах (Состав и Поставки). Следовательно, в данном варианте БД сохранилась потенциальная противоречивость: для изменения названия поставщика с "Полесье" на "Днепро" придется изменять не только строку таблицы Поставщики, но и множество строк таблицы Поставки. При этом не исключено, что в БД будут одновременно храниться: "Полесье", "Палесье", "Днепро", "Днипро" и другие варианты названий.
Кроме того, повторяющиеся текстовые данные (такие как название блюда "Рулет из телячей грудинки с сосисками и гарниром из разноцветного пюре" или продукта "Колбаса московская сырокопченая") существенно увеличивают объем хранимых данных.
Вопросы для закрепления Литература:
Абдуллина В.З. Базы данных в информационных системах: Учебник, 2015
Астахова И.Ф., Мельников В.М., Толстобров А.П., Фертиков В. В. СУБД: язык SQL в примерах и задачах.—М.:ФИЗМАТЛИТ,2009. — 168 с.
Волк В. К. Базы данных. Проектирование, программирование, управление и администрирование: учебник / В. К. Волк.— Санкт_Петербург: Лань, 2020.— 244 с: ил.— (Учебники для вузов. Специальная литература).
Дьяков, И.А. Базы данных. Язык SQL [Электронный ресурс]: учебное пособие / И.А. Дьяков. – Тамбов : Изд-во ФГБОУ ВПО «ТГТУ», 2012. –80 с..
Зрюмов, Е. А. Базы данных для инженеров [Текст]: учебное пособие / Е. А. Зрюмов, А. Г. Зрюмова; Алт. гос. техн. ун-т им. И. И. Ползунова. – Барнаул : Изд-во АлтГТУ, 2010. – 131 с..
Тема: Инфологическое моделирование
Количество часов: 1
Основные вопросы/план темы:
Тезисы лекции
Цель инфологического моделирования – обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. Поэтому инфологическую модель данных пытаются строить по аналогии с естественным языком (последний не может быть использован в чистом виде из-за сложности компьютерной обработки текстов и неоднозначности любого естественного языка). Основными конструктивными элементами инфологических моделей являются сущности, связи между ними и их свойства (атрибуты).
Сущность – любой различимый объект (объект, который мы можем отличить от другого), информацию о котором необходимо хранить в базе данных. Сущностями могут быть люди, места, самолеты, рейсы, вкус, цвет и т.д. Необходимо различать такие понятия, как тип сущности и экземпляр сущности. Понятие тип сущности относится к набору однородных личностей, предметов, событий или
идей, выступающих как целое. Экземпляр сущности относится к конкретной вещи в наборе. Например, типом сущности может быть ГОРОД, а экземпляром – Москва, Киев и т.д.
Атрибут – поименованная характеристика сущности. Его наименование должно быть уникальным для конкретного типа сущности, но может быть одинаковым для различного типа сущностей (например, ЦВЕТ может быть определен для многих сущностей: СОБАКА, АВТОМОБИЛЬ, ДЫМ и т.д.). Атрибуты используются для определения того, какая информация должна быть собрана о сущности. Примерами атрибутов для сущности АВТОМОБИЛЬ являются ТИП, МАРКА, НОМЕРНОЙ ЗНАК, ЦВЕТ и т.д. Здесь также существует различие между типом и экземпляром. Тип атрибута ЦВЕТ имеет много экземпляров или значений:
Красный, Синий, Банановый, Белая ночь и т.д., однако каждому экземпляру сущности присваивается только одно значение атрибута.
Абсолютное различие между типами сущностей и атрибутами отсутствует. Атрибут является таковым только в связи с типом сущности. В другом контексте атрибут может выступать как самостоятельная сущность. Например, для автомобильного завода цвет – это только атрибут продукта производства, а для лакокрасочной фабрики цвет – тип сущности.
Ключ – минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся. Для сущности Расписание ключом является атрибут Номер_рейса или набор: Пункт_отправления, Время_вылета и Пункт_назначения (при условии, что из пункта в пункт вылетает в каждый момент времени один самолет).
Связь – ассоциирование двух или более сущностей. Если бы назначением базы данных было только хранение отдельных, не связанных между собой данных, то ее структура могла бы быть очень простой. Однако одно из основных требований к организации базы данных – это обеспечение возможности отыскания одних сущностей по значениям других, для чего необходимо установить между ними определенные связи. А так как в реальных базах данных нередко содержатся сотни или даже тысячи сущностей, то теоретически между ними может быть установлено более миллиона связей. Наличие такого множества связей и определяет сложность инфологических моделей.
При построении инфологических моделей можно использовать язык ER-диаграмм (от англ. Entity- Relationship, т.е. сущность-связь). В них сущности изображаются помеченными прямоугольниками, ассоциации – помеченными ромбами или шестиугольниками, атрибуты – помеченными овалами, а связи между ними – ненаправленными ребрами, над которыми может проставляться степень связи (1 или буква, заменяющая слово "много") и необходимое пояснение.
Между двумя сущностям, например, А и В возможны четыре вида связей.
Первый тип – связь ОДИН-К-ОДНОМУ (1:1): в каждый момент времени каждому представителю (экземпляру) сущности А соответствует 1 или 0 представителей сущности В:
Студент может не "заработать" стипендию, получить обычную или одну из повышенных стипендий.
Второй тип – связь ОДИН-КО-МНОГИМ (1:М): одному представителю сущности А соответствуют 0, 1 или несколько представителей сущности В.
Квартира может пустовать, в ней может жить один или несколько жильцов.
Так как между двумя сущностями возможны связи в обоих направлениях, то существует еще два типа связи МНОГИЕ-К-ОДНОМУ (М:1) и МНОГИЕ-КО-МНОГИМ (М:N).
Пример. Если связь между сущностями МУЖЧИНЫ и ЖЕНЩИНЫ называется БРАК, то существует четыре возможныхпредставления такой связи:
Характер связей между сущностями не ограничивается перечисленными. Существуют и более сложные связи:
множество связей между одними и теми же сущностями
(пациент, имея одного лечащего врача, может иметь также несколько врачей-консультантов; врач может быть лечащим врачом нескольких пациентов и может одновременно консультировать несколько других пациентов);
(врач может назначить несколько пациентов на несколько анализов, анализ может быть назначен несколькими врачами нескольким пациентам и пациент может быть назначен на несколько анализов несколькими врачами);
связи более высоких порядков, семантика (смысл) которых иногда очень сложна.
В приведенных примерах для повышения иллюстративности рассматриваемых связей не показаны атрибуты сущностей и ассоциаций во всех ER-диаграммах. Так, ввод лишь нескольких основных атрибутов в описание брачных связей значительно усложнит ER-диаграмму. В связи с этим язык ER-диаграмм используется для построении небольших моделей и иллюстрации отдельных фрагментов больших. Чаще же применяется менее наглядный, но более содержательный язык инфологического моделирования (ЯИМ), в котором сущности и ассоциации представляются предложениями вида:
СУЩНОСТЬ (атрибут 1, атрибут 2 , ..., атрибут n) АССОЦИАЦИЯ [СУЩНОСТЬ S1, СУЩНОСТЬ S2, ...]
(атрибут 1, атрибут 2, ..., атрибут n)
где S – степень связи, а атрибуты, входящие в ключ, должны быть отмечены с помощью подчеркивания.
Так, рассмотренный выше пример множества связей между сущностями, может быть описан на ЯИМ следующим образом:
Врач (Номер_врача, Фамилия, Имя, Отчество, Специальность) Пациент (Регистрационный_номер, Номер койки, Фамилия,
Имя, Отчество, Адрес, Дата рождения, Пол) Лечащий_врач [Врач 1, Пациент M]
(Номер_врача, Регистрационный_номер) Консультант [Врач M,Пациент N]
(Номер_врача, Регистрационный_номер).
Рис.1. Примеры ER-диаграмм
Вопросы для закрепления Литература:
Абдуллина В.З. Базы данных в информационных системах: Учебник, 2015
Астахова И.Ф., Мельников В.М., Толстобров А.П., Фертиков В. В. СУБД: язык SQL в примерах и задачах.—М.:ФИЗМАТЛИТ,2009. — 168 с.
Волк В. К. Базы данных. Проектирование, программирование, управление и администрирование: учебник / В. К. Волк.— Санкт_Петербург: Лань, 2020.— 244 с: ил.— (Учебники для вузов. Специальная литература).
Дьяков, И.А. Базы данных. Язык SQL [Электронный ресурс]: учебное пособие / И.А. Дьяков. – Тамбов : Изд-во ФГБОУ ВПО «ТГТУ», 2012. –80 с..
Зрюмов, Е. А. Базы данных для инженеров [Текст]: учебное пособие / Е. А. Зрюмов, А. Г. Зрюмова; Алт. гос. техн. ун-т им. И. И. Ползунова. – Барнаул : Изд-во АлтГТУ, 2010. – 131 с..
Тема: Методы физической организации данных. Инвертированный файл. Современные тенденции построения файловых систем
Количество часов: 1
Основные вопросы/план темы:
Тезисы лекции
Историческим шагом явился переход к использованию централизованных систем управления файлами. С точки зрения прикладной программы файл - это именованная область внешней памяти, в которую можно записывать и из которой можно считывать данные. Правила именования файлов, способ доступа к данным, хранящимся в файле, и структура этих данных зависят от конкретной системы управления файлами и, возможно, от типа файла. Система управления файлами берет на себя распределение внешней памяти, отображение имен файлов в соответствующие адреса во внешней памяти и обеспечение доступа к данным.
Первая развитая файловая система была разработана фирмой IBM для ее серии 360. К настоящему времени она очень устарела, и мы не будем рассматривать ее подробно. Заметим лишь, что в этой системе поддерживались как чисто последовательные, так и индексно- последовательные файлы, а реализация во многом опиралась на возможности только появившихся к этому времени контроллеров управления дисковыми устройствами. Если учесть к тому же, что понятие файла в OS/360 было выбрано как основное абстрактное понятие, которому соответствовал любой внешний объект, включая внешние устройства, то работать с файлами на уровне пользователя было очень неудобно. Требовался целый ряд громоздких и перегруженных деталями конструкций. Все это хорошо знакомо программистам среднего и старшего поколения, которые прошли через использование отечественных аналогов компьютеров IBM.
Дальше мы будем говорить о более современных организациях файловых систем. Начнем со структур файлов. Прежде всего, практически во всех современных компьютерах основными устройствами внешней памяти являются магнитные диски с подвижными головками, и именно они служат для хранения файлов. Такие магнитные диски представляют собой пакеты магнитных пластин (поверхностей), между которыми на одном рычаге двигается пакет магнитных головок. Шаг движения пакета головок является дискретным, и каждому положению пакета головок логически соответствует цилиндр магнитного диска. На каждой поверхности цилиндр "высекает" дорожку, так что каждая поверхность содержит число дорожек, равное числу цилиндров. При разметке магнитного диска (специальном действии, предшествующем использованию диска) каждая дорожка размечается на одно и то же количество блоков таким образом, что в каждый блок можно записать по максимуму одно и то же число байтов. Таким образом, для произведения обмена с магнитным диском на уровне аппаратуры нужно указать номер цилиндра, номер поверхности, номер блока на соответствующей дорожке и число байтов, которое нужно записать или прочитать от начала этого блока.
Однако эта возможность обмениваться с магнитными дисками порциями меньше объема блока в настоящее время не используется в файловых системах. Это связано с двумя обстоятельствами. Во-первых, при выполнении обмена с диском аппаратура выполняет три основных действия: подвод головок к нужному цилиндру, поиск на дорожке нужного блока и собственно обмен с этим блоком. Из всех этих действий в среднем наибольшее время занимает первое. Поэтому существенный выигрыш в суммарном времени обмена за счет считывания или записывания только части блока получить практически невозможно. Во-вторых, для того, чтобы работать с частями блоков, файловая система должна обеспечить соответствующего размера буфера оперативной памяти, что существенно усложняет распределение оперативной памяти.
Поэтому во всех файловых системах явно или неявно выделяется некоторый базовый уровень, обеспечивающий работу с файлами, представляющими набор прямо адресуемых в адресном пространстве файла блоков. Размер этих логических блоков файла совпадает или кратен размеру физического блока диска и обычно выбирается равным размеру страницы виртуальной памяти, поддерживаемой аппаратурой компьютера совместно с операционной системой.
В некоторых файловых системах базовый уровень доступен пользователю, но более часто прикрывается некоторым более высоким уровнем, стандартным для пользователей. Распространены два основных подхода. При первом подходе, свойственном, например, файловым
системам операционных систем фирмы DEC RSX и VMS, пользователи представляют файл как последовательность записей. Каждая запись - это последовательность байтов постоянного или переменного размера. Записи можно читать или записывать последовательно или позиционировать файл на запись с указанным номером. Некоторые файловые системы позволяют структурировать записи на поля и объявлять некоторые поля ключами записи. В таких файловых системах можно потребовать выборку записи из файла по ее заданному ключу. Естественно, что в этом случае файловая система поддерживает в том же (или другом, служебном) базовом файле дополнительные, невидимые пользователю, служебные структуры данных. Распространенные способы организации ключевых файлов основываются на технике хэширования и B-деревьев (мы будем говорить об этих приемах более подробно в следующих лекциях). Существуют и многоключевые способы организации файлов.
Второй подход, ставший распространенным вместе с операционной системой UNIX, состоит в том, что любой файл представляется как последовательность байтов. Из файла можно прочитать указанное число байтов либо начиная с его начала, либо предварительно произведя его позиционирование на байт с указанным номером. Аналогично, можно записать указанное число байтов в конец файла, либо предварительно произведя позиционирование файла. Заметим, что тем не менее скрытым от пользователя, но существующим во всех разновидностях файловых систем ОС UNIX, является базовое блочное представление файла.
Конечно, для обоих подходов можно обеспечить набор преобразующих функций, приводящих представление файла к некоторому другому виду. Примером тому служит поддержание стандартной файловой среды системы программирования на языке Си в среде операционных систем фирмы DEC.
Остановимся коротко на способах именования файлов. Все современные файловые системы поддерживают многоуровневое именование файлов за счет поддержания во внешней памяти дополнительных файлов со специальной структурой - каталогов. Каждый каталог содержит имена каталогов и/или файлов, содержащихся в данном каталоге. Таким образом, полное имя файла состоит из списка имен каталогов плюс имя файла в каталоге, непосредственно содержащем данный файл. Разница между способами именования файлов в разных файловых системах состоит в том, с чего начинается эта цепочка имен.
Конечно, во многом централизованные файловые системы удобнее изолированных: система управления файлами принимает на себя больше рутинной работы. Но в таких системах возникают существенные проблемы, если кому-то требуется перенести поддерево файловой системы на другую вычислительную установку. Компромиссное решение применено в файловых системах ОС UNIX. На базовом уровне в этих файловых системах поддерживаются изолированные архивы файлов. Один из этих архивов объявляется корневой файловой системой. После запуска системы можно "смонтировать" корневую файловую систему и ряд изолированных файловых систем в одну общую файловую систему. Технически это производится с помощью заведения в корневой файловой системе пустых специальных каталогов. Специальный системный вызов курьер ОС UNIX позволяет подключить к одному из этих пустых каталогов корневой каталог указанного архива файлов. После монтирования общей файловой системы именование файлов производится так же, как если бы она с самого начала была централизованной. Если учесть, что обычно монтирование файловой системы производится при раскрутке системы, то пользователи ОС UNIX обычно и не задумываются об исходном происхождении общей файловой системы.
Защита файлов
Поскольку файловые системы являются общим хранилищем файлов, принадлежащих, вообще говоря, разным пользователям, системы управления файлами должны обеспечивать авторизацию доступа к файлам. В общем виде подход состоит в том, что по отношению к каждому зарегистрированному пользователю данной вычислительной системы для каждого существующего файла указываются действия, которые разрешены или запрещены данному пользователю. Существовали попытки реализовать этот подход в полном объеме. Но это вызывало слишком большие накладные расходы как по хранению избыточной информации, так и по использованию этой информации для контроля правомочности доступа.
Поэтому в большинстве современных систем управления файлами применяется подход к защите файлов, впервые реализованный в ОС UNIX. В этой системе каждому зарегистрированному пользователю соответствует пара целочисленных идентификаторов:
идентификатор группы, к которой относится этот пользователь, и его собственный идентификатор в группе. Соответственно, при каждом файле хранится полный идентификатор пользователя, который создал этот файл, и отмечается, какие действия с файлом может производить он сам, какие действия с файлом доступны для других пользователей той же группы, и что могут делать с файлом пользователи других групп. Эта информация очень компактна, при проверке требуется небольшое количество действий, и этот способ контроля доступа удовлетворителен в большинстве случаев.
Области применения файлов
Файлы применяются для хранения текстовых данных: документов, текстов программ и т.д. Такие файлы обычно образуются и модифицируются с помощью различных текстовых редакторов. Структура текстовых файлов обычно очень проста: это либо последовательность записей, содержащих строки текста, либо последовательность байтов, среди которых встречаются специальные символы (например, символы конца строки).
Файлы с текстами программ используются как входные тексты компиляторов, которые в свою очередь формируют файлы, содержащие объектные модули. С точки зрения файловой системы, объектные файлы также обладают очень простой структурой - последовательность записей или байтов. Система программирования накладывает на эту структуру более сложную и специфичную для этой системы структуру объектного модуля. Подчеркнем, что логическая структура объектного модуля неизвестна файловой системе, эта структура поддерживается программами системы программирования.
Аналогично обстоит дело с файлами, формируемыми редакторами связей и содержащими образы выполняемых программ. Логическая структура таких файлов остается известной только редактору связей и загрузчику - программе операционной системы. Примерно такая же ситуация с файлами, содержащими графическую и звуковую информацию.
Одним словом, файловые системы обычно обеспечивают хранение слабо структурированной информации, оставляя дальнейшую структуризацию прикладным программам. В перечисленных выше случаях использования файлов это даже хорошо, потому что при разработке любой новой прикладной системы опираясь на простые, стандартные и сравнительно дешевые средства файловой системы можно реализовать те структуры хранения, которые наиболее естественно соответствуют специфике данной прикладной области.
Однако ситуация коренным образом отличается для упоминавшихся в начале лекции информационных систем. Эти системы главным образом ориентированы на хранение, выбор и модификацию постоянно существующей информации. Структура информации зачастую очень сложна, и хотя структуры данных различны в разных информационных системах, между ними часто бывает много общего. На начальном этапе использования вычислительной техники для управления информацией проблемы структуризации данных решались индивидуально в каждой информационной системе. Производились необходимые надстройки над файловыми системами (библиотеки программ), подобно тому, как это делается в компиляторах, редакторах и т.д.
Но поскольку информационные системы требуют сложных структур данных, эти дополнительные индивидуальные средства управления данными являлись существенной частью информационных систем и практически повторялись от одной системы к другой. Стремление выделить и обобщить общую часть информационных систем, ответственную за управление сложно структурированными данными, явилось, на наш взгляд, первой побудительной причиной создания СУБД. Очень скоро стало понятно, что невозможно обойтись общей библиотекой программ, реализующей над стандартной базовой файловой системой более сложные методы хранения данных.
Покажем это на примере. Предположим, что мы хотим реализовать простую информационную систему, поддерживающую учет сотрудников некоторой организации. Система должна выполнять следующие действия: выдавать списки сотрудников по отделам, поддерживать возможность перевода сотрудника из одного отдела в другой, приема на работу новых сотрудников и увольнения работающих. Для каждого отдела должна поддерживаться возможность получения имени руководителя этого отдела, общей численности отдела, общей суммы выплаченной в последний раз зарплаты и т.д. Для каждого сотрудника должна поддерживаться возможность выдачи номера удостоверения по полному имени сотрудника, выдачи полного имени по номеру удостоверения, получения информации о текущем соответствии занимаемой должности сотрудника и о размере его зарплаты.
Предположим, что мы решили основывать эту информационную систему на файловой системе и пользоваться при этом одним файлом, расширив базовые возможности файловой системы за счет специальной библиотеки функций. Поскольку минимальной информационной единицей в нашем случае является сотрудник, естественно потребовать, чтобы в этом файле содержалась одна запись для каждого сотрудника. Какие поля должна содержать такая запись? Полное имя сотрудника (СОТР_ИМЯ), номер его удостоверения (СОТР_НОМЕР), информацию о его соответствии занимаемой должности (для простоты, "да" или "нет") (СОТР_СТАТ), размер зарплаты (СОТР_ЗАРП), номер отдела (СОТР_ОТД_НОМЕР). Поскольку мы хотим ограничиться одним файлом, та же запись должна содержать имя руководителя отдела (СОТР_ОТД_РУК).
Функции нашей информационной системы требуют, чтобы обеспечивалась возможность многоключевого доступа к этому файлу по уникальным ключам (недублируемым в разных записях) СОТР_ИМЯ и СОТР_НОМЕР. Кроме того, должна обеспечиваться возможность выбора всех записей с общем значением СОТР_ОТД_НОМЕР, то есть доступ по неуникальному ключу. Для того, чтобы получить численность отдела или общий размер зарплаты, каждый раз при выполнении такой функции информационная система должна будет выбрать все записи о сотрудниках отдела и посчитать соответствующие общие значения.
Таким образом мы видим, что даже для такой простой системы ее реализация на базе файловой системы, во-первых, требует создания достаточно сложной надстройки для многоключевого доступа к файлам, и, во-вторых, вызывает требование существенной избыточности хранения (для каждого сотрудника одного отдела повторяется имя руководителя) и выполнение массовой выборки и вычислений для получения суммарной информации об отделах. Кроме того, если в ходе эксплуатации системы нам захочется, например, выдавать списки сотрудников, получающих заданную зарплату, то придется либо полностью просматривать файл, либо реструктуризовывать его, объявляя ключевым поле СОТР_ЗАРП.
Первое, что приходит на ум, - это поддерживать два многоключевых файла: СОТРУДНИКИ и ОТДЕЛЫ. Первый файл должен содержать поля СОТР_ИМЯ, СОТР_НОМЕР, СОТР_СТАТ, СОТР_ЗАРП и СОТР_ОТД_НОМЕР, а второй - ОТД_НОМЕР, ОТД_РУК, ОТД_СОТР_ЗАРП
(общий размер зарплаты) и ОТД_РАЗМЕР (общее число сотрудников в отделе). Большинство неудобств, перечисленных в предыдущем абзаце, будут преодолены. Каждый из файлов будет содержать только недублируемую информацию, необходимости в динамических вычислениях суммарной информации не возникает. Но заметим, что при таком переходе наша информационная система должна обладать некоторыми новыми особенностями, сближающими ее с СУБД.
Прежде всего, система должна теперь знать, что она работает с двумя информационно связанными файлами (это шаг в сторону схемы базы данных), должна знать структуру и смысл каждого поля (например, что СОТР_ОТД_НОМЕР в файле СОТРУДНИКИ и ОТД_НОМЕР в файле ОТДЕЛЫ означают одно и то же), а также понимать, что в ряде случаев изменение информации в одном файле должно автоматически вызывать модификацию во втором файле, чтобы их общее содержимое было согласованным. Например, если на работу принимается новый сотрудник, то необходимо добавить запись в файл СОТРУДНИКИ, а также соответствующим образом изменить поля ОТД_ЗАРП и ОТД_РАЗМЕР в записи файла ОТДЕЛЫ, описывающей отдел этого сотрудника.
Понятие согласованности данных является ключевым понятием баз данных. Фактически, если информационная система (даже такая простая, как в нашем примере) поддерживает согласованное хранение информации в нескольких файлах, можно говорить о том, что она поддерживает базу данных. Если же некоторая вспомогательная система управления данными позволяет работать с несколькими файлами, обеспечивая их согласованность, можно назвать ее системой управления базами данных. Уже только требование поддержания согласованности данных в нескольких файлах не позволяет обойтись библиотекой функций: такая система должна иметь некоторые собственные данные (метаданные) и даже знания, определяющие целостность данных.
Но это еще не все, что обычно требуют от СУБД. Во-первых, даже в нашем примере неудобно реализовывать такие запросы как "выдать общую численность отдела, в котором работает Петр Иванович Сидоров". Было бы гораздо проще, если бы СУБД позволяла сформулировать такой запрос на близком пользователям языке. Такие языки называются языками запросов к базам данных. Например, на языке SQL наш запрос можно было бы выразить в форме:
SELECT ОТД_РАЗМЕР
FROM СОТРУДНИКИ, ОТДЕЛЫ
WHERE СОТР_ИМЯ = "ПЕТР ИВАНОВИЧ СИДОРОВ" AND СОТР_ОТД_НОМЕР = ОТД_НОМЕР
Таким образом, при формулировании запроса СУБД позволит не задумываться о том, как будет выполняться этот запрос. Среди ее метаданных будет содержаться информация о том, что поле СОТР_ИМЯ является ключевым для файла СОТРУДНИКИ, а ОТД_НОМЕР - для файла ОТДЕЛЫ, и система сама воспользуется этим. Если же возникнет потребность в получении списка сотрудников, не соответствующих занимаемой должности, то достаточно предъявить системе запрос
SELECT СОТР_ИМЯ, СОТР_НОМЕР FROM СОТРУДНИКИ
WHERE СОТР_СТАТ = "НЕТ",
и система сама выполнит необходимый полный просмотр файла СОТРУДНИКИ, поскольку поле СОТР_СТАТ не является ключевым.
Далее, представьте себе, что в нашей первоначальной реализации информационной системы, основанной на использовании библиотек расширенных методов доступа к файлам, обрабатывается операция регистрации нового сотрудника. Следуя требованиям согласованного изменения файлов, информационная система вставила новую запись в файл СОТРУДНИКИ и собиралась модифицировать запись файла ОТДЕЛЫ, но именно в этот момент произошло аварийное выключение питания. Очевидно, что после перезапуска системы ее база данных будет находиться в рассогласованном состоянии. Потребуется выяснить это (а для этого нужно явно проверить соответствие информации с файлах СОТРУДНИКИ и ОТДЕЛЫ) и привести информацию в согласованное состояние. Настоящие СУБД берут такую работу на себя. Прикладная система не обязана заботиться о корректности состояния базы данных.
Наконец, представим себе, что мы хотим обеспечить параллельную (например, многотерминальную) работу с базой данных сотрудников. Если опираться только на использование файлов, то для обеспечения корректности на все время модификации любого из двух файлов доступ других пользователей к этому файлу будет блокирован (вспомните возможности файловых систем для синхронизации параллельного доступа). Таким образом, зачисление на работу Петра Ивановича Сидорова существенно затормозит получение информации о сотруднике Иване Сидоровиче Петрове, даже если они будут работать в разных отделах. Настоящие СУБД обеспечивают гораздо более тонкую синхронизацию параллельного доступа к данным.
Таким образом, СУБД решают множество проблем, которые затруднительно или вообще невозможно решить при использовании файловых систем. При этом существуют приложения, для которых вполне достаточно файлов; приложения, для которых необходимо решать, какой уровень работы с данными во внешней памяти для них требуется, и приложения, для которых безусловно нужны базы данных.
Вопросы для закрепления Литература:
Абдуллина В.З. Базы данных в информационных системах: Учебник, 2015
Астахова И.Ф., Мельников В.М., Толстобров А.П., Фертиков В. В. СУБД: язык SQL в примерах и задачах.—М.:ФИЗМАТЛИТ,2009. — 168 с.
Волк В. К. Базы данных. Проектирование, программирование, управление и администрирование: учебник / В. К. Волк.— Санкт_Петербург: Лань, 2020.— 244 с: ил.— (Учебники для вузов. Специальная литература).
Дьяков, И.А. Базы данных. Язык SQL [Электронный ресурс]: учебное пособие / И.А. Дьяков. – Тамбов : Изд-во ФГБОУ ВПО «ТГТУ», 2012. –80 с..
Зрюмов, Е. А. Базы данных для инженеров [Текст]: учебное пособие / Е. А. Зрюмов, А. Г. Зрюмова; Алт. гос. техн. ун-т им. И. И. Ползунова. – Барнаул : Изд-во АлтГТУ, 2010. – 131 с..
Тема:
Количество часов: 1
Основные вопросы/план темы:
Тезисы лекции*
Вопросы для закрепления** Литература:
Абдуллина В.З. Базы данных в информационных системах: Учебник, 2015
Астахова И.Ф., Мельников В.М., Толстобров А.П., Фертиков В. В. СУБД: язык SQL в примерах и задачах.—М.:ФИЗМАТЛИТ,2009. — 168 с.
Волк В. К. Базы данных. Проектирование, программирование, управление и администрирование: учебник / В. К. Волк.— Санкт_Петербург: Лань, 2020.— 244 с: ил.— (Учебники для вузов. Специальная литература).
Дьяков, И.А. Базы данных. Язык SQL [Электронный ресурс]: учебное пособие / И.А. Дьяков. – Тамбов : Изд-во ФГБОУ ВПО «ТГТУ», 2012. –80 с..
Зрюмов, Е. А. Базы данных для инженеров [Текст]: учебное пособие / Е. А. Зрюмов, А. Г. Зрюмова; Алт. гос. техн. ун-т им. И. И. Ползунова. – Барнаул : Изд-во АлтГТУ, 2010. – 131 с..
Достарыңызбен бөлісу: |