Основные идеи современной информационной
технологии базируются на концепции, согласно которой данные должны быть
организованы в базы данных с целью адекватного отображения изменяющегося
реального мира и удовлетворения информационных потребностей пользователей. Эти
базы данных создаются и функционируют под управлением специальных программных
комплексов, называемых системами управления базами данных (СУБД).
Увеличение объема и структурной
сложности хранимых данных, расширение круга пользователей информационных систем
привели к широкому распространению наиболее удобных и сравнительно простых для
понимания реляционных (табличных) СУБД. Для обеспечения одновременного доступа
к данным множества пользователей, нередко расположенных достаточно далеко друг
от друга и от места хранения баз данных, созданы сетевые мультипользовательские
версии БД основанных на реляционной структуре. В них тем или иным путем
решаются специфические проблемы параллельных процессов, целостности
(правильности) и безопасности данных, а также санкционирования доступа.
Задачами данной работы являются:
-
дать основные
понятия баз данных, описать архитектуру СУБД, модели данных;
-
раскрыть модель
сущность-связь, описать характеристику связей, классификацию сущностей,
структуру первичных и внешних ключей, определить понятие целостности данных;
-
описать
реляционную структуру данных, реляционные базы данных и способы
манипулирования ими.
Восприятие реального мира можно
соотнести с последовательностью разных, хотя иногда и взаимосвязанных, явлений.
С давних времен люди пытались описать эти явления (даже тогда, когда не могли
их понять). Такое описание называют данными.
Традиционно фиксация данных
осуществляется с помощью конкретного средства общения (например, с помощью
естественного языка или изображений) на конкретном носителе (например, камне
или бумаге). Обычно данные (факты, явления, события, идеи или предметы) и их
интерпретация (семантика) фиксируются совместно, так как естественный язык
достаточно гибок для представления того и другого. Примером может служить
утверждение "Стоимость авиабилета 128". Здесь "128" –
данное, а "Стоимость авиабилета" – его семантика.
Нередко данные и интерпретация
разделены. Например, "Расписание движения самолетов" может быть
представлено в виде таблицы , в верхней части которой (отдельно от данных)
приводится их интерпретация. Такое разделение затрудняет работу с данными
(трудно быстро получить сведения из нижней части таблицы).
Применение ЭВМ для ведения и
обработки данных обычно приводит к еще большему разделению данных и
интерпретации. ЭВМ имеет дело главным образом с данными как таковыми. Большая
часть интерпретирующей информации вообще не фиксируется в явной форме (ЭВМ не
"знает", является ли "21.50" стоимостью авиабилета или временем
вылета). Почему же это произошло?
Существует по крайней мере две
исторические причины, по которым применение ЭВМ привело к отделению данных от
интерпретации. Во-первых, ЭВМ не обладали достаточными возможностями для
обработки текстов на естественном языке – основном языке интерпретации данных.
Во-вторых, стоимость памяти ЭВМ была первоначально весьма велика. Память
использовалась для хранения самих данных, а интерпретация традиционно
возлагалась на пользователя. Пользователь закладывал интерпретацию данных в
свою программу, которая "знала", например, что шестое вводимое
значение связано с временем прибытия самолета, а четвертое – с временем его
вылета. Это существенно повышало роль программы, так как вне интерпретации
данные представляют собой не более чем совокупность битов на запоминающем
устройстве.
Жесткая зависимость между данными и
использующими их программами создает серьезные проблемы в ведении данных и
делает использования их менее гибкими.
Нередки случаи, когда пользователи
одной и той же ЭВМ создают и используют в своих программах разные наборы
данных, содержащие сходную информацию. Иногда это связано с тем, что
пользователь не знает (либо не захотел узнать), что в соседней комнате или за
соседним столом сидит сотрудник, который уже давно ввел в ЭВМ нужные данные.
Чаще потому, что при совместном использовании одних и тех же данных возникает
масса проблем.
Разработчики прикладных программ
(написанных, например, на Бейсике, Паскале или Си) размещают нужные им данные в
файлах, организуя их наиболее удобным для себя образом. При этом одни и те же
данные могут иметь в разных приложениях совершенно разную организацию (разную
последовательность размещения в записи, разные форматы одних и тех же полей и
т.п.). Обобществить такие данные чрезвычайно трудно: например, любое изменение
структуры записи файла, производимое одним из разработчиков, приводит к
необходимости изменения другими разработчиками тех программ, которые используют
записи этого файла.
СУБД должна предоставлять доступ к
данным любым пользователям, включая и тех, которые практически не имеют и (или)
не хотят иметь представления о:
· физическом размещении в памяти данных
и их описаний;
· механизмах поиска запрашиваемых
данных;
· проблемах, возникающих при
одновременном запросе одних и тех же данных многими пользователями (прикладными
программами);
· способах обеспечения защиты данных от
некорректных обновлений и (или) несанкционированного доступа;
· поддержании баз данных в актуальном
состоянии
и множестве других
функций СУБД.
При выполнении основных из этих
функций СУБД должна использовать различные описания данных. А как создавать эти
описания?
Естественно, что проект базы данных
надо начинать с анализа предметной области и выявления требований к ней
отдельных пользователей (сотрудников организации, для которых создается база
данных). Подробнее этот процесс будет рассмотрен ниже, а здесь отметим, что
проектирование обычно поручается человеку (группе лиц) – администратору базы
данных (АБД). Им может быть как специально выделенный сотрудник организации,
так и будущий пользователь базы данных, достаточно хорошо знакомый с машинной
обработкой данных.
Объединяя частные представления о
содержимом базы данных, полученные в результате опроса пользователей, и свои
представления о данных, которые могут потребоваться в будущих приложениях, АБД
сначала создает обобщенное неформальное описание создаваемой базы данных. Это
описание, выполненное с использованием естественного языка, математических
формул, таблиц, графиков и других средств, понятных всем людям, работающих над
проектированием базы данных, называют инфологической моделью данных
(рис. 1).
Рисунок 1 Уровни моделей данных
Такая человеко-ориентированная модель
полностью независима от физических параметров среды хранения данных. В конце
концов этой средой может быть память человека, а не ЭВМ. Поэтому инфологическая
модель не должна изменяться до тех пор, пока какие-то изменения в реальном мире
не потребуют изменения в ней некоторого определения, чтобы эта модель
продолжала отражать предметную область.
Остальные модели, показанные на рис.
1, являются компьютеро-ориентированными. С их помощью СУБД дает возможность
программам и пользователям осуществлять доступ к хранимым данным лишь по их
именам, не заботясь о физическом расположении этих данных. Нужные данные
отыскиваются СУБД на внешних запоминающих устройствах по физической модели
данных.
Так как указанный доступ
осуществляется с помощью конкретной СУБД, то модели должны быть описаны на языке
описания данных этой СУБД. Такое описание, создаваемое АБД по
инфологической модели данных, называют даталогической моделью данных.
Трехуровневая архитектура
(инфологический, даталогический и физический уровни) позволяет обеспечить независимость
хранимых данных от использующих их программ. АБД может при необходимости
переписать хранимые данные на другие носители информации и (или) реорганизовать
их физическую структуру, изменив лишь физическую модель данных. АБД может
подключить к системе любое число новых пользователей (новых приложений),
дополнив, если надо, даталогическую модель. Указанные изменения физической и
даталогической моделей не будут замечены существующими пользователями системы
(окажутся "прозрачными" для них), так же как не будут замечены и
новые пользователи. Следовательно, независимость данных обеспечивает
возможность развития системы баз данных без разрушения существующих приложений.
Инфологическая модель отображает
реальный мир в некоторые понятные человеку концепции, полностью независимые от
параметров среды хранения данных. Существует множество подходов к построению
таких моделей: графовые модели, семантические сети, модель
"сущность-связь" и т.д. Наиболее популярной из них оказалась модель
"сущность-связь".
Инфологическая модель должна быть
отображена в компьютеро-ориентированную даталогическую модель,
"понятную" СУБД. В процессе развития теории и практического использования
баз данных, а также средств вычислительной техники создавались СУБД,
поддерживающие различные даталогические модели.
Сначала стали использовать
иерархические даталогические модели. Простота организации, наличие заранее
заданных связей между сущностями, сходство с физическими моделями данных
позволяли добиваться приемлемой производительности иерархических СУБД на
медленных ЭВМ с весьма ограниченными объемами памяти. Но, если данные не имели
древовидной структуры, то возникала масса сложностей при построении
иерархической модели и желании добиться нужной производительности.
Сетевые модели также создавались для
мало ресурсных ЭВМ. Это достаточно сложные структуры, состоящие из
"наборов" – поименованных двухуровневых деревьев. "Наборы"
соединяются с помощью "записей-связок", образуя цепочки и т.д. При
разработке сетевых моделей было выдумано множество "маленьких
хитростей", позволяющих увеличить производительность СУБД, но существенно
усложнивших последние. Прикладной программист должен знать массу терминов,
изучить несколько внутренних языков СУБД, детально представлять логическую
структуру базы данных для осуществления навигации среди различных экземпляров,
наборов, записей и т.п. Один из разработчиков операционной системы UNIX сказал
"Сетевая база – это самый верный способ потерять данные".
Сложность практического использования
иерархических и сетевых СУБД заставляла искать иные способы представления
данных. В конце 60-х годов появились СУБД на основе инвертированных файлов,
отличающиеся простотой организации и наличием весьма удобных языков
манипулирования данными. Однако такие СУБД обладают рядом ограничений на
количество файлов для хранения данных, количество связей между ними, длину
записи и количество ее полей.
Физическая организация данных
оказывает основное влияние на эксплуатационные характеристики БД. Разработчики
СУБД пытаются создать наиболее производительные физические модели данных,
предлагая пользователям тот или иной инструментарий для поднастройки модели под
конкретную БД. Разнообразие способов корректировки физических моделей
современных промышленных СУБД не позволяет рассмотреть их в этом разделе.
Цель инфологического моделирования –
обеспечение наиболее естественных для человека способов сбора и представления
той информации, которую предполагается хранить в создаваемой базе данных.
Поэтому инфологическую модель данных пытаются строить по аналогии с
естественным языком (последний не может быть использован в чистом виде из-за
сложности компьютерной обработки текстов и неоднозначности любого естественного
языка). Основными конструктивными элементами инфологических моделей являются
сущности, связи между ними и их свойства (атрибуты).
Сущность – любой различимый объект (объект,
который мы можем отличить от другого), информацию о котором необходимо хранить
в базе данных. Сущностями могут быть люди, места, самолеты, рейсы, вкус, цвет и
т.д. Необходимо различать такие понятия, как тип сущности и экземпляр
сущности. Понятие тип сущности относится к набору однородных личностей,
предметов, событий или идей, выступающих как целое. Экземпляр сущности
относится к конкретной вещи в наборе. Например, типом сущности может быть
ГОРОД, а экземпляром – Москва, Киев и т.д.
Атрибут – поименованная характеристика
сущности. Его наименование должно быть уникальным для конкретного типа
сущности, но может быть одинаковым для различного типа сущностей (например,
ЦВЕТ может быть определен для многих сущностей: СОБАКА, АВТОМОБИЛЬ, ДЫМ и
т.д.). Атрибуты используются для определения того, какая информация должна быть
собрана о сущности. Примерами атрибутов для сущности АВТОМОБИЛЬ являются ТИП,
МАРКА, НОМЕРНОЙ ЗНАК, ЦВЕТ и т.д. Здесь также существует различие между типом и
экземпляром. Тип атрибута ЦВЕТ имеет много экземпляров или значений: Красный,
Синий, Банановый, Белая ночь и т.д., однако каждому экземпляру сущности
присваивается только одно значение атрибута.
Абсолютное различие между типами
сущностей и атрибутами отсутствует. Атрибут является таковым только в связи с
типом сущности. В другом контексте атрибут может выступать как самостоятельная
сущность. Например, для автомобильного завода цвет – это только атрибут
продукта производства, а для лакокрасочной фабрики цвет – тип сущности.
Ключ – минимальный набор атрибутов, по
значениям которых можно однозначно найти требуемый экземпляр сущности.
Минимальность означает, что исключение из набора любого атрибута не позволяет
идентифицировать сущность по оставшимся. Для сущности Расписание ключом
является атрибут Номер_рейса или набор: Пункт_отправления, Время_вылета и
Пункт_назначения (при условии, что из пункта в пункт вылетает в каждый момент
времени один самолет).
Связь – ассоциирование двух или более
сущностей. Если бы назначением базы данных было только хранение отдельных, не
связанных между собой данных, то ее структура могла бы быть очень простой.
Однако одно из основных требований к организации базы данных – это обеспечение
возможности отыскания одних сущностей по значениям других, для чего необходимо
установить между ними определенные связи. А так как в реальных базах данных
нередко содержатся сотни или даже тысячи сущностей, то теоретически между ними
может быть установлено более миллиона связей. Наличие такого множества связей и
определяет сложность инфологических моделей.
При построении инфологических моделей
можно использовать язык ER-диаграмм (от англ. Entity-Relationship, т.е. сущность-связь). В них сущности изображаются помеченными
прямоугольниками, ассоциации – помеченными ромбами или шестиугольниками,
атрибуты – помеченными овалами, а связи между ними – ненаправленными ребрами,
над которыми может проставляться степень связи (1 или буква, заменяющая слово
"много") и необходимое пояснение.
Между двумя сущностям, например, А и
В возможны четыре вида связей.
Первый тип – связь ОДИН-К-ОДНОМУ (1:1): в
каждый момент времени каждому представителю (экземпляру) сущности А
соответствует 1 или 0 представителей сущности В:
Студент может не
"заработать" стипендию, получить обычную или одну из повышенных
стипендий.
Второй тип – связь ОДИН-КО-МНОГИМ (1:М): одному
представителю сущности А соответствуют 0, 1 или несколько представителей
сущности В.
Квартира может пустовать, в ней может
жить один или несколько жильцов.
Так как между двумя сущностями
возможны связи в обоих направлениях, то существует еще два типа связи
МНОГИЕ-К-ОДНОМУ (М:1) и МНОГИЕ-КО-МНОГИМ (М:N).
Пример. Если связь между сущностями МУЖЧИНЫ
и ЖЕНЩИНЫ называется БРАК, то существует четыре возможныхпредставления такой
связи:
Характер связей между сущностями не
ограничивается перечисленными. Существуют и более сложные связи:
· множество связей между одними и теми
же сущностями
(пациент, имея одного лечащего врача,
может иметь также несколько врачей-консультантов; врач может быть лечащим
врачом нескольких пациентов и может одновременно консультировать несколько
других пациентов);
· тренарные связи
(врач может назначить несколько
пациентов на несколько анализов, анализ может быть назначен несколькими врачами
нескольким пациентам и пациент может быть назначен на несколько анализов
несколькими врачами);
· связи более высоких порядков,
семантика (смысл) которых иногда очень сложна.
Существуют три основные класса
сущностей: стержневые, ассоциативные и характеристические,
а также подкласс ассоциативных сущностей – обозначения.
Стержневая сущность (стержень) – это независимая
сущность (несколько подробнее она будет определена ниже).
В рассмотренных ранее примерах
стержни – это "Студент", "Квартира", "Мужчины",
"Врач", "Брак" и другие, названия которых помещены в
прямоугольники. Ассоциативная сущность (ассоциация) – это связь
вида "многие-ко-многим" ("-ко-многим" и т.д.) между двумя
или более сущностями или экземплярами сущности . Ассоциации рассматриваются как
полноправные сущности:
- они могут участвовать в других
ассоциациях и обозначениях точно так же, как стержневые сущности;
- могут обладать свойствами, т.е.
иметь не только набор ключевых атрибутов, необходимых для указания связей, но и
любое число других атрибутов, характеризующих связь.
Характеристическая сущность (характеристика) – это связь
вида "многие-к-одной" или "одна-к-одной" между двумя сущностями
(частный случай ассоциации). Единственная цель характеристики в рамках
рассматриваемой предметной области состоит в описании или уточнении некоторой
другой сущности. Необходимость в них возникает в связи с тем, что сущности
реального мира имеют иногда многозначные свойства. Муж может иметь несколько
жен , книга – несколько характеристик переиздания (исправленное, дополненное,
переработанное, ...) и т.д.
Существование характеристики
полностью зависит от характеризуемой сущности: женщины лишаются статуса жен,
если умирает их муж.
Обозначающая сущность или обозначение – это связь
вида "многие-к-одной" или "одна-к-одной" между двумя
сущностями и отличается от характеристики тем, что не зависит от обозначаемой
сущности.
В заключение рассмотрим пример построения
инфологической модели базы данных "Питание", где должна храниться
информация о блюдах, их ежедневном потреблении, продуктах, из которых
приготавливаются эти блюда, и поставщиках этих продуктов. Информация будет
использоваться поваром и руководителем небольшого предприятия общественного
питания, а также его посетителями.
С помощью указанных пользователей
выделены следующие объекты и характеристики проектируемой базы:
1.
Блюда, для
описания которых нужны данные, входящие в их кулинарные рецепты: номер блюда
(например, из книги кулинарных рецептов), название блюда, вид блюда (закуска,
суп, горячее и т.п.), рецепт (технология приготовления блюда), выход (вес
порции), название, калорийность и вес каждого продукта, входящего в блюдо.
2.
Для каждого
поставщика продуктов: наименование, адрес, название поставляемого продукта,
дата поставки и цена на момент поставки.
3.
Ежедневное
потребление блюд (расход): блюдо, количество порций, дата.
Анализ объектов позволяет выделить:
· стержни Блюда, Продукты и Города;
· ассоциации Состав (связывает Блюда с
Продуктами) и
Поставки (связывает
Поставщиков с Продуктами);
· обозначение Поставщики;
· характеристики Рецепты и Расход.
Рисунок 2. Инфологическая модель
базы данных "Питание"
Напомним, что ключ или возможный
ключ – это минимальный набор атрибутов, по значениям которых можно однозначно
найти требуемый экземпляр сущности. Минимальность означает, что исключение из
набора любого атрибута не позволяет идентифицировать сущность по оставшимся.
Каждая сущность обладает хотя бы одним возможным ключом. Один из них
принимается за первичный ключ. При выборе первичного ключа следует
отдавать предпочтение несоставным ключам или ключам, составленным из
минимального числа атрибутов. Нецелесообразно также использовать ключи с
длинными текстовыми значениями (предпочтительнее использовать целочисленные
атрибуты). Так, для идентификации студента можно использовать либо уникальный
номер зачетной книжки, либо набор из фамилии, имени, отчества, номера группы и
может быть дополнительных атрибутов, так как не исключено появление в группе
двух студентов (а чаще студенток) с одинаковыми фамилиями, именами и
отчествами. Плохо также использовать в качестве ключа не номер блюда, а его
название, например, " Закуска из плавленых сырков "Дружба" с
ветчиной и соленым огурцом" или "Заяц в сметане с картофельными крокетами
и салатом из красной капусты".
Не допускается, чтобы первичный ключ
стержневой сущности (любой атрибут, участвующий в первичном ключе) принимал
неопределенное значение. Иначе возникнет противоречивая ситуация: появится не
обладающий индивидуальностью, и, следовательно не существующий экземпляр
стержневой сущности. По тем же причинам необходимо обеспечить уникальность первичного
ключа.
Теперь о внешних ключах:
· Если сущность С связывает сущности А
и В, то она должна включать внешние ключи, соответствующие первичным ключам
сущностей А и В.
· Если сущность В обозначает сущность
А, то она должна включать внешний ключ, соответствующий первичному ключу
сущности А.
Таким образом, при рассмотрении
проблемы выбора способа представления ассоциаций и обозначений в базе данных
основной вопрос, на который следует получить ответ: "Каковы внешние
ключи?". И далее, для каждого внешнего ключа необходимо решить три
вопроса:
1. Может ли данный внешний ключ
принимать неопределенные значения (NULL-значения)? Иначе говоря, может ли
существовать некоторый экземпляр сущности данного типа, для которого неизвестна
целевая сущность, указываемая внешним ключом? В случае поставок это, вероятно,
невозможно – поставка, осуществляемая неизвестным поставщиком, или поставка
неизвестного продукта не имеют смысла. Но в случае с сотрудниками такая
ситуация однако могла бы иметь смысл – вполне возможно, что какой-либо
сотрудник в данный момент не зачислен вообще ни в какой отдел. Заметим, что
ответ на данный вопрос не зависит от прихоти проектировщика базы данных, а
определяется фактическим образом действий, принятым в той части реального мира,
которая должна быть представлена в рассматриваемой базе данных. Подобные
замечания имеют отношение и к вопросам, обсуждаемым ниже.
2. Что должно случиться при попытке
УДАЛЕНИЯ целевой сущности, на которую ссылается внешний ключ? Например, при
удалении поставщика, который осуществил по крайней мере одну поставку.
Существует три возможности:
КАСКАДИРУЕТСЯ | Операция удаления "каскадируется" с тем, чтобы удалить также поставки этого поставщика. |
ОГРАНИЧИВАЕТСЯ | Удаляются лишь те поставщики, которые еще не осуществляли поставок. Иначе операция удаления отвергается. |
УСТАНАВЛИВАЕТСЯ | Для всех поставок удаляемого поставщика NULL-значение внешний ключ устанавливается в неопределенное значение, а затем этот поставщик удаляется. Такая возможность, конечно, неприменима, если данный внешний ключ не должен содержать NULL-значений. |
3. Что должно происходить при попытке
ОБНОВЛЕНИЯ первичного ключа целевой сущности, на которую ссылается некоторый
внешний ключ? Например, может быть предпринята попытка обновить номер такого
поставщика, для которого имеется по крайней мере одна соответствующая поставка.
Этот случай для определенности снова рассмотрим подробнее. Имеются те же три
возможности, как и при удалении:
КАСКАДИРУЕТСЯ | Операция обновления "каскадируется" с тем, чтобы обновить также и внешний ключ впоставках этого поставщика. |
ОГРАНИЧИВАЕТСЯ | Обновляются первичные ключи лишь тех поставщиков, которые еще не осуществляли поставок. Иначе операция обновления отвергается. |
УСТАНАВЛИВАЕТСЯ | Для всех поставок такого поставщика NULL-значение внешний ключ устанавливается в неопределенное значение, а затем обновляется первичный ключ поставщика. Такая возможность, конечно, неприменима, если данный внешний ключ не должен содержать NULL-значений. |
Таким образом, для каждого внешнего
ключа в проекте проектировщик базы данных должен специфицировать не только поле
или комбинацию полей, составляющих этот внешний ключ, и целевую таблицу,
которая идентифицируется этим ключом, но также и ответы на указанные выше
вопроса (три ограничения, которые относятся к этому внешнему ключу).
Наконец, о характеристиках –
обозначающих сущностях, существование которых зависит от типа обозначаемых сущностей.
Обозначение представляется внешним ключом в таблице, соответствующей этой
характеристике. Но три рассмотренные выше ограничения на внешний ключ для
данного случая должны специфицироваться следующим образом:
NULL-значения не допустимы
УДАЛЕНИЕ ИЗ (цель) КАСКАДИРУЕТСЯ
ОБНОВЛЕНИЕ (первичный ключ цели) КАСКАДИРУЕТСЯ
Указанные спецификации представляют
зависимость по существованию характеристических сущностей.
Целостность (от англ. integrity – нетронутость,
неприкосновенность, сохранность, целостность) – понимается как правильность
данных в любой момент времени. Но эта цель может быть достигнута лишь в
определенных пределах: СУБД не может контролировать правильность каждого
отдельного значения, вводимого в базу данных (хотя каждое значение можно
проверить на правдоподобность). Например, нельзя обнаружить, что вводимое
значение 5 (представляющее номер дня недели) в действительности должно быть
равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его
отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны
принадлежать набору (1,2,3,4,5,6,7).
Поддержание целостности базы данных
может рассматриваться как защита данных от неверных изменений или разрушений
(не путать с незаконными изменениями и разрушениями, являющимися проблемой
безопасности). Современные СУБД имеют ряд средств для обеспечения поддержания
целостности (так же, как и средств обеспечения поддержания безопасности).
Выделяют три группы правил
целостности:
1.
Целостность по
сущностям.
2.
Целостность по
ссылкам.
3.
Целостность,
определяемая пользователем.
В п. 2.3 была рассмотрена мотивировка
двух правил целостности, общих для любых реляционных баз данных.
1.
Не допускается,
чтобы какой-либо атрибут, участвующий в первичном ключе, принимал
неопределенное значение.
2.
Значение внешнего
ключа должно либо:
- быть
равным значению первичного ключа цели;
- быть полностью неопределенным, т.е. каждое
значение атрибута, участвующего во внешнем ключе должно быть неопределенным.
Для любой конкретной базы данных
существует ряд дополнительных специфических правил, которые относятся к ней
одной и определяются разработчиком.
В конце 60-х годов появились работы,
в которых обсуждались возможности применения различных табличных даталогических
моделей данных, т.е. возможности использования привычных и естественных
способов представления данных. Наиболее значительной из них была статья
сотрудника фирмы IBM д-ра Э.Кодда (Codd E.F., A Relational Model of Data for
Large Shared Data Banks. CACM 13: 6, June 1970), где, вероятно, впервые был
применен термин "реляционная модель данных".
Будучи математиком по образованию
Э.Кодд предложил использовать для обработки данных аппарат теории множеств (объединение,
пересечение, разность, декартово произведение). Он показал, что любое
представление данных сводится к совокупности двумерных таблиц особого вида,
известного в математике как отношение – relation (англ.).
Наименьшая единица данных реляционной
модели – это отдельное атомарное (неразложимое) для данной модели
значение данных. Так, в одной предметной области фамилия, имя и отчество могут
рассматриваться как единое значение, а в другой – как три различных значения.
Доменом называется множество атомарных
значений одного и того же типа. Смысл доменов состоит в следующем. Если
значения двух атрибутов берутся из одного и того же домена, то, вероятно, имеют
смысл сравнения, использующие эти два атрибута (например, для организации
транзитного рейса можно дать запрос "Выдать рейсы, в которых время вылета
из Москвы в Сочи больше времени прибытия из Архангельска в Москву"). Если
же значения двух атрибутов берутся из различных доменов, то их сравнение,
вероятно, лишено смысла: стоит ли сравнивать номер рейса со стоимостью билета?
Отношение на доменах D1, D2, ..., Dn (не обязательно, чтобы все они были
различны) состоит из заголовка и тела. На рис. 3 приведен пример отношения для
расписания движения самолетов.
Заголовок состоит из такого фиксированного
множества атрибутов A1, A2, ..., An, что существует взаимно однозначное
соответствие между этими атрибутами Ai и определяющими их доменами Di
(i=1,2,...,n).
Рисунок 3. Отношение с математической
точки зрения (Ai - атрибуты, Vi - значения атрибутов)
Тело состоит из меняющегося во времени
множества кортежей, где каждый кортеж состоит в свою очередь из
множества пар атрибут-значение (Ai:Vi), (i=1,2,...,n), по одной такой паре для
каждого атрибута Ai в заголовке. Для любой заданной пары атрибут-значение
(Ai:Vi) Vi является значением из единственного домена Di, который связан с
атрибутом Ai.
Степень отношения – это число его атрибутов. Отношение
степени один называют унарным, степени два – бинарным, степени три – тернарным,
..., а степени n – n-арным.
Кардинальное число или мощность отношения – это
число его кортежей. Кардинальное число отношения изменяется во времени в
отличие от его степени.
Поскольку отношение – это множество,
а множества по определению не содержат совпадающих элементов, то никакие два
кортежа отношения не могут быть дубликатами друг друга в любой
произвольно-заданный момент времени. Пусть R – отношение с атрибутами A1, A2,
..., An. Говорят, что множество атрибутов K=(Ai, Aj, ..., Ak) отношения R
является возможным ключом R тогда и только тогда, когда удовлетворяются два
независимых от времени условия:
1. Уникальность: в произвольный заданный
момент времени никакие два различных кортежа R не имеют одного и того же
значения для Ai, Aj, ..., Ak.
2. Минимальность: ни один из атрибутов
Ai, Aj, ..., Ak не может быть исключен из K без нарушения уникальности.
Каждое отношение обладает хотя бы одним
возможным ключом, поскольку по меньшей мере комбинация всех его атрибутов
удовлетворяет условию уникальности. Один из возможных ключей (выбранный
произвольным образом) принимается за его первичный ключ. Остальные возможные
ключи, если они есть, называются альтернативными ключами.
Вышеупомянутые и некоторые другие
математические понятия явились теоретической базой для создания реляционных
СУБД, разработки соответствующих языковых средств и программных систем,
обеспечивающих их высокую производительность, и создания основ теории
проектирования баз данных. Однако для массового пользователя реляционных СУБД
можно с успехом использовать неформальные эквиваленты этих понятий:
Отношение
– Таблица (иногда Файл),
Кортеж – Строка (иногда Запись),
Атрибут – Столбец, Поле.
3.2 Реляционная база данных
Реляционная база данных – это
совокупность отношений, содержащих всю информацию, которая должна храниться в
БД. Однако пользователи могут воспринимать такую базу данных как совокупность
таблиц.
1. Каждая таблица состоит из однотипных строк и имеет
уникальное имя.
2. Строки имеют фиксированное число полей (столбцов) и
значений (множественные поля и повторяющиеся группы недопустимы). Иначе говоря,
в каждой позиции таотличаются друг от друга хотя бы единственным значением, что
позблицы на пересечении строки и столбца всегда имеется в точности одно
значение или ничего.
3. Строки таблицы обязательно воляет однозначно
идентифицировать любую строку такой таблицы.
4. Столбцам таблицы однозначно присваиваются имена, и в каждом
из них размещаются однородные значения данных (даты, фамилии, целые числа или
денежные суммы).
5. Полное информационное содержание базы данных
представляется в виде явных значений данных и такой метод представления
является единственным. В частности, не существует каких-либо специальных
"связей" или указателей, соединяющих одну таблицу с другой. Так,
связи между строкой с БЛ = 2 таблицы "Блюда" на рис. 4 и строкой с ПР
= 7 таблицы продукты (для приготовления Харчо нужен Рис), представляется не с
помощью указателей, а благодаря существованию в таблице "Состав"
строки, в которой номер блюда равен 2, а номер продукта – 7.
6. При выполнении операций с таблицей
ее строки и столбцы можно обрабатывать в любом порядке безотносительно к их
информационному содержанию. Этому способствует наличие имен таблиц и их
столбцов, а также возможность выделения любой их строки или любого набора строк
с указанными признаками.
Блюда
| Продукты
| Состав
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Поставщики
| Поставки
|
Рисунок 4.База данных
"Питание" .
3.3 Манипулирование реляционными данными
Стремление к минимизации числа таблиц
для хранения данных может привести к возникновению различных проблем при их
обновлении и будут даны рекомендации по разбиению некоторых больших таблиц на
несколько маленьких. Но как сформировать требуемый ответ, если нужные для него
данные хранятся в разных таблицах?
Предложив реляционную модель данных,
Э.Ф.Кодд создал и инструмент для удобной работы с отношениями – реляционную
алгебру. Каждая операция этой алгебры использует одну или несколько таблиц
(отношений) в качестве ее операндов и продуцирует в результате новую таблицу,
т.е. позволяет "разрезать" или "склеивать" таблицы (рис.
5).
Рисунок 5. Некоторые операции
реляционной алгебры
Созданы языки манипулирования
данными, позволяющие реализовать все операции реляционной алгебры и практически
любые их сочетания. Среди них наиболее распространены SQL (Structured Query
Language – структуризованный язык запросов) и QBE (Quere-By-Example – запросы
по образцу) . Оба относятся к языкам очень высокого уровня, с помощью
которых пользователь указывает, какие данные необходимо получить, не уточняя
процедуру их получения.
Заключение
На сегодняшний день реляционные базы
данных остаются самыми распространенными, благодаря своей простоте и
наглядности как в процессе создания так и на пользовательском уровне.
Основным достоинством реляционных баз
данных совместимость с самым популярным языком запросов SQL. С помощью единственного запроса на
этом языке можно соединить несколько таблиц во временную таблицу и вырезать из
нее требуемые строки и столбцы (селекция и проекция). Так как табличная
структура реляционной базы данных интуитивно понятна пользователям, то и язык SQL является простым и легким для
изучения. Реляционная модель имеет солидный теоретический фундамент, на котором
были основаны эволюция и реализация реляционных баз данных. На волне
популярности, вызванной успехом реляционной модели, SQL стал основным языком для реляционных баз данных.
В процессе анализа
вышеизложенной информации выявлены следующие недостатки рассмотренной модели
баз данных:
-
так как все поля
одной таблицы должны содержать постоянное число полей заранее определенных
типов, приходится создавать дополнительные таблицы, учитывающие индивидуальные
особенности элементов, при помощи внешних ключей. Такой подход сильно усложняет
создание сколько-нибудь сложных взаимосвязей в базе данных;
-
высокая
трудоемкость манипулирования информацией и изменения связей.
Литература
1.
Дейт К.
Руководство по реляционной СУБД DB2. - М.: Финансы и статистика, 1988. - 320 с.
2.
Кириллов В.В.
Основы проектирования реляционных баз данных .Учебное пособие. - СПб.: ИТМО,
1994. - 90 с.
3.
Мейер М. Теория
реляционных баз данных. -М.: Мир, 1987. - 608 с.
4.
Ульман Дж. Базы
данных на Паскале. -М.: Машиностроение, 1990. - 386 с.
5.
http://www.citforum.ru/database/sql_kg/index.shtml
“ Основы проектирования реляционных баз данных ”
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |