С.Д. Кузнецов - Основы баз данных (1121716), страница 11
Текст из файла (страница 11)
Для ссылки на значение атрибута в кортеже отношения всегда используется имя атрибута. Легко заметить явную аналогию между заголовками отношений и структурными типами в языках программирования. Даже в языке программирования С с его практически неограниченными возможностями работы с указателями настойчиво рекомендуется обращаться к полям структур только по их именам. Если, например, на языке С определена структурная переменная ЯТйдСТ (Тпгедег а; слег Ь; Тпгедег с( д; то в стандарте языка решительно не рекомендуется использовать для доступу к символьному полю Ь конструкцию * (ьг( + вьаеог (Тпгедег( ) (взять адрес структурной переменной с(, прибавить к нему число байтов в 45 Основы баз данных курс целом числе и взять значение байта по полученному адресу).
Это объясняется тем, что при реальном расположении в памяти полей такой структурной переменной в том порядке, как они определены, во многих компьютерах потребуется выровнять поле с по байту с четным адресом. Поэтому один байт просто пропадет. При расположении структурной переменной в памяти экономный компилятор (вернее, оптимизатор) переставит местами поля Ь и с, и указанная выше конструкция не обеспечит доступа к полю Ь. Для корректного обрашения к полю Ь переменной о нужно использовать конструкции г1. Ь или аг)- Ь, т. е. явно указывать имя поля.
Аналогичными практическими соображениями оправдывается и отсутствие упорядоченности атрибутов в заголовке отношения. В этом случае СУБД сама принимает решение о том, в каком физическом порядке следует хранить значения атрибутов кортежей (хотя обычно один и тот же физический порядок поддерживается для всех кортежей каждого отношения). Кроме того, это свойство облегчает выполнение операции модификации схем сушествуюших отношений не только путем добавления новых атрибутов, но и путем удаления существуюших. Снова забегая вперед, заметим, что в языке Я~(.
в некоторых случаях допускается индексное указание атрибутов, причем в качестве неявного порядка атрибутов используется их порядок в линейной форме определения схемы отношения (это одна из осуждаемых особенностей языка Я9Б). Атомарность значений атрибутов, первая нормальная форма отношения Значения всех атрибутов являются атомарными (вернее, скалярными). Это следует из определения домена как потенциального множества значений скалярного типа данных, т. е.
среди значений домена не могут содержаться значения с видимой структурой, в том числе множества значений (отношения). Заметим, что это не противоречит тому что говорилось в разделе «Основные понятия реляционных баз данных» о потенциальной возможности использования при спецификации атрибутов типов данных, определяемых пользователями. Например, можно было бы добавить в схему отношения СЛУЖАЩИЕ атрибут СЛУ ФОТО, определенный на домене (или типе данных) ФотогеАФИИ.
Главное в атомарности значений атрибутов состоит в том, что реляционная СУБД не должна обеспечивать пользователям явной видимости внутренней структуры значения. Со всеми значениями можно обрашаться только с помошью операций, определенных в соотвегствуюшем типе данных. Принято говорить, что в реляционных базах данных допускаются только нормализованные отношения, или отношения, представленные в первой нормальной форме. Лекция 2 Введение в реляционную модель данных Пример ненормализованного отношения показан на рис. 2.2.
Можно сказать, что здесь мы имеем бинарное отношение, в котором значениями атрибута ОТЛЕЛЫ являются отношения. Заметим, что исходное отношение СЛУЖАЩИЕ является нормализованным вариантом отношения ОтЛЕЛЫ-СЛуждщиЕ. Нормализованный вариант показан на рис. 2.3. Нормализованные отношения составляют основу классического реляционного подхода к организации баз данных. Они обладают некоторыми ограничениями (не всякую информацию удобно представлять в виде плоских таблиц)*, но существенно упрощают манипулирование данными. Рассмотрим, например, два идентичных оператора занесения кортежа; ° зачислить служащего Кузнецова (пропуск номер 3000, зарплата 25000.00) в отдел номер 320„' Рис.
2.2. Ненормализованное отношение Отделы-служащие Рис. 2.3. Отношение СЛуждщИЕ: нормализованный вариант отношения ОТДЕЛЫ-СЛУЖАЩИЕ Эти ограничения все более ослабляются в лоследовательности стандартов языка ЯЯ.. ат Основы баа данных Курс ° зачислить служашего Кузнецова (пропуск номер 3000, зарплата 25000.00) в отдел номер 310.
Если информация о служащих представлена в виде отношения служлжиж, оба оператора будут выполняться одинаково (вставить кортеж в отношение Олух„'ил). Если же работать с ненормализованным отношением отдкли-служлл(ил, то первый оператор приведет к простой вставке кортежа, а второй — к добавлению кортежа в значение-отношение атрибута Отлжл кортежа с первичным ключом 310. При работе с ненормазизованными отношениями аналогичные затруднения возникают при выполнении операций удаления и модификации кортежей.
Реляционная модель данных Когда в предыдущих разделах мы говорили об основных понятиях реляционных баз данных, мы не опиразись на какую-либо конкретную реализацию. Эти рассуждения в равной степени относятся к любой системе, при построении которой использовался реляционный подход.
Другими словами, мы использовали понятия так называемой реляционной модели данных. Модель данных (в контексте области баз данных) описывает некий набор родовых понятий и признаков, которыми должны обладать все конкретные СУБД и управляемые ими базы данных, если они основываются на этой модели. Наличие модели данных позволяет сравнивать конкретные реализации, используя один обший язык. Хотя понятие модели данных является обшим, и можно говорить об иерархической, сетевой, семантической и других моделях данных, нужно отметить, что в области баз данных это понятие было введено Эдгаром Коддом применительно к реляционным системам и наиболее эффективно используется именно в данном контексте.
Попытки прямолинейного применения аналогичных моделей к дореляционным организациям показывают, что реляционная модель слишком «велика», а для постреляционных организаций она оказывается «мала». Общая характеристика Хотя понятие реляционной модели данных первым ввел основоположник реляционного подхода Эдгар Кодд, наиболее распространенная трактовка реляционной модели данных, по-вндимому, принадлежит известному популяризатору идей Кодда Кристоферу Дейту, который воспроизводит ее (с различными уточнениями) практически во всех своих книгах (см., например, К. Дейт.
Введение в системы баз данных. 6-е изд., М.; СПбл Вильямс.— 2000). Согласно трактовке Дейта, реляционная мо- 48 Лекция 2 Введение в реляционную модель данных дель состоит из трех частей, описывающих разные аспекты реляционного подхода: структурной части, манипуляционной части и целостной части. В структурной части модели фиксируется, что единственной родовой* структурой данных, используемой в реляционных БД, является нормализованное и-арное отношение.
Определяются понятия доменов, атрибутов, кортежей, заголовка, тела и переменной отношения. По сути дела, в двух предыдуших разделах атой лекции мы рассматривали именно понятия и свойства структурной составляющей реляционной модели. В манипуляционной части модели определяются два фундаментальных механизма манипулирования реляционными БД вЂ” реляционная алгебра и реляционное исчисление.
Первый механизм базируется в основном на классической теории множеств (с некоторыми уточнениями и добавлениями), а второй — на классическом логическом аппарате исчисления предикатов первого порядка. Мы рассмотрим зти механизмы более подробно в следующих лекциях, а пока лишь заметим, что основной функцией манипуляционной части реляционной модели является обеспечение меры реляционности любого конкретного языка реляционных БД: язык называется реляционным, если он обладает не меньшей выразительностью и мощностью, чем реляционная алгебра или реляционное исчисление. Целостность сущности и ссылок Наконец, в целостной части реляционной модели данных фиксируются два базовых требования целостности, которые должны поддерживаться в любой реляционной СУБД.
Первое требование называется требованием целостности сущности (ел(((у (п(еЛу(Я. Объекту или сущности реального мира в реляционных БД соответствуют кортежи отношений. Конкретно требование состоит в том, что любой кортеж любого значения-отношения любой переменной отношения должен быть отличим от любого другого кортежа этого значения отношения по составным значе- ' Уме второй раз в этой лекции утвер:кдается, что нормализованное и-арное отношение является единственной родовой структурой данных, используемой в реляционных БД.
Пришло время пояснить, что мы имеем в виду под термином родовая структура. В языках программироаания с развитыми системами типов обычно имеются конструкции, называемые радовыми типамн, параметризуемыми типами, конструкторами типов, генераторами типов и т д., позвал яюшие породить конкретный тип данных на основе его абстрактной (обычно, предопределенной) спецификации. Особенность таких типов состоит в том, что и основные операции конкретного типа опрелеляются на уровне этой абстрактной спецификации. Одним из наиболее известных примеров является тип множества, например, в языке Рааса). В случае реляционной модели данных мы не говорим явно, что отношение является родовым типом, но, по существу, это именно так.
Операции реляционной алгебры опрелеллются на уровне абстрактного отношения и применимы к любым значениям-отношениям с конкретными заголовками. 49 Основы баз данных Курс ниям заранее определенного множества атрибутов переменной отношения, т. е., другими словами, любая переменная отношения должно обладать первичным ключом. Как мы видели в предыдущем разделе, это требование автоматически удовлетворяется, если в системе не нарушаются базовые свойства отношений. На самом деле, требование целостности сущности полностью звучит следующим образом: у любой переменной отношения должен существовать первичный ключ, и никакое значение первичного ключа в кортежах значения- отношения переменной отношения не долзкно содержать неопределенных значений.