КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Управление данными5.1. Основные понятия: база данных, модель данных, схема базы данных. База данных - именованная структурированная совокупность данных на внешнем носителе, отражающая состояние объектов и их отношений в рассматриваемой предметной области. БД должна содержать все обрабатываемые в автоматизированной системе первичные данные. При этом, не допускается дублирование данных, т.е. описание любого объекта предметной области должно храниться только в одном месте. Каждая БД строится в соответствии с определенной моделью данных. Модель данных - совокупность методов и средств, в соответствии с которыми данные структурируются и выполняются операции над этими данными. Согласно Кодду она содержит три компонента: - средства определения допустимых структур данных; - множество операций, применимых к допустимому состоянию БД для поиска и модификации данных; - множество ограничений целостности, определяющих допустимые состояния БД Наиболее распространены следующие модели данных: иерархическая, сетевая, реляционная, объектная.Чаще всего на практике используются реляционные БД. Однако, в последние несколько лет серьезно развиваются объектные БД, основная область применения которых сейчас – автоматизация проектно-конструкторской деятельности.
Рис. 1. Уровни модели БД Система управления базами данных (СУБД) - совокупность языковых и программных средств, предназначенных для создания, ведения и совместного применения БД многими пользователями [2]. Модель базы данных - описание конкретной базы данных средствами определенного языка (не всегда формального). Существует три уровня модели БД: логическая (инфологическая), физическая (даталогическая) и модель внутреннего представления (физическая). Логическая модель БД используется проектировщиками, администраторами и пользователями. Хотя, в принципе, не требуется, чтобы логическая модель описывалась на формальном языке, в настоящее время ее принято описывать на языке диаграмм «сущность-связь», в основе которых лежит формальная ER-модель П. Чена. Это позволяет осуществлять автоматический переход к физической модели. Схема базы данных - это набор именованных схем отношений.
5.2. Реляционная алгебра: теоретико-множественный операций. Основная идея реляционной алгебры состоит в том, что коль скоро отношения являются множествами, то средства манипулирования отношениями могут базироваться на традиционных теоретико-множественных операциях, дополненных некоторыми специальными операциями, специфичными для баз данных. Существует много подходов к определению реляционной алгебры, которые различаются набором операций и способами их интерпретации, но в принципе, более или менее равносильны. Мы опишем немного расширенный начальный вариант алгебры, который был предложен Коддом. В этом варианте набор основных алгебраических операций состоит из восьми операций, которые делятся на два класса - теоретико-множественные операции и специальные реляционные операции. В состав теоретико-множественных операций входят операции: · объединения отношений; · пересечения отношений; · взятия разности отношений; · прямого произведения отношений. Специальные реляционные операции включают: · ограничение отношения; · проекцию отношения; · соединение отношений; · деление отношений. Кроме того, в состав алгебры включается операция присваивания, позволяющая сохранить в базе данных результаты вычисления алгебраических выражений, и операция переименования атрибутов, дающая возможность корректно сформировать заголовок (схему) результирующего отношения.
Особенности теоретико-множественных операций реляционной алгебры Хотя в основе теоретико-множественной части реляционной алгебры лежит классическая теория множеств, соответствующие операции реляционной алгебры обладают некоторыми особенностями. Начнем с операции объединения (все, что будет говориться по поводу объединения, переносится на операции пересечения и взятия разности). Смысл операции объединения в реляционной алгебре в целом остается теоретико-множественным. Но если в теории множеств операция объединения осмысленна для любых двух множеств-операндов, то в случае реляционной алгебры результатом операции объединения должно являться отношение. Если допустить в реляционной алгебре возможность теоретико-множественного объединения произвольных двух отношений (с разными схемами), то, конечно, результатом операции будет множество, но множество разнотипных кортежей, т.е. не отношение. Если исходить из требования замкнутости реляционной алгебры относительно понятия отношения, то такая операция объединения является бессмысленной. Все эти соображения приводят к появлению понятия совместимости отношений по объединению: два отношения совместимы по объединению в том и только в том случае, когда обладают одинаковыми заголовками. Более точно, это означает, что в заголовках обоих отношений содержится один и тот же набор имен атрибутов, и одноименные атрибуты определены на одном и том же домене. Если два отношения совместимы по объединению, то при обычном выполнении над ними операций объединения, пересечения и взятия разности результатом операции является отношение с корректно определенным заголовком, совпадающим с заголовком каждого из отношений-операндов. Напомним, что если два отношения "почти" совместимы по объединению, т.е. совместимы во всем, кроме имен атрибутов, то до выполнения операции типа соединения эти отношения можно сделать полностью совместимыми по объединению путем применения операции переименования. Заметим, что включение в состав операций реляционной алгебры трех операций объединения, пересечения и взятия разности является очевидно избыточным, поскольку известно, что любая из этих операций выражается через две других. Тем не менее, Кодд в свое время решил включить все три операции, исходя из интуитивных потребностей потенциального пользователя системы реляционных БД, далекого от математики. Другие проблемы связаны с операцией взятия прямого произведения двух отношений. В теории множеств прямое произведение может быть получено для любых двух множеств, и элементами результирующего множества являются пары, составленные из элементов первого и второго множеств. Поскольку отношения являются множествами, то и для любых двух отношений возможно получение прямого произведения. Но результат не будет отношением! Элементами результата будут являться не кортежи, а пары кортежей. Поэтому в реляционной алгебре используется специализированная форма операции взятия прямого произведения - расширенное прямое произведение отношений. При взятии расширенного прямого произведения двух отношений элементом результирующего отношения является кортеж, являющийся конкатенацией (или слиянием) одного кортежа первого отношения и одного кортежа второго отношения. Но теперь возникает второй вопрос - как получить корректно сформированный заголовок отношения-результата? Очевидно, что проблемой может быть именование атрибутов результирующего отношения, если отношения-операнды обладают одноименными атрибутами. Эти соображения приводят к появлению понятия совместимости по взятию расширенного прямого произведения. Два отношения совместимы по взятию прямого произведения в том и только в том случае, если множества имен атрибутов этих отношений не пересекаются. Любые два отношения могут быть сделаны совместимыми по взятию прямого произведения путем применения операции переименования к одному из этих отношений. Следует заметить, что операция взятия прямого произведения не является слишком осмысленной на практике. Во-первых, мощность ее результата очень велика даже при допустимых мощностях операндов, а во-вторых, результат операции не более информативен, чем взятые в совокупности операнды. Как мы увидим немного ниже, основной смысл включения операции расширенного прямого произведения в состав реляционной алгебры состоит в том, что на ее основе определяется действительно полезная операция соединения. По поводу теоретико-множественных операций реляционной алгебры следует еще заметить, что все четыре операции являются ассоциативными. Т. е., если обозначить через OP любую из четырех операций, то (A OP B) OP C = A (B OP C), и следовательно, без введения двусмысленности можно писать A OP B OP C (A, B и C - отношения, обладающие свойствами, требуемыми для корректного выполнения соответствующей операции). Все операции, кроме взятия разности, являются коммутативными, т.е. A OP B = B OP A.
5.3. Реляционная алгебра: специальные операции. В этом подразделе мы несколько подробнее рассмотрим специальные реляционные операции реляционной алгебры: ограничение, проекция, соединение и деление. Операция ограничения Операция ограничения требует наличия двух операндов: ограничиваемого отношения и простого условия ограничения. Простое условие ограничения может иметь либо вид (a comp-op b), где а и b - имена атрибутов ограничиваемого отношения, для которых осмысленна операция сравнения comp-op, либо вид (a comp-op const), где a - имя атрибута ограничиваемого отношения, а const - литерально заданная константа. В результате выполнения операции ограничения производится отношение, заголовок которого совпадает с заголовком отношения-операнда, а в тело входят те кортежи отношения-операнда, для которых значением условия ограничения является true. Пусть UNION обозначает операцию объединения, INTERSECT - операцию пересечения, а MINUS - операцию взятия разности. Для обозначения операции ограничения будем использовать конструкцию A WHERE comp, где A - ограничиваемое отношение, а comp - простое условие сравнения. Пусть comp1 и comp2 - два простых условия ограничения. Тогда по определению: · A WHERE comp1 AND comp2 обозначает то же самое, что и (A WHERE comp1) INTERSECT (A WHERE comp2) · A WHERE comp1 OR comp2 обозначает то же самое, что и (A WHERE comp1) UNION (A WHERE comp2) · A WHERE NOT comp1 обозначает то же самое, что и A MINUS (A WHERE comp1) С использованием этих определений можно использовать операции ограничения, в которых условием ограничения является произвольное булевское выражение, составленное из простых условий с использованием логических связок AND, OR, NOT и скобок. На интуитивном уровне операцию ограничения лучше всего представлять как взятие некоторой "горизонтальной" вырезки из отношения-операнда. Операция взятия проекции Операция взятия проекции также требует наличия двух операндов - проецируемого отношения A и списка имен атрибутов, входящих в заголовок отношения A. Результатом проекции отношения A по списку атрибутов a1, a2, ..., an является отношение, с заголовком, определяемым множеством атрибутов a1, a2, ..., an, и с телом, состоящим из кортежей вида <a1:v1, a2:v2, ..., an:vn> таких, что в отношении A имеется кортеж, атрибут a1 которого имеет значение v1, атрибут a2 имеет значение v2, ..., атрибут an имеет значение vn. Тем самым, при выполнении операции проекции выделяется "вертикальная" вырезка отношения-операнда с естественным уничтожением потенциально возникающих кортежей-дубликатов. Операция соединения отношений Общая операция соединения (называемая также соединением по условию) требует наличия двух операндов - соединяемых отношений и третьего операнда - простого условия. Пусть соединяются отношения A и B. Как и в случае операции ограничения, условие соединения comp имеет вид либо (a comp-op b), либо (a comp-op const), где a и b - имена атрибутов отношений A и B, const - литерально заданная константа, а comp-op - допустимая в данном контексте операция сравнения. Тогда по определению результатом операции сравнения является отношение, получаемое путем выполнения операции ограничения по условию comp прямого произведения отношений A и B. Если внимательно осмыслить это определение, то станет ясно, что в общем случае применение условия соединения существенно уменьшит мощность результата промежуточного прямого произведения отношений-операндов только в том случае, когда условие соединения имеет вид (a comp-op b), где a и b - имена атрибутов разных отношений-операндов. Поэтому на практике обычно считают реальными операциями соединения именно те операции, которые основываются на условии соединения приведенного вида. Хотя операция соединение в нашей интерпретации не является примитивной (поскольку она определяется с использованием прямого произведения и проекции), в силу особой практической важности она включается в базовый набор операций реляционной алгебры. Заметим также, что в практических реализациях соединение обычно не выполняется именно как ограничение прямого произведения. Имеются более эффективные алгоритмы, гарантирующие получение такого же результата. Имеется важный частный случай соединения - эквисоединение и простое, но важное расширение операции эквисоединения - естественное соединение. Операция соединения называется операцией эквисоединения, если условие соединения имеет вид (a = b), где a и b - атрибуты разных операндов соединения. Этот случай важен потому, что (a) он часто встречается на практике, и (b) для него существуют эффективные алгоритмы реализации. Операция естественного соединения применяется к паре отношений A и B, обладающих (возможно составным) общим атрибутом c (т.е. атрибутом с одним и тем же именем и определенным на одном и том же домене). Пусть ab обозначает объединение заголовков отношений A и B. Тогда естественное соединение A и B - это спроектированный на ab результат эквисоединения A и B по A/c и BBC. Если вспомнить введенное нами в конце предыдущей главы определение внешнего ключа отношения, то должно стать понятно, что основной смысл операции естественного соединения - возможность восстановления сложной сущности, декомпозированной по причине требования первой нормальной формы. Операция естественного соединения не включается прямо в состав набора операций реляционной алгебры, но она имеет очень важное практическое значение. Операция деления отношений Эта операция наименее очевидна из всех операций реляционной алгебры и поэтому нуждается в более подробном объяснении. Пусть заданы два отношения - A с заголовком {a1, a2, ..., an, b1, b2, ..., bm} и B с заголовком {b1, b2, ..., bm}. Будем считать, что атрибут bi отношения A и атрибут bi отношения B не только обладают одним и тем же именем, но и определены на одном и том же домене. Назовем множество атрибутов {aj} составным атрибутом a, а множество атрибутов {bj} - составным атрибутом b. После этого будем говорить о реляционном делении бинарного отношения A(a,b) на унарное отношение B(b). Результатом деления A на B является унарное отношение C(a), состоящее из кортежей v таких, что в отношении A имеются кортежи <v, w> такие, что множество значений {w} включает множество значений атрибута b в отношении B. Предположим, что в базе данных сотрудников поддерживаются два отношения: СОТРУДНИКИ ( ИМЯ, ОТД_НОМЕР ) и ИМЕНА ( ИМЯ ), причем унарное отношение ИМЕНА содержит все фамилии, которыми обладают сотрудники организации. Тогда после выполнения операции реляционного деления отношения СОТРУДНИКИ на отношение ИМЕНА будет получено унарное отношение, содержащее номера отделов, сотрудники которых обладают всеми возможными в этой организации именами.
5.4. Ограничения целостности: первичные и внешние ключи. Ограничения базы данных — это правила, которые определяют взаимосвязи между таблицами и могут проверять и изменять данные в базе данных. Реализованы эти правила в виде особых объектов базы данных. Главное преимущество использования ограничений состоит в возможности реализовать проверку данных, а значит, и часть бизнес-логики приложения на уровне базы данных, т. е. централизовать и упростить ее, а значит, сделать разработку приложений баз данных проще и надежнее. Виды ограничений в базе данныхСуществуют следующие виды ограничений в базе данных -первичный ключ - PRIMARY KEY; -уникальный ключ - UNIQUE KEY; -внешний ключ - FOREIGN KEY - может включать автоматические триггеры Ограничения базы данных бывают двух типов - на основе одного поля и на основе нескольких полей таблицы. Первичные ключи применяются для однозначной идентификации записей в таблице. Допустим, мы храним в базе данных список людей. Вполне вероятно, что могут появиться два (или больше) человека с одинаковыми фамилией, именем и отчеством. Как же гарантированно отличить одного человека от другого (конечно, речь идет о том, чтобы отличить одного человека от другого на основании информации, хранящейся в базе данных)В данном случае "человек" представлен одной записью в таблице, поэтому можно задаться более общим вопросом: как отличить одну запись в (любой) таблице от другой записи в этой же таблице. Для этого используются ограничения — первичные ключи. Первичный ключ представляет собой одно или несколько полей в таблице, сочетание которых уникально для каждой записи. Для одной таблицы не существует повторяющихся значений первичного ключа. Уникальные ключинесут аналогичную нагрузку: они также служат для однозначной идентификации записей в таблице. Отличие первичных ключей от уникальных состоит в том, что первичный ключ может быть в таблице только один,а уникальных ключей - несколько. Внешние ключиЭто очень мощное средство для поддержания ссылочной целостности в базе данных, которое позволяет не только контролировать наличие правильных ссылок в базе данных, но и автоматически управлять этими ссылкамиСмысл создания внешнего ключа следующий: если две таблицы служат для хранения взаимосвязанной информации, то необходимо гарантировать, чтобы эта взаимосвязь была всегда корректной. Пример - документ "накладная", содержащий общий заголовок (дата, номер накладной и т. д.) и множество подробных записей (наименование товара, количество и т. д.). Для хранения такого документа в базе данных создается две таблицы: одна -цля хранения заголовков накладных, а вторая - для хранения содержимого накладной - записей о товарах и их количестве. Такие таблицы называются главной и подчиненной или таблицей-мастером и деталь-таблицей. Согласно здравому смыслу невозможно существование содержимого наклад Для реализации такого поведения таблица заголовка соединяется с таблицей подробностей с помощью ограничения внешнего ключа.
5.5. Модель "сущность-связь". Предположим, что проектируется база данных (БД), предназначенная для хранения информации об авторах и о тех книгах, которые они написали. Двумя главными объектами, или сущностями, представляющими в данном случае интерес, являются автор и книга. Эти две сущности соотносятся с помощью связи пишет, что позволяет нам сказать: АВТОР ПИШЕТ КНИГУ Связь пишет, существующая между двумя сущностями автор и книга, может бьйъ графически представлена. На рис. иллюстрируется использование диаграммы ER-экземпляров, показывающей, какую книгу пишет автор. В этом примере каждый автор идентифицируется номером-автора (на), а каждая книга — номером-книги (нк). Сущность определяется как некоторый объект, представляющий интерес. Этот объект должен иметь экземпляры, отличающиеся друг от друга и допускающие однозначную идентификацию. Единственный определяющий признак, который может помочь в нахождении сущностей, состоит в том, что сущность — это, как I правило, существительное. Примерами сущностей могут служить машины, банковские счета, колледжи, служащие и контракты. На рис сущностями являются книга и автор, в то время как отдельные экземпляры каждой сущности идентифицируются с помощью номера-книги и номера-автора соответственно. Класс принадлежности сущности характеризует обязательность включения каждого экземпляра сущности в связь. Связь представляет собой соединение между двумя или более экземплярами сущностей. При поиске связей в основном следует полагаться на то обстоятельство, что связь обычно выражается глаголом. Типичные примеры связей между двумя сущностями: служащие работают в отделах, студенты изучают предметы, рабочие обслуживают механизмы.Тесно связано с предыдущими третье важное понятие,— атрибут. Атрибут есть свойство сущности. Например, атрибутами, которые могут быть свойствами сущности книга, являются: номер книги, количество страниц, тираж, цена и т. д.На диаграмме ER-экземпляров (рис. 1.8) названия всех сущностей помещены над экземплярами этих сущностей, и в них использованы прописные буквы, и то время как каждый экземпляр сущности идентифицируется значением атирибута. Так книга является сущностью, а кз — конкретным экземпляром cущности. Связь также является именованной, и ее название, составленное из прописных букв, размещается над экземплярами этой связи. При этом экземпляр каждой отдельной связи задается линией между теми двумя экземпляр сущностей, которые эта связь соединяет. Например, экземпляр i ш между А4 и кз означает, что автор с номером автора равным А4, пишет i у с номером книги, равным кз. В некоторых случаях для идентификации каждого экземпляра сущности кет понадобиться набор атрибутов. Атрибут, или набор атрибутов, используемый для идентификации экземпляра сущности, называется ключом. Каждый экземпляр связи однозначно определяется набором ключей сущностей, соединяемых этой связью
|