Основные понятия и компоненты книга. Основные понятия и компоненты
Скачать 39.85 Kb.
|
Основные понятия и компоненты Теоретической основой реляционной модели данных стала теория отношений. Множество отношений замкнуто относительно некоторых специальных операций, т. е. образует вместе с этими операциями абстрактную алгебру. Это важнейшее свойство отношений было использовано в реляционной модели для разработки языка манипулирования данными, связанного с исходной алгеброй. Американский математик Э. Ф. Кодд в 1970 г. впервые сформулировал основные понятия и ограничения реляционной модели. Предложения Кодда были настолько эффективны для систем баз данных, что за эту модель он был удостоен престижной премии Тьюринга в области теоретических основ вычислительной техники. Основные понятия реляционных баз данных следующие; ■ отношение; ■ тип данных; ■ домен; ■ атрибут; ■ кортеж; ■ первичный ключ. Отношение — фундаментальное понятие реляционной модели данных. По этой причине модель и называется реляционной (от лат. relatio —отношение, связь). На физическом уровне отношения представляют собой двумерные таблицы в виде строк и столбцов, в ячейках которых хранятся данные. Каждая таблица содержит информацию об объектах одного типа, а совокупность всех таблиц образует единую базу данных. Понятие «тип данных» в реляционной модели полностью адекватно понятию «тип данных» в программировании. Значения данных, хранимые в реляционной базе данных, являются типизированными, т. е. известен тип каждого хранимого значения. В каждом столбце записывается свой определенный тип данных. Обычно в современных реляционных базах данных допускается хранение символьных, числовых данных, специализированных числовых данных (например, «денежный»), а также специальных данных (дата, время, временной интервал). Кроме того, в реляционных системах поддерживается возможность определения пользователями собственных типов данных. Понятие домена более специфично для баз данных, хотя и имеются аналогии с подтипами в некоторых языках программирования. Некоторые авторы отождествляют понятия домена и типа данных. Более того, в некоторых реляционных СУБД понятие домена даже не используется. В общем виде домен определяется путем задания некоторого базового типа данных, к которому относятся элементы домена, и описания их ограничений. С каждым доменом связывается имя, уникальное среди имен всех доменов соответствующей базы данных. Атрибут — свойство (характеристика) объекта предметной области, информация о котором хранится в базе данных. Атрибут характеризуется именем и значением, которое должно принадлежать некоторому домену. Каждый экземпляр объекта в каждый момент времени однозначно характеризуется набором конкретных значений атрибутов. Схема отношения (заголовок отношения) — именованное множество пар «имя атрибута, имя домена». Степень, или «арность», схемы отношения — мощность этого множества, т. е. количество атрибутов. Схему отношений можно представить, как строку заголовков столбцов таблицы (см. рис. 3.1). Кортеж, соответствующий данной схеме отношения, — множество пар «имя атрибута, значение», которое содержит одно вхождение каждого имени атрибута, принадлежащего схеме отношения. «Значение» является допустимым значением домена данного атрибута. Таким образом, кортеж можно представить, как строку таблицы. Тогда отношение можно представить, как множество кортежей, соответствующих одной схеме отношения. Произвольное множество кортежей называется телом отношения. Первичный ключ (ключ отношения) — минимальный набор атрибутов, значения которых однозначно определяют кортеж отношения. Для каждого отношения, по крайней мере, полный набор его атрибутов уникален. Однако при формальном определении первичного ключа требуется «минимальность», т. е. в набор атрибутов первичного ключа не должны входить такие атрибуты, которые можно отбросить без ущерба для основного свойства — однозначное определение кортежа. Декартово (прямое) произведение — множество, элементами которого являются всевозможные упорядоченные пары элементов исходных двух множеств. Пусть A1(D1), А2(D2), ... — имена атрибутов. Тогда схемой отношения R называется конечное множество имен атрибутов г == {A1(D1), A2(D2) ... An(Dn)}. Отношением со схемой на конечных множествах D1, D2, … Dn называется подмножество R декартового произведения D1 х D2 x ... x Dn. Элементы отношения (d1, d2, ..., dn), как уже упоминалось выше, называются кортежами. Кортеж (d1, d2, ..., dn) имеет n компонентов. Для обозначения кортежа применяется и сокращенная форма записи d1 d2, ..., dn. Использование понятия декартового произведения для определения отношения в реляционной модели данных делает модель конструктивной. С математической точки зрения это означает, что все остальные понятия модели определяются в рамках строгого математического построения на базе декартового произведения. Свойства отношений Отсутствие кортежей-дубликатов. Следует из определения отношения как множества кортежей. Из этого свойства вытекает наличие у каждого отношения первичного ключа. Множество математически по своему определению не может иметь совпадающих элементов, и, следовательно, кортежи в отношении можно различить лишь по значению их компонент. Это тоже очень важное для модели обстоятельство: никакие два кортежа не могут иметь полностью совпадающих компонентов. Таким образом, в реляционной модели полностью исключается дублирование данных об объектах предметной области. Понятие первичного ключа является исключительно важным и в связи с понятием целостности баз данных. Следует отметить, что во многих практических реализациях реляционных СУБД допускается нарушение свойства уникальности кортежей для промежуточных отношений, выполняемых неявно при выполнении запросов. Такие отношения являются не множествами, а мультимножествами. Отсутствие упорядоченности атрибутов. Для ссылки на значение атрибута в кортеже отношения всегда используется имя атрибута. Атрибуты отношений не упорядочены, так как по определению заголовок отношения есть множество пар {имя атрибута, имя домена}. СУБД сама принимает решение о том, в каком физическом порядке следует хранить значения атрибутов кортежей (хотя обычно один и тот же физический порядок поддерживается для всех кортежей каждого отношения). Кроме того, это свойство облегчает выполнение операции модификации схем существующих отношений не только путем добавления новых атрибутов, но и путем удаления существующих. Атомарность значений атрибутов. Это свойство следует из определения домена как потенциального множества значений простого типа данных и означает, что атрибут не может быть множеством. Отсутствие упорядоченности кортежей. Это свойство является следствием определения тела отношения как множества кортежей. Однако отсутствие требования к поддержанию порядка на множестве кортежей отношения придает СУБД дополнительную гибкость при хранении баз данных во внешней памяти и при выполнении запросов к базе данных. ОСНОВЫ РЕЛЯЦИОННОЙ АЛГЕБРЫ Реляционная алгебра (реляционная алгебра Кодда) — замкнутая система операций над отношениями в реляционной модели данных. Операции реляционной алгебры также называют реляционными операциями. Основная идея реляционной алгебры состоит в том, что если отношения являются множествами, то средства манипулирования отношениями могут базироваться на традиционных теоретико-множественных операциях, дополненных некоторыми специальными операциями, специфичными для баз данных. Реляционная алгебра представляет собой набор таких операций над отношениями, что результат каждой из операций также является отношением. Это свойство алгебры называется замкнутостью. Операции реляционной алгебры Кодда можно разделить на две группы: 1) базовые теоретико-множественные; 2) специальные реляционные. Первая группа операций включает в себя классические операции теории множеств. Вторая группа представляет собой развитие обычных теоретико-множественных операций в направлении к реальным задачам манипулирования данными. В состав теоретико-множественных операций входят операции: ■ объединение отношений; ■ пересечение отношений; ■ вычитание отношений; ■ прямое произведение отношений. Специальные реляционные операции включают: ■ ограничение отношения; ■ проекцию отношения; ■ деление отношений; ■ соединение отношений. Кроме того, в состав алгебры включаются операция присваивания, позволяющая сохранить в базе данных результаты вычисления алгебраических выражений, и операция переименования атрибутов, дающая возможность корректно сформировать заголовок (схему) результирующего отношения. Объединением двух совместимых отношений R1 и R2 (R1 UNION R2} одинаковой размерности является отношение R1, содержащее все элементы исходных отношений с исключением повторений, т. е. полученное отношение включает все кортежи, которые входят хотя бы в одно из отношений-операндов. Пересечение двух совместимых отношений R1 и R2 {INTERSECTR R2) одинаковой размерности порождает отношение R, включающее в себя кортежи, которые входят в оба исходные отношения. Для отношений R1 и R2 из предыдущего примера (см. рис. 3.2) результирующее отношение R будет означать всех студентов из группы 35 мужского пола (рис. 3.3). Вычитание совместимых отношений и R2 (R1 MINUS R2) одинаковой размерности есть отношение, состоящее из множества кортежей, принадлежащих R1, но не входящих в отношение R1. тех же отношений R1 и R2 на предыдущего примера (см. рис. 3.2) отношение R будет представлять собой множество студентов группы 35 женского пола (рис. 3.4). Прямое произведение отношения R1 степени a1 и отношения R2 степени a2 (R1 TIMES R2), которые не имеют одинаковых имен атрибутов — это такое отношение R степени (a1 + a2), заголовок которого представляет собой сцепление заголовков отношений R1 и R2, а тело имеет всевозможные соединения кортежей отношений R1 н R2, такие что первые a1 элементов кортежей принадлежат множеству R1, а последние a2 элементов — множеству R2. При необходимости для получения произведения двух отношений, имеющих одинаковые имена одного или нескольких атрибутов, применяется операция переименования. Пример произведения отношений представлен на рис. 3.5. Следует заметить, что операция получения произведения не является распространенной на практике. Во-первых, мощность тела ее результирующего отношения очень велика даже при допустимых мощностях исходных отношений, а, во-вторых, результат операции не более информативен, чем взятые в совокупности исходные отношения. Как будет показано далее, основной смысл включения операции произведения в состав реляционной алгебры Кодда состоит в том, что на ее основе определяется действительно полезная операция соединения. Первой специальной операцией реляционной алгебры является горизонтальный выбор, или операция фильтрации, или операция ограничения отношений. Операция ограничения (выборка) WHERE требует наличия двух операндов: ограничиваемого отношения и простого условия ограничения. Операция ограничения (выборка) отношения R по формуле f {R WHERE f) представляет собой новое отношение с таким же заголовком и телом, состоящим из таких кортежей отношения R, которые удовлетворяют истинности логического выражения, заданного формулой f. Для записи формулы используются имена атрибутов (или номера столбцов), константы, логические операции (AND — И, OR — ИЛИ, NOT — НЕ), операции сравнения («=», «≠», «>», «⩾», «<», «⩽») и скобки. На рис. 3.6 приведен пример выполнения операции ограничения отношения R — выборка студентов группы 44 (WHERE Группа = 44). Результатом проекции отношения А на множество атрибутов {a1, а2, ..., аn} (PROJECT А {а1, a2, …, an}) является отношение с заголовком, определяемым множеством атрибутов (а1 a2,..., аn}, и с телом, состоящим из кортежей вида Операция проекции допускает следующие дополнительные варианты записи: ■ отсутствие списка атрибутов подразумевает указание всех атрибутов (операция тождественной проекции); ■ результатом пустой проекции является пустое множество; ■ операция проекции может применяться к произвольному отношению, в том числе и к результату выборки. Например, для отношения R из предыдущего примера (см. рис. 3.6) результатом проекции PROJECT СТУДЕНТЫ {Группа} будет отношение, состоящее из двух кортежей (рис. 3.7). Операция проекции, называемая иногда также операцией вертикального выбора, позволяет получить только требуемые характеристики моделируемого объекта. Например, выбрать в отношении R атрибуты ФИО и Группа. Чаще всего операция проекции употребляется как промежуточный шаг в операциях горизонтального выбора, или фильтрации. Кроме того, она используется самостоятельно на заключительном этапе получения ответа на запрос. Операция деления отношений достаточно сложная и требует пошагового рассмотрения. Пусть заданы два отношения: А и B с заголовком {a1, a2, ..., аn, b1, b2, ..., bm,} и {b1, b2, ..., bm,} соответственно. Атрибуты bi (i = 1, 2, ..., m) определены на одном и том же домене и имеют одинаковые имена, т. е. общие для двух отношений. Назовем множество атрибутов {ai} составным атрибутом a, а множество атрибутов {bj} —составным атрибутом a. Тогда делением отношений А на В (А DIVIDE BY В) называют отношение с заголовком а и телом, содержащим множество всех кортежей {а}, таких что существует кортеж {а, b}, который принадлежит отношению А для всех кортежей {b}, принадлежащих отношению В. Другими словами, результат содержит такие значения из А, которых соответствующие значения b из отношения А включают все значения b из отношения В. Операция деления удобна тогда, когда требуется сравнить некоторое множество характеристик отдельных атрибутов. Приведем пример выполнения операции деления. В базе данных имеются отношение R1{ФИО, Дисциплина, Оценка} и унарное отношение R2{Дисциплина} (рис. 3.8). Тогда результат деления (R1 DIVIDE BY R2) выдаст данные обо всех студентах, получивших оценки по всем дисциплинам из отношения R2 (результат операции приведен также на рис. 3.8). Операция соединения Cf (R1, R2) отношений R1 и R2 по условию, заданному формулой f, представляет собой отношение R, которое можно получить путем декартова произведения отношений R1 и R2 с последующим применением к результату операции выборки по формуле f. Эта операция предназначается для тех случаев, когда нужно соединить вместе два отношения на основе некоторых условий или формулы. Правила записи формулы f те же, что и для операции выборки. Другими словами, соединением отношения R1 по атрибуту a с отношением по атрибуту a с отношением R2 по атрибуту b (отношения не имеют общих имен атрибутов) является результатом выполнения операции вида (R1 TIMES R2) WHERE а Q b, где Q — логическое выражение над атрибутами, определенными на одном (нескольких — для составного атрибута) домене. Соединение Cf (R1 R2), где формула f имеет произвольный вид (в отличие от частных случаев, рассматриваемых далее), называют также Q-соединением. Для иллюстрации операций соединения мы немного изменим заголовки и тела отношений, которые использовались ранее в примерах. Предположим, что в базе данных имеются отношение R1 {ФИО, Группа, Пол} и отношение R2{Группа, Куратор, Курс} (рис. 3.9). Необходимо найти соединение отношений R1 и R2 по атрибутам Группа (обозначим их как R1 Группа и R2. Группа соответственно для каждого отношения). В результате производится отношение R1 кортежи которого производятся путем объединения кортежей первого и второго отношений и удовлетворяют условию (R1 Группа = R2. Группа), т.е. списки студентов и кураторы их групп. Можно наложить еще условие— выбрать только студентов 3-го курса: (R (R1 TIMES R2) WHERE (R1. Группа = R2. Группа) AND (Курс=3)). Важными с практической точки зрения частными случаями соединения являются эквисоединение и естественное соединение. Операция эквисоединения характеризуется тем, что формула задает равенство операндов. Иногда эквисоединение двух отношений выполняется по таким столбцам, атрибуты которых в обоих отношениях имеют соответственно одинаковые имена и домены. В этом случае говорят об эквисоединении по общему атрибуту. Приведенный выше пример демонстрирует частный случай операции эквисоединения по одному столбцу. Операция естественного соединения (операция JOIN) применяется к двум отношениям, имеющим общий атрибут (простой или составной). Этот атрибут в отношениях имеет одно и то же имя (совокупность имен) и определен на одном и том же домене (доменах). Результатом операции естественного соединения является отношение R1 которое представляет собой проекцию эквисоединения отношений R1 и R2 по общему атрибуту на объединенную совокупность атрибутов обоих отношений. Теперь можно кратко сформулировать определения операций реляционной алгебры Кодда: ■ при выполнении операции объединения (UNION) двух отношений с одинаковыми заголовками производится отношение, включающее все кортежи, которые входят хотя бы в одно из отношений-операндов; ■ операция пересечения (INTERSECT) двух отношений с одинаковыми заголовками производит отношение, включающее все кортежи, которые входят в оба отношения-операнда; ■ отношение, являющееся разностью (MINUS) двух отношений с одинаковыми заголовками, включает все кортежи, входящие в первое отношение и не входящие во второе отношение; ■ при выполнении произведения (TIMES) двух отношений, пересечение заголовков которых пусто, производится отношение, кортежи которого производятся путем объединения кортежей первого и второго операндов; ■ результатом ограничения (WHERE) отношения по некоторому условию является отношение, включающее кортежи отношения операнда, удовлетворяющее этому условию; ■ при выполнении проекции (PROJECT) отношения на заданное подмножество множества его атрибутов производится отношение, кортежи которого являются соответствующими подмножествами кортежей отношения-операнда; ■ при соединении (JOIN) двух отношений по некоторому условию образуется результирующее отношение, кортежи которого производятся путем объединения кортежей первого и второго отношений и удовлетворяют этому условию; ■ у операции реляционного деления (DIVIDE BY) два операнда — бинарное и унарное отношения. Результирующее отношение состоит из унарных кортежей, включающих значения первого атрибута кортежей первого операнда таких, что множество значений второго атрибута (при фиксированном значении первого атрибута) включает множество значений второго операнда. Алгебра Кодда избыточна, введение операции декартова произведения в качестве базовой операции алгебры может ввести в заблуждение неопытных читателей. Тем не менее, с этой несколько устаревшей и небезупречной теории начинают обсуждение базовых манипуляционных механизмов реляционной модели данных практически во всех учебных изданиях по реляционным базам данных. Потому что семантика языка SQL (структурированного языка запросов) во многом базируется именно на этой алгебре, нам будет проще изучать SQL, предварительно познакомившись с ней. Индексирование Данные запоминаются в индексированной таблице в том порядке, в каком они вводятся пользователем. Это так называемый физический порядок следования записей. Однако часто требуется представить данные в другом, отличном от физического, порядке, отсортировав их по каким-либо полям. Сортировка заключается упорядочении записей по определенному полю в порядке возрастания или убывания содержащихся в нем значений. Например, может потребоваться просмотреть данные о студентах, упорядоченные по номерам групп и/или по алфавиту (рис. 3.10). Кроме этого, часто бывает необходимо найти в большом объеме информации запись, удовлетворяющую определенному критерию, например, найти студента по дате его рождения. Простой перебор записей при поиске в большой таблице может потребовать достаточно много времени и поэтому будет неэффективным. Эффективным средством решения этих задач является использование индексов. Индексы можно представить, как специальные структуры в базах данных, которые позволяют ускорить поиск и сортировку по определенному потно или набору полей в таблице. Индексы также используются для обеспечения уникальности данных, т. е. для построения первичных или уникальных ключей. Физически индекс представляет собой таблицу, используемую для определения адреса записи. При наличии индексов во многих случаях поиск данных может выполняться гораздо быстрее, чем при отсутствии индекса, потому что значения в индексе упорядочены, а сам индекс относительно мал. Индекс создается пользователем или системой для конкретной таблицы. Главная причина повышения скорости выполнения различных операций в индексированных таблицах состоит в том, что основная часть работы производится с небольшими индексными файлами, а не с самими таблицами. Наибольший эффект повышения производительности работы с индексированными таблицами достигается для значительных по объему таблиц. Индекс содержит ключевые значения для каждой записи в таблице данных. Ключевые значения определяются на основе одного или нескольких полей таблицы. Кроме того, индекс содержит уникальные ссылки на соответствующие записи в таблице и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается еще и за счет того, что индекс имеет структуру, оптимизированную под поиск (например, сбалансированного дерева). Индексы можно сравнить с оглавлением в книге. При поиске нужного фрагмента текста мы ищем, в какой главе или в каком параграфе он находится, затем открываем книгу на нужной странице, указанной в оглавлении, и уже там осуществляем поиск текста. Индекс выполняет роль указателя таблицы, просмотр которого предшествует обращению к записям таблицы. По указанному значению индекса система находит нужный блок информации в массиве данных, который и выдает пользователю. Таким образом, индекс позволяет ускорить процесс поиска данных в таблице, а иногда и ускорить упорядочение данных, полученных по запросу пользователя. Способы организации физического доступа к информации в таблицах зависят в основном от следующих факторов: ■ вид содержимого в поле ключа записей индексного файла; ■ тип используемых ссылок (указателей) на запись основной таблицы; ■ метод поиска нужных записей. При разработке приложений, работающих с базами данных, наиболее широко применяют простые индексы. Примером простого индекса в таблице «Студенты» может служить поле «Идентификатор» (индивидуальный номер) (рис. 3.11). Хотя в большинстве случаев для представления данных в определенном порядке достаточно использовать простой индекс, построенный по одному полю, часто возникают ситуации, где не обойтись без составных индексов. Составной индекс строится на основе значений двух или более полей таблицы. Хорошей иллюстрацией составных индексов может служить таблица «Сотрудники» (рис. 3.12). Понятно, что использование в качестве простого индекса по фамилии человека в данном случае недопустимо. Даже использование составного индекса, основанного на полях «Номер подразделения» и «ФИО», может быть неэффективным, так как в этом случае возможно существование однофамильцев. Выходом из положения может быть применение составного индекса, основанного, например, на следующих полях таблицы; «Подразделение», «Табельный номер». Таблицы в базе данных могут и не иметь индексов. В этом случае для большой таблицы время поиска определенной записи может быть весьма значительным и использование индекса становится необходимым. С другой стороны, не следует увлекаться созданием слишком большого количества индексов. Увеличение числа индексов замедляет операции добавления, обновления, удаления строк таблицы, поскольку при этом приходится обновлять сами индексы. Для оптимальной производительности запросов индексы обычно создаются на тех столбцах таблицы, которые часто используются в запросах. Кроме того, индексы занимают дополнительный объем памяти, поэтому перед созданием индекса следует убедиться, что планируемый выигрыш в производительности запросов превысит дополнительную затрату ресурсов компьютера на сопровождение индекса. Связывание таблиц. Понятие ссылочной целостности Связи между объектами реального мира могут находить свое отражение в структуре данных базы данных. Обычно реляционная база данных состоит из набора взаимосвязанных таблиц. Организация связи между двумя или несколькими таблицами называется связыванием таблиц. Связи между таблицами можно устанавливать при создании таблицы и при выполнении приложения, используя средства, предоставляемые СУБД. Связывать можно две таблицы или более. Это могут быть как равноправные связи, так и отношения подчиненности, при которых для каждой записи главной таблицы (называемой еще родительской) возможно наличие одной или нескольких записей в подчиненной таблице (дочерней). В реляционной БД кроме связанных таблиц могут быть и отдельные таблицы, не соединенные ни с одной другой таблицей. Для связывания таблиц используют поля связи («совпадающие» поля). Поля связи обязательно должны быть индексированными и быть одинакового типа. В подчиненной таблице для связи с главной таблицей задается индекс (внешний ключ). Состав полей этого индекса должен полностью или частично совпадать с составом полей индекса главной таблицы. Выделяют три разновидности связи между таблицами базы данных: 1) «один-ко-многим»; 2) «один-к-одному»; 3) «многие-ко-многим». Отношение «один-ко-многим» имеет место, когда одной записи родительской таблицы может соответствовать несколько записей дочерней. Связь «один-ко-многим» иногда называют связью «многие-к-одному». И в том, и в другом случае сущность связи между таблицами остается неизменной. Связь «один-ко-многим» является самой распространенной для реляционных баз данных. Она позволяет моделировать и иерархические структуры данных. Для иллюстрации связи «один-ко-многим» будем использовать две таблицы. В одной хранится список групп учебного заведения (рис. 3.13), в другой список студентов (рис. 3.14). Таблица «Группы» имеет следующую структуру: ID — идентификатор записи, ключевое поле целочисленного типа; NAME_GROUP — наименование группы, поле символьного типа; K_RUK — классный руководитель, поле символьного типа. Таблица «Студенты» содержит следующие поля: ID — идентификатор записи, ключевое поле целочисленного типа; NAME_STUD — ФИО студента, поле символьного типа; ID GROUP — идентификатор группы, индексное поле целочисленного типа. В данной ситуации главной является таблица «Группы», а подчиненной — таблица «Студенты». При этом таблицы связаны полями «ID» и «ID_GROUP» из таблиц «Группы» и «Студенты» соответственно, т. е. по идентификатору группы можно определить принадлежность студента той или иной группе После связывания обеих таблиц при выборе записи с какой-либо группой в таблице «Группы» в таблице «Студенты» будут доступны только записи со студентами, обучающимися в этой группе. Например, если в первой таблице указатель будет установлен на записи группы «18-пкс» (ID=2), то в таблице студенты будут доступны только три записи, в которых ID_GROUP=2 (рис. 3.15). Предположим, что из таблицы «Группы» будет удалена запись (случайно или преднамеренно), тогда в подчиненной таблице «Студенты» для соответствующих записей будет нарушена связь, по идентификатору группы уже невозможно будет определить принадлежность этих студентов какой-либо группе, т. е. произойдет потеря информации, что недопустимо. Следовательно, нужно либо запретить удаление записи в главной (родительской) таблице, если у нее есть связанные записи в подчиненной таблице, либо удалять соответствующие записи в подчиненной таблице вместе с записью из главной таблицы. Точно так же нельзя вводить данные в подчиненной таблице без привязки их к какой-либо записи в главной таблице, т. е. оставлять поле связи пустым или вводить значения, которых нет в главной таблице. При изменении значения в ключевом поле главной таблицы или в поле связи подчиненной таблицы связь также будет нарушена, что приведет к потере или искажению информации. Отношение «один-к-одному» имеет место, когда одной записи в родительской таблице соответствует одна запись в дочерней таблице. Это отношение встречается намного реже, чем отношение «один-ко-многим». Его используют, если не хотят, чтобы таблица БД «разрасталась» от второстепенной информации. Например, в какой-нибудь таблице хранится архив сведений о сотрудниках, содержащий более сотни полей (характеристик) и несколько сотен тысяч записей. Из этого архива в постоянно используются только ФИО, дата рождения и домашний адрес. Было бы нерационально с точки зрения использования оперативной памяти, каждый раз считывая эти данные, открывать всю таблицу и загружать в память огромный массив данных. Поэтому ее можно разбить на две: в одной хранить часто запрашиваемые сведения, а в другой редко используемую информацию. Тогда связать эти таблицы можно связью «один-к-одному». Еще бывают случаи, когда часть сведений нужно «засекретить», и тогда данные, которые не должны быть доступны всем пользователям, можно вынести в отдельную таблицу и «обезопасить» ее, поставив пароль. Отношение «многие-ко-многим» применяется в следующих случаях: ■ одна запись в родительской таблице соответствует более одной записи в дочерней; ■ одна запись в дочерней таблице соответствует более одной записи в родительской. На практике отношение «многие-ко-многим» используется достаточно редко. Причина — сложность организации связи между таблицами и взаимодействия между их записей. Кроме того, для отношения «многие-ко-многим» понятия главной и подчиненной таблиц не имеют смысла. Всякую связь «многие-ко-многим» в реляционной базе данных необходимо заменить на связь «один-ко многим» (одну или более) с помощью введения дополнительных таблиц. Ссылочная целостность в реляционной базе данных представляет собой согласованность между связанными таблицами. Ссылочная целостность обычно поддерживается путем комбинирования первичного ключа и внешнего ключа. Для соблюдения ссылочной целостности требуется, чтобы любое поле в таблице, объявленное внешним ключом, могло содержать только значения из поля первичного ключа родительской таблицы. Ссылочная целостность предотвращает ввод несогласованных данных пользователями или приложениями. В большинстве реляционных СУБД имеются разные правила ссылочной целостности, которые можно применить при создании связи между двумя таблицами. Работа со связанными таблицами имеет следующие особенности. ■ при изменении (редактировании) поля связи может нарушиться связь между записями двух таблиц. Поэтому при редактировании поля связи записи главной таблицы нужно соответственно изменять и поле связи и значения поля связи всех подчиненных таблиц (каскадное изменение); ■ при удалении записи главной таблицы нужно удалять и соответствующие ей записи в подчиненной таблице (каскадное удаление); ■ при добавлении записи в подчиненную таблицу значение ее поля связи должно быть установлено равным значению поля связи главной таблицы. Ограничения по каскадному удалению, каскадному изменению, установке нового значения могут быть наложены на таблицы при их создании или реструктуризации. Эти ограничения наряду с описанием полей и индексов и другими элементами входят в структуру таблицы и действуют для всех приложений, работающих с этой базой данных. Подобные ограничения можно реализовывать и программным способом: устанавливать и удалять связи между таблицами, контролировать или запрещать редактирование полей связи и т.д. Принципы поддержки целостности в реляционной базе данных Целостность данных — одно из основополагающих понятий в технологии баз данных. Эта характеристика подразумевает наличие средств, позволяющих удостовериться, что информация в базе данных всегда остается корректной и полной. Должны быть установлены правила целостности, и они должны храниться вместе с базой данных и соблюдаться на глобальном уровне. Целостность данных должна обеспечиваться независимо от того, каким образом данные заносятся в память (в интерактивном режиме, посредством импорта или с помощью специальной программы). В реляционной модели объекты реального мира представлены в виде совокупности взаимосвязанных отношений. Целостность можно определить, как соответствие информационной модели предметной области объектам реального мира и их взаимосвязям в любой момент времени. Изменение в предметной области, значимое для построенной модели, должно отражаться в базе данных. При этом должна сохраняться однозначная интерпретация информационной модели в терминах предметной области. Ограничения целостности обеспечивают непротиворечивость данных при переводе системы баз данных из одного состояния в другое и позволяют адекватно отражать предметную область данными, хранимыми в БД. Ограничения целостности делятся на явные и неявные. Неявные ограничения определяются самой структурой данных. Например, тот факт, что записи типа «Студент» являются обязательными членами какого-либо экземпляра набора данных «Группа», служит, по существу, ограничением целостности, означающим, что каждый студент непременно должен числиться в какой-либо группе. Явные ограничения задаются в схеме базы данных с помощью средств языка описания данных (DDL, Data Definition Language). В качестве явных ограничений чаще всего выступают условия, накладываемые на значения данных. Например, заработная плата не может быть отрицательной, а дата приема сотрудника на работу обязательно будет предшествовать дате его перевода на другую работу. За выполнением этих ограничений следит СУБД в процессе своего функционирования. Различают также статические и динамические ограничения целостности. Статические ограничения присущи всем состояниям предметной области, а динамические определяют-возможность перехода предметной области из одного состояния в другое. Примерами статических ограничений целостности могут служить требования уникальности номера паспорта или ограничения на дату рождения, которая не может быть больше текущей даты. В качестве примера динамического ограничения целостности можно привести ограничение банковской системы, в соответствии с которым нельзя удалить сведения о клиенте, пока у него не закрыт счет. К средствам обеспечения целостности данных на уровне СУБД относятся: ■ встроенные средства для назначения первичного ключа, в том числе средства для работы с типом полей с автоматическим приращением, когда СУБД самостоятельно присваивает новое уникальное значение; ■ средства поддержания ссылочной целостности, которые обеспечивают запись информации о связях таблиц и автоматически пресекают любую операцию, приводящую к нарушению ссылочной целостности. Некоторые СУБД имеют хорошо разработанный процессор СУБД для реализации таких возможностей, как уникальность первичных ключей, ограничение (пресечение) операций и даже каскадное обновление и удаление информации. В таких системах проверка корректности, назначаемая полю или таблице, будет проводиться всегда после изменения данных, а не только во время ввода информации с помощью экранной формы. Это свойство можно настраивать для каждого поля и для записи в целом, что позволяет контролировать не только значения отдельных полей, но и взаимосвязи между несколькими полями данной записи. Поддержка целостности в реляционной модели данных имеет следующие аспекты. Во-первых, это поддержка структурной целостности, которая заключается в том, что реляционная СУБД должна допускать работу только с однородными структурами данных типа «реляционное отношение». При этом понятие «реляционное отношение» должно удовлетворять всем ограничениям, накладываемым на него в классической теории реляционной БД: Реляционная СУБД работает только со структурой данных типа реляционное отношение. Необходимо поддерживать правила, соответствующие реляционной таблице: ■ в таблице нет одинаковых кортежей; ■ столбцы соответствуют атрибутам отношения; ■ всегда есть первичный ключ; ■ каждый атрибут имеет уникальное имя; ■ порядок строк в таблице произвольный; ■ два отношения, отличающиеся только порядком следования столбцов, считаются одинаковыми. Во-вторых, это поддержка языковой целостности, которая состоит в том, что реляционная СУБД должна обеспечивать языки описания и манипулирования данными не ниже стандарта SQL. Не должны быть доступны иные низкоуровневые средства манипулирования данными, не соответствующие стандарту. Именно поэтому доступ к информации, хранимой в базе данных, и любые изменения этой информации могут быть выполнены только с использованием операторов языка SQL (стандартный язык реляционных СУБД). В-третьих, это поддержка ссылочной целостности, означает обеспечение одного из заданных принципов взаимосвязи между экземплярами кортежей взаимосвязанных отношений; ■ кортежи подчиненного отношения уничтожаются при удалении кортежа основного отношения, связанного с ними. ■ кортежи основного отношения модифицируются при удалении кортежа основного отношения, связанного с ними, при этом на месте ключа родительского отношения ставится неопределенное Null значение. Ссылочная целостность обеспечивает поддержку непротиворечивого состояния БД в процессе модификации данных при выполнении операций добавления или удаления. Структурная, языковая и ссылочная целостности определяют правила работы СУБД с реляционными структурами данных. Требования поддержки этих трех видов целостности говорят о том, что каждая СУБД должна обеспечивать выполнение этих правил, а разработчики должны это учитывать при построении баз данных с использованием реляционной модели и разработке приложения для реляционных баз данных. ДОСТОИНСТВА И НЕДОСТАТКИ РЕЛЯЦИОННОЙ МОДЕЛИ ДАННЫХ Реляционный подход к организации баз данных был заложен в конце 1960-х гг. Эдгаром Коддом и далеко не сразу получил широкое распространение и популярность. В то время как основные теоретические результаты в этой области были получены еще в начале 1970-х гг., и тогда же появились первые прототипы реляционных СУБД, долгое время считалось невозможным добиться эффективной реализации таких систем. Однако преимущества реляционного подхода и развитие методов и алгоритмов организации и управления реляционными базами данных привели к тому, что реляционные системы заняли на мировом рынке СУБД доминирующее положение. Уже в середине 1980-х гг. Реляционные системы практически вытеснили с мирового рынка ранние СУБД. И в настоящее время реляционные СУБД остаются наиболее эффективными. Этому способствовали существенные достоинства реляционной модели данных. ■ табличное представление, на основе которого можно моделировать наиболее распространенные предметные области. Реляционная модель предоставляет средства описания данных только на основе их естественной структуры. Нет необходимости введения каких-либо дополнительных структур, чтобы получить машинное представление данных. Соответственно, эта модель обеспечивает основу языка данных высокого уровня, который поддерживает максимальную независимость программ, с одной стороны, и машинного представления, и организации данных с другой. Эти абстракции могут быть точно и формально определены; ■ другим достоинством реляционной модели данных является наличие простого и в то же время мощного математического аппарата, базирующегося на теории множеств и математической логики и обеспечивающего теоретический базис реляционного подхода к организации баз данных. Кроме того, реляционный подход обеспечивает возможность манипулирования данными без необходимости знания конкретной физической организации баз данных во внешней памяти. Наряду с общепризнанными достоинствами обладает и рядом недостатков: ■ присущая реляционным системам некоторая ограниченность, что является прямым следствием их простоты. Особенно это ощущается при использовании реляционных СУБД в нетрадиционных областях применения (например, в системах автоматизированного проектирования), в которых требуются очень сложные структуры данных; ■ невозможность адекватного отражения семантики предметной области. И это тоже является платой за простоту их структуры. Современные исследования в области постреляционных систем главным образом посвящены именно устранению этих недостатков. |