В случае реляционных баз данных трудно представить какие-либо общие рецепты по части физического проектирования. Здесь слишком много зависит от используемой СУБД. Поэтому ограничимся вопросами рассмотрения организации СУБД и ее архитектуры и более подробно вопросами логического проектирования реляционных баз данных, которые существенны при использовании любой реляционной СУБД.

Более того, мы не будем касаться очень важного аспекта проектирования - определения ограничений целостности (за исключением ограничения первичного ключа). Дело в том, что при использовании СУБД с развитыми механизмами ограничений целостности (например, SQL-ориентированных систем) трудно предложить какой-либо общий подход к определению ограничений целостности. Эти ограничения могут иметь очень общий вид, и их формулировка пока относится скорее к области искусства, чем инженерного мастерства. Самое большее, что предлагается по этому поводу в литературе, это автоматическая проверка непротиворечивости набора ограничений целостности.

Так что будем считать, что проблема проектирования реляционной базы данных состоит в обоснованном принятии решений о том:

·  из каких отношений должна состоять БД;

·  какие атрибуты должны быть у этих отношений.

Проект базы данных надо начинать с анализа предметной области и выявления требований к ней отдельных пользователей (сотрудников организации, для которых создается база данных). Подробнее этот процесс будет рассмотрен ниже, а здесь отметим, что проектирование обычно поручается человеку (группе лиц) – администратору базы данных (АБД). Им может быть как специально выделенный сотрудник организации, так и будущий пользователь базы данных, достаточно хорошо знакомый с машинной обработкой данных.

НЕ нашли? Не то? Что вы ищете?

Объединяя частные представления о содержимом базы данных, полученные в результате опроса пользователей, и свои представления о данных, которые могут потребоваться в будущих приложениях, АБД сначала создает обобщенное неформальное описание создаваемой базы данных.

Типовая организация современной СУБД

Организация типичной СУБД и состав ее компонентов соответствует рассмотренному набору функций. Напомним, что мы выделили следующие основные функции СУБД:

    управление данными во внешней памяти; управление буферами оперативной памяти; управление транзакциями; журнализация и восстановление БД после сбоев; поддержание языков БД.

Логически в современной реляционной СУБД можно выделить:

-  внутреннюю часть - ядро СУБД (часто его называют Data Base Engine),

-  компилятор языка БД (обычно SQL),

-  подсистему поддержки времени выполнения,

-  набор утилит.

В некоторых системах эти части выделяются явно, в других - нет, но логически такое разделение можно провести во всех СУБД.

Ядро СУБД отвечает за управление данными во внешней памяти, управление буферами оперативной памяти, управление транзакциями и журнализацию.

Соответственно, можно выделить такие компоненты ядра (по крайней мере, логически), как менеджер данных, менеджер буферов, менеджер транзакций и менеджер журнала. Функции этих компонентов взаимосвязаны, и для обеспечения корректной работы СУБД все эти компоненты должны взаимодействовать по тщательно продуманным и проверенным протоколам.

Ядро СУБД обладает собственным интерфейсом, не доступным пользователям напрямую и используемым в программах, производимых компилятором SQL и утилитах БД.

Ядро СУБД является основной резидентной частью СУБД. При использовании архитектуры "клиент-сервер" ядро является основной составляющей серверной части системы.

Основной функцией компилятора языка БД является компиляция операторов языка БД в некоторую выполняемую программу. Основной проблемой реляционных СУБД является то, что языки этих систем (а это, как правило, SQL) являются непроцедурными, т. е. в операторе такого языка специфицируется некоторое действие над БД, но эта спецификация не является процедурой, а лишь описывает в некоторой форме условия совершения желаемого действия. Поэтому компилятор должен решить, каким образом выполнять оператор языка прежде, чем произвести программу. Применяются достаточно сложные методы оптимизации операторов, результатом компиляции является выполняемая программа, представляемая в некоторых системах в машинных кодах, (или в выполняемом внутреннем машинно-независимом коде).

В отдельные утилиты БД обычно выделяют такие процедуры, которые слишком накладно выполнять с использованием языка БД, например, загрузка и выгрузка БД, сбор статистики, глобальная проверка целостности БД и т. д. Утилиты программируются с использованием интерфейса ядра СУБД.

СУБД должна предоставлять доступ к данным любым пользователям, включая и тех, которые практически не имеют и (или) не хотят иметь представления о:

    физическом размещении в памяти данных и их описаний; механизмах поиска запрашиваемых данных; проблемах, возникающих при одновременном запросе одних и тех же данных многими пользователями (прикладными программами); способах обеспечения защиты данных от некорректных обновлений и (или) несанкционированного доступа; поддержании баз данных в актуальном состоянии и множестве других функций СУБД.

При выполнении основных из этих функций СУБД должна использовать различные описания данных.

2.1.9. Цель проектирования. Проектирование реляционной базы данных с использованием нормализации.

Отдельные БД могут объединять все данные, необходимые для решения одной или нескольких прикладных задач, или данные, относящиеся к какой-либо предметной области (например, финансам, студентам, преподавателям, кулинарии и т. п.). Первые обычно называют прикладными БД, а вторые – предметными БД (соотносящимся с предметами организации, а не с ее информационными приложениями).Первые можно сравнить с базами материально-технического снабжения или отдыха, а вторые – с овощными и обувными базами.)

Предметные БД позволяют обеспечить поддержку любых текущих и будущих приложений, поскольку набор их элементов данных включает в себя наборы элементов данных прикладных БД. Вследствие этого предметные БД создают основу для обработки неформализованных, изменяющихся и неизвестных запросов и приложений (приложений, для которых невозможно заранее определить требования к данным). Такая гибкость и приспосабливаемость позволяет создавать на основе предметных БД достаточно стабильные информационные системы, т. е. системы, в которых большинство изменений можно осуществить без вынужденного переписывания старых приложений.

Основывая проектирование БД на текущих приложениях, можно существенно ускорить создание высокоэффективной информационной системы, т. е. системы, структура которой учитывает наиболее часто встречающиеся пути доступа к данным. Поэтому прикладное проектирование до сих пор привлекает некоторых разработчиков. Однако по мере роста числа приложений таких информационных систем быстро увеличивается число прикладных БД, резко возрастает уровень дублирования данных и повышается стоимость их ведения.

Желание достичь и гибкости, и эффективности привело к формированию методологии проектирования, использующей как предметный, так и прикладной подходы.

В общем случае предметный подход используется для построения первоначальной информационной структуры, а прикладной – для ее совершенствования с целью повышения эффективности обработки данных.

При проектировании информационной системы необходимо провести анализ целей этой системы и выявить требования к ней отдельных пользователей.

Сбор данных начинается с изучения сущностей организации и процессов, использующих эти сущности. Сущности группируются по «сходству» (частоте их использования для выполнения тех или иных действий) и по количеству ассоциативных связей между ними (самолет – пассажир, преподаватель – дисциплина, студент – сессия и т. д.).

Сущности или группы сущностей, обладающие наибольшим сходством и (или) с наибольшей частотой ассоциативных связей объединяются в предметные БД.

Основная цель проектирования БД – это сокращение избыточности хранимых данных, а следовательно, экономия объема используемой памяти, уменьшение затрат на многократные операции обновления избыточных копий и устранение возможности возникновения противоречий из-за хранения в разных местах сведений об одном и том же объекте. Так называемый, «чистый» проект БД – «каждый факт в одном месте» можно создать, используя методологию нормализации отношений. И хотя нормализация должна использоваться на завершающей проверочной стадии проектирования БД, начнем обсуждение вопросов проектирования с рассмотрения причин, которые заставили Кодда создать основы теории нормализации

2.1.10. Нормальные формы.

Выше было дано определение первой нормальной формы (1НФ). Дадим более строгое определение, а также определения других нормальных форм.

Таблица находится в первой нормальной форме (1НФ) тогда и только тогда, когда ни одна из ее строк не содержит в любом своем поле более одного значения и ни одно из ее ключевых полей не пусто.

Таблица находится во второй нормальной форме (2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом.

Рассмотрим следующий пример схемы отношения:

СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ

(СОТР_НОМ, СОТР_ЗАРП, ОТД_НОМ, ПРО_НОМЕР, СОТР_ЗАДАН)

Первичный ключ:

СОТР_НОМ, ПРО_НОМ

Функциональные зависимости:

СОТР_НОМ ( СОТР_ЗАРП

СОТР_НОМ ( ОТД_НОМ

ОТД_НОМ ( СОТР_ЗАРП

СОТР_НОМ, ПРО_НОМ ( СОТР_ЗАДАН

Хотя первичным ключом является составной атрибут СОТР_НОМ, ПРО_НОМ, атрибуты СОТР_ЗАРП и ОТД_НОМ функционально зависят от части первичного ключа, атрибута СОТР_НОМ. В результате нельзя вставить в отношение СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ кортеж, описывающий сотрудника, который еще не выполняет никакого проекта (первичный ключ не может содержать неопределенное значение).

При удалении кортежа мы не только разрушаем связь данного сотрудника с данным проектом, но утрачиваем информацию о том, что он работает в некотором отделе. При переводе сотрудника в другой отдел мы будем вынуждены модифицировать все кортежи, описывающие этого сотрудника, или получим несогласованный результат. Такие неприятные явления называются аномалиями схемы отношения. Они устраняются путем нормализации.

Вторая нормальная форма (в этом определении предполагается, что единственным ключом отношения является первичный ключ). Отношение R находится во второй нормальной форме (2НФ) в том и только в том случае, когда находится в 1НФ, и каждый неключевой[2] атрибут полностью зависит от первичного ключа.

Можно произвести следующую декомпозицию отношения СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ в два отношения СОТРУДНИКИ-ОТДЕЛЫ и СОТРУДНИКИ-ПРОЕКТЫ:

СОТРУДНИКИ-ОТДЕЛЫ (СОТР_НОМ, СОТР_ЗАРП, ОТД_НОМ)

Первичный ключ:

СОТР_НОМ

Функциональные зависимости:

СОТР_НОМ ( СОТР_ЗАРП

СОТР_НОМ  ОТД_НОМ

ОТД_НОМ  СОТР_ЗАРП

СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР, ПРО_НОМЕР, СОТР_ЗАДАН)

Первичный ключ:

СОТР_НОМ, ПРО_НОМ

Функциональные зависимости:

СОТР_НОМ, ПРО_НОМ ( СОТР_ЗАДАН

Каждое из этих двух отношений находится в 2НФ, и в них устранены отмеченные выше аномалии.

Если допустить наличие нескольких ключей, то определение второй нормальной формы будет иметь следующий вид:

Отношение R находится во второй нормальной форме (2НФ) в том и только в том случае, когда оно находится в 1НФ, и каждый неключевой атрибут полностью зависит от каждого ключа R.

Отношения с несколькими ключами слишком громоздки и относятся к ситуациям, редко встречающимся на практике.

Таблица находится в третьей нормальной форме (3НФ), если она удовлетворяет определению 2НФ и не одно из ее неключевых полей не зависит функционально от любого другого неключевого поля.

Рассмотрим отношение СОТРУДНИКИ-ОТДЕЛЫ, находящееся в 2НФ. Функциональная зависимость СОТР_НОМ  СОТР_ЗАРП является следствием функциональных зависимостей СОТР_НОМ  ОТД_НОМ и ОТД_НОМ  СОТР_ЗАРП. Другими словами, заработная плата сотрудника является характеристикой не сотрудника, а отдела, в котором он работает (это не очень естественное предположение, но достаточное для примера).

В результате нельзя занести в базу данных информацию, характеризующую заработную плату отдела, до тех пор, пока в этом отделе не появится хотя бы один сотрудник (первичный ключ не может содержать неопределенное значение). При удалении кортежа, описывающего последнего сотрудника данного отдела, мы лишимся информации о заработной плате отдела. Чтобы согласованным образом изменить заработную плату отдела, мы будем вынуждены предварительно найти все кортежи, описывающие сотрудников этого отдела, т. е. в отношении СОТРУДНИКИ-ОТДЕЛЫ по-прежнему существуют аномалии. Их можно устранить путем дальнейшей нормализации.

Третья нормальная форма (определение дается в предположении существования единственного ключа). Отношение R находится в третьей нормальной форме (3НФ) в том и только в том случае, если находится в 2НФ и ни один из неключевых атрибутов в R атрибут нетранзитивно зависит от первичного ключа.

Произведем декомпозицию отношения СОТРУДНИКИ-ОТДЕЛЫ в два отношения СОТРУДНИКИ и ОТДЕЛЫ:

СОТРУДНИКИ (СОТР_НОМ, ОТД_НОМ)

Первичный ключ:

СОТР_НОМ

Функциональные зависимости:

СОТР_НОМ  ОТД_НОМ

ОТДЕЛЫ (ОТД_НОМ, СОТР_ЗАРП)

Первичный ключ:

ОТД_НОМ

Функциональные зависимости:

ОТД_НОМ  СОТР_ЗАРП

Каждое из этих двух отношений находится в 3NF и свободно от отмеченных аномалий.

Если отказаться ограничения о единственном ключе, то определение 3NF примет следующую вид:

Отношение R находится в третьей нормальной форме (3НФ) в том и только в том случае, если оно находится в 1НФ, и каждый неключевой атрибут не является транзитивно зависимым от какого-либо ключа R.

На практике третья нормальная форма схем отношений достаточна в большинстве случаев, и приведением к третьей нормальной форме процесс проектирования реляционной базы данных обычно заканчивается. Однако иногда полезно продолжить процесс нормализации.

Таблица находится в нормальной форме Бойса-Кодда (НФБК), если и только если любая функциональная зависимость между его полями сводится к полной функциональной зависимости от возможного ключа.

Рассмотрим пример схемы отношения:

СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМ, СОТР_ИМЯ, ПРО_НОМ, СОТР_ЗАДАН)

Возможные ключи:

СОТР_НОМ, ПРО_НОМ

СОТР_ИМЯ, ПРО_НОМ

Функциональные зависимости:

СОТР_НОМЕР  CОТР_ИМЯ

СОТР_НОМ  ПРО_НОМ

СОТР_ИМЯ  CОТР_НОМ

СОТР_ИМЯ  ПРО_НОМ

СОТР_НОМ, ПРО_НОМ CОТР_ЗАДАН

СОТР_ИМЯ, ПРО_НОМ CОТР_ЗАДАН

В этом примере мы предполагаем, что личность сотрудника полностью определяется как его номером, так и именем (это не очень жизненное предположение, но достаточное для примера).

В соответствии с определением отношение СОТРУДНИКИ-ПРОЕКТЫ находится в 3НФ. Однако тот факт, что имеются функциональные зависимости атрибутов отношения от атрибута, являющегося частью первичного ключа, приводит к аномалиям. Например, для того, чтобы изменить имя сотрудника с данным номером согласованным образом, потребуется модифицировать все кортежи, включающие его номер.

Нормальная форма Бойса-Кодда .Отношение R находится в нормальной форме Бойса-Кодда (НФБК) в том и только в том случае, если каждый детерминант[3] является возможным ключом.

Очевидно, что это требование не выполнено для отношения СОТРУДНИКИ-ПРОЕКТЫ. Необходимо произвести его декомпозицию к отношениям СОТРУДНИКИ и СОТРУДНИКИ-ПРОЕКТЫ.

СОТРУДНИКИ (СОТР_НОМ, СОТР_ИМЯ)

Возможные ключи:

СОТР_НОМ

СОТР_ИМЯ

Функциональные зависимости:

СОТР_НОМ  CОТР_ИМЯ

СОТР_ИМЯ  СОТР_НОМ

СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМ, ПРО_НОМ, СОТР_ЗАДАН)

Возможный ключ:

СОТР_НОМ, ПРО_НОМ

Функциональные зависимости:

СОТР_НОМ, ПРО_НОМ  CОТР_ЗАДАН

Возможна альтернативная декомпозиция, если выбрать за основу СОТР_ИМЯ. В обоих случаях получаемые отношения СОТРУДНИКИ и СОТРУДНИКИ-ПРОЕКТЫ находятся в НФБК, и им не свойственны отмеченные аномалии.

В следующих нормальных формах (4НФ и 5НФ) учитываются не только функциональные, но и многозначные зависимости между полями таблицы.

Для их описания введено понятие полной декомпозиции таблицы.

Полной декомпозицией таблицы называют такую совокупность произвольного числа ее проекций, соединение которых полностью совпадает с содержимым таблицы.

Теперь можно дать определения высших нормальных форм.

Рассмотрим пример следующей схемы отношения:

ПРОЕКТЫ (ПРО_НОМ, ПРО_СОТР, ПРО_ЗАДАН)

Отношение ПРОЕКТЫ содержит номера проектов, для каждого проекта список сотрудников, которые могут выполнять проект, и список заданий, предусматриваемых проектом.

Сотрудники могут участвовать в нескольких проектах, и разные проекты могут включать одинаковые задания.

Каждый кортеж отношения связывает некоторый проект с сотрудником, участвующим в этом проекте, и заданием, который сотрудник выполняет в рамках данного проекта (предполагаем, что любой сотрудник, участвующий в проекте, выполняет все задания, предусмотренные этим проектом). По причине сформулированных выше условий единственным возможным ключом отношения является составной атрибут ПРО_НОМ, ПРО_СОТР, ПРО_ЗАДАН, и нет никаких других детерминантов. Следовательно, отношение ПРОЕКТЫ находится в НФБК. Но при этом оно обладает недостатками: если, например, некоторый сотрудник присоединяется к данному проекту, необходимо вставить в отношение ПРОЕКТЫ столько кортежей, сколько заданий в нем предусмотрено.

В отношении ПРОЕКТЫ существуют следующие две многозначные зависимости:

ПРО_НОМ   ПРО_СОТР

ПРО_НОМ   ПРО_ЗАДАН

Легко показать, что в общем случае в отношении R (A, B, C) существует многозначная зависимость R.A   R.B в том и только в том случае, когда существует многозначная зависимость R.A   R.C.

Четвертая нормальная форма .Отношение R находится в четвертой нормальной форме (4НФ) в том и только в том случае, если в случае существования многозначной зависимости A   B все остальные атрибуты R функционально зависят от A.

В нашем примере можно произвести декомпозицию отношения ПРОЕКТЫ в два отношения ПРОЕКТЫ-СОТРУДНИКИ и ПРОЕКТЫ-ЗАДАНИЯ:

ПРОЕКТЫ-СОТРУДНИКИ (ПРО_НОМ, ПРО_СОТР)

ПРОЕКТЫ-ЗАДАНИЯ (ПРО_НОМ, ПРО_ЗАДАН)

Оба эти отношения находятся в 4НФ и свободны от отмеченных аномалий.

Во всех рассмотренных до этого момента нормализациях производилась декомпозиция одного отношения в два. Иногда это сделать не удается, но возможна декомпозиция в большее число отношений, каждое из которых обладает лучшими свойствами.

Рассмотрим, отношение

СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ (СОТР_НОМ, ОТД_НОМ, ПРО_НОМ)

Предположим, что один и тот же сотрудник может работать в нескольких отделах и работать в каждом отделе над несколькими проектами. Первичным ключом этого отношения является полная совокупность его атрибутов, отсутствуют функциональные и многозначные зависимости. Поэтому отношение находится в 4НФ. Однако в нем могут существовать аномалии, которые можно устранить путем декомпозиции в три отношения.

Введем понятие зависимость соединения. Отношение R (X, Y, ..., Z) удовлетворяет зависимости соединения * (X, Y, ..., Z) в том и только в том случае, когда R восстанавливается без потерь путем соединения своих проекций на X, Y, ..., Z.

Пятая нормальная форма. Отношение R находится в пятой нормальной форме в том и только в том случае, когда любая зависимость соединения в R следует из существования некоторого возможного ключа в R. Другими словами, таблица находится в пятой нормальной форме (5НФ) тогда и только тогда, когда в каждой ее полной декомпозиции все проекции содержат возможный ключ. Таблица, не имеющая ни одной полной декомпозиции, также находится в 5НФ.

Введем следующие имена составных атрибутов:

СО = {СОТР_НОМ, ОТД_НОМ}

СП = {СОТР_НОМ, ПРО_НОМ}

ОП = {ОТД_НОМ, ПРО_НОМ}

Предположим, что в отношении СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ существует зависимость соединения:

* (СО, СП, ОП)

На примерах легко показать, что при вставках и удалениях кортежей могут возникнуть проблемы. Их можно устранить путем декомпозиции исходного отношения в три новых отношения:

СОТРУДНИКИ-ОТДЕЛЫ (СОТР_НОМ, ОТД_НОМ)

СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМ, ПРО_НОМ)

ОТДЕЛЫ-ПРОЕКТЫ (ОТД_НОМ, ПРО_НОМ)

Пятая нормальная форма - это последняя нормальная форма, которую можно получить путем декомпозиции. Ее условия достаточно нетривиальны, и на практике 5NF не используется.

Заметим, что зависимость соединения является обобщением как многозначной зависимости, так и функциональной зависимости.

Четвертая нормальная форма (4НФ) является частным случаем 5НФ, когда полная декомпозиция должна быть соединением ровно двух проекций. Весьма не просто подобрать реальную таблицу, которая находилась бы в 4НФ, но не была бы в 5НФ.

2.1.11. Процедура нормализации.

Как уже отмечалось, нормализация – это разбиение таблицы на несколько, обладающих лучшими свойствами при обновлении, включении и удалении данных.

Можно дать и другое определение: нормализация – это процесс последовательной замены таблицы ее полными декомпозициями до тех пор, пока все они не будут находиться в 5НФ. На практике же достаточно привести таблицы к НФБК и с большой гарантией считать, что они находятся в 5НФ. Разумеется, этот факт нуждается в проверке, однако пока не существует эффективного алгоритма такой проверки. Поэтому остановимся лишь на процедуре приведения таблиц к НФБК.

Эта процедура основывается на том, что единственными функциональными зависимостями в любой таблице должны быть зависимости вида K  F, где K – первичный ключ, а F – некоторое другое поле. Это следует из определения первичного ключа таблицы, в соответствии с которым K F всегда имеет место для всех полей данной таблицы. «Один факт в одном месте» говорит о том, что не имеют силы никакие другие функциональные зависимости. Цель нормализации состоит именно в том, чтобы избавиться от всех этих «других» функциональных зависимостей, т. е. таких, которые имеют иной вид, чем K  F.

Следует рассмотреть два случая:

1. Таблица имеет составной первичный ключ вида, скажем, (К1,К2), и включает также поле F, которое функционально зависит от части этого ключа, например, от К2, но не от полного ключа. В этом случае рекомендуется сформировать другую таблицу, содержащую К2 и F (первичный ключ – К2), и удалить F из первоначальной таблицы:

Заменить T(K1,K2,F), первичный ключ (К1,К2), К2  F

на T1(K1,K2), первичный ключ (К1,К2),

и T2(K2,F), первичный ключ К2.

2. Таблица имеет первичный (возможный) ключ К и не являющееся возможным ключом поле F1, которое, конечно, функционально зависит от К, и другое неключевое поле F2, которое функционально зависит от F1. Решение здесь, по существу, то же самое – формируется другая таблица, содержащая F1 и F2, с первичным ключом F1, и F2 удаляется из первоначальной таблицы:

Заменить T(K, F1,F2), первичный ключ К, F1  F2

на T1(K, F1), первичный ключ К,

и T2(F1,F2), первичный ключ F1.

Для любой заданной таблицы, повторяя применение двух рассмотренных правил, почти во всех практических ситуациях можно получить в конечном счете множество таблиц, которые находятся в «окончательной» нормальной форме и, таким образом, не содержат каких-либо функциональных зависимостей вида, отличного от K  F.

Для выполнения этих операций необходимо первоначально иметь в качестве входных данных какие-либо большие таблицы (например, универсальные отношения). Но нормализация ничего не говорит о том, как получить эти большие таблицы. В следующем разделе будет рассмотрена процедура получения таких исходных таблиц.

Рассмотренные правила для полной нормализации некоторого универсального отношения предполагают выполнение следующих шагов:

Шаг 1. Определение первичного ключа таблицы.

Шаг 2. Выявление полей, функционально зависящих от ключа (от части составного ключа).

Шаг 3. Формирование новых таблиц.

Шаг 4. Корректировка исходной таблицы.

Тема 2.2 Microsoft Access

Назначение любой системы управления базами данных (СУБД) - создание, ведение и обработка баз данных. Как в текстовом редак­торе можно подготовить много разных документов, так в СУБД Access можно создать много разных баз данных.

Система управления базами данных предоставляет значитель­ные возможности по работе с хранящимися данными, их обработке и совместному использованию. Можно выбирать любые поля, фор­маты полей, сортировать данные, вычислять итоговые значения. Можно отбирать интересующие данные по какому-либо признаку, менять их, удалять, копировать в другие таблицы.

Можно производить обмен данными между компонентами СУБД Access и другими приложениями Windows. Это могут быть рисунки, диаграммы и т. д. Поддерживается экспорт и импорт данных из тек­стовых файлов и электронных таблиц.

При коллективном использовании СУБД Access дает возмож­ность защитить информацию так, что разные пользователи имеют разные права по просмотру или изменению информации: при этом предусмотрены средства обеспечения целостности данных.

Каждая база данных хранится на диске в виде файла с расши­рением mdb. При запуске СУБД Access появляется меню для рабо­ты с компонентами базы данных.

Ниже описываются основные компоненты базы даны:

Таблицы. Основная информация хранится в таблицах. Таблица -совокупность записей. Столбцы в таблице называются полями, а стро­ки - записями. Количество записей в таблице ограничивается емко­стью жесткого диска. Допустимое количество полей - 255. Таблиц в базе данных может быть несколько. Сведения по разным вопросам следует хранить в разных таблицах. Для работы таблицу необходи­мо открыть. Перед окончанием работы ее следует закрыть, предва­рительно сохранив все изменения, произведенные в ходе работы.

С таблицами можно работать в двух режимах - таблицы и конструктора. Переход из режима таблицы в режим конструк­тора таблицы и обратно производится щелчком по кнопке Вид, расположенной на панели инструментов. Ключевое поле - поле с уникальными записями. Таблицы связываются (дается указание на соответствие записей) по ключам; ключ может состоять из од­ного или из нескольких полей.

Все объекты базы данных можно импортировать, т. е. копиро­вать из других баз данных, а не вводить заново. Если таблицы были связаны в старой базе данных, то они таким же образом будут связаны и в новой.

В режиме таблицы обычно просматривают, добавляют и из­меняют данные. Можно также добавлять или удалять столбцы таблицы, изменять внешний вид таблицы (ширину столбцов, их по­рядок, вид и цвет шрифта и т. д). Можно проверить орфографию и напечатать табличные данные, фильтровать и сортировать запи­си. В режиме конструктора таблицы можно создать новую таб­лицу или изменить поля старой.

Формы. Форма представляет собой специальный формат эк­рана, используемый для разных целей, чаще всего для ввода дан­ных в таблицу и просмотра одной записи. Формы позволяют вво­дить данные, корректировать их, добавлять и удалять записи. Можно создавать формы для работы, одновременно с нескольки­ми взаимосвязанными таблицами. Форма, использующая данные из нескольких таблиц, должна быть основана на запросе, вклю­чающем данные из этих таблиц.

С применением форм можно представлять записи в удобном для пользователя виде - в виде привычных документов: бланков, экзаменационных ведомостей и т. д. Формы ввода-вывода позво­ляют вводить данные в базу, просматривать их, изменять значе­ния полей, добавлять и удалять записи.

Все элементы, добавляемые в форму, - поля, надписи, спис­ки, переключатели, кнопки, линии - являются элементами уп­равления. Способ создания элемента управления зависит от того, какой элемент создается: присоединенный, свободный или вычисляемый.

Запросы. Запрос - это инструмент для анализа, выбора и изменения данных. С помощью запросов можно просматривать, анализировать и изменять данные из нескольких таблиц. Запро­сы используются также в качестве источника данных для форми отчетов.

С помощью Access могут быть созданы несколько видов зап­росов. Запрос на выборку выбирает данные из разных таблиц и других готовых запросов. Запрос-изменение изменяет или пе­ремещает данные; к этому типу относятся Запрос на добавле­ние, Запрос на удаление и Запрос на обновление. Запрос на создание таблицы сохраняет результаты выборки в отдельной таблице. Перекрестные запросы предназначены для группиро­вания данных и представления их в компактном виде. Запрос можно создать самостоятельно или воспользоваться .Мастером запросов.

Элементы выражения в запросах могут быть связаны операторами:

арифметическими: *, +, -, /, ^

сравнения: <, <=, >, >=, =, <>;

логическими: And (И), Not (Нет), Or (Или);

Like - для использования логики замены в выражениях,

In - для определения, содержится ли элемент данных в списке зна­чений;

Between...And - для выбора значений из определенного интервала.

Между условиями в разных полях одного столбца выполняется логическая операция ИЛИ (Or). Она истинна, когда истинно хотя бы одно из входящих в список условий.

Между условиями в разных полях одной строки выполняется ло­гическая операция И (And). Она истинна, когда истинны все входя­щие в список условия.

Отчеты. Отчет - это гибкое и эффективное средство для ор­ганизации данных при выводе на печать и вместе с тем это, спо­соб вывода данных из базы на печать в том виде, в котором тре­буется пользователю, например, в виде справок об обучении, эк­заменационных ведомостей, таблиц, объединенных каким-либо признаком, и др. С помощью отчета можно расположить инфор­мацию на листе в удобном для пользователя виде с различным оформлением. Можно разработать отчет самостоятельно с помо­щью Конструктора, использовать готовые варианты оформления (автоотчеты) или создать отчет с помощью Мастера.

Макросы и модули. Макросом называют набор из одной или более макрокоманд, выполняющих определенные опера­ции, такие, как открытие форм или печать отчетов. Макросы могут быть полезны для автоматизации часто выполняемых задач. Например, при нажатии пользователем кнопки можно запустить макрос, который распечатает отчет. Модуль - это программа на языке Access Basic.

Тема 2.3. Введение в SQL (Structured Query Language)

Реляционная база данных представляется пользователю как совокупность таблиц и ничего кроме таблиц. На рисунке приведен пример реляционной базы данных ПАНСИОН. Этот простой пример используется для иллюстрации большинства вопросов, рассматриваемых в нашей книге. Поэтому советуем потратить немного времени, чтобы хорошо с ним разобраться*.

Кладовая пансионата периодически пополняется продуктами из списка, часть которого показана в таблице Продукты. Каждый продукт имеет кроме названия (столбец Продукт) уникальный номер этого продукта (столбец ПР). Химический состав продуктов приведен для 1 кг их съедобной части: основные пищевые вещества (белки, жиры и углеводы) даны в граммах, а минеральные вещества (калий, кальций, натрий) и витамины (B2, PP, C) - в миллиграммах.

В таблице Блюда представлены уникальные номера блюд (столбец БЛ), их названия, коды видов (см. таблицу Вид_блюд), основной продукт (столбец Основа), масса порции в граммах (столбец Выход) и приведенная стоимость в копейках приготовления одной порции (столбец Труд).

В таблице Рецепты приведена технология приготовления блюд. Их выделение в отдельную таблицу произведено потому, что одно и то же блюдо может иметь несколько разных рецептов.

Таблица Состав связывает между собой таблицы Блюда и Продукты, оговаривая, какая масса (в граммах) того или иного продукта (столбец Вес) должна входить в состав одной порции блюда. Так, порция блюда с номером 12 (Суп молочный) должна состоять из 350 г продукта с номером 7 (Молоко), 35 г продукта с номером 13 (Рис), 5 г продукта с номером 3 (Масло) и 5 г продукта с номером 16 (Сахар).

Шеф-повар ежедневно получает от завхоза сведения о количестве в килограммах имеющихся продуктов и их текущей стоимости (столбцы К_во и Стоимость таблицы Наличие). Используя эти сведения он определяет по таблице Состав перечень тех блюд, которые можно приготовить из этих продуктов, а также калорийность и стоимость таких блюд. При этом стоимость блюда складывается из стоимости и массы продуктов, необходимых для приготовления одной его порции, а также из трудозатрат на ее приготовление (см. таблицу Блюда). Калорийность же определяется по массе и калорийности каждого из продуктов блюда. (Для получения значения калорийности продукта исходят из того, что при окислении 1 г углеводов или белков в организме освобождается в среднем 4.1 ккал, а при окислении 1 г жиров - 9.3 ккал.)

Блюда

Рецепты

БЛ

Блюдо

В

Основа

Выход

Труд

1

Салат летний

З

Овощи

200.

3

2

Салат мясной

З

Мясо

200.

4

3

Салат витаминный

З

Овощи

200.

4

4

Салат рыбный

З

Рыба

200.

4

5

Паштет из рыбы

З

Рыба

120.

5

6

Мясо с гарниром

З

Мясо

250.

3

7

Сметана

З

Молоко

140.

1

8

Творог

З

Молоко

140.

2

9

Суп харчо

С

Мясо

500.

5

10

Суп-пюре из рыбы

С

Рыба

500.

6

11

Уха из судака

С

Рыба

500.

5

12

Суп молочный

С

Молоко

500.

3

13

Бастурма

Г

Мясо

300.

5

14

Бефстроганов

Г

Мясо

210.

6

15

Судак по-польски

Г

Рыба

160.

5

16

Драчена

Г

Яйца

180.

4

17

Морковь с рисом

Г

Овощи

260.

3

18

Сырники

Г

Молоко

220.

4

19

Омлет с луком

Г

Яйца

200.

5

20

Каша рисовая

Г

Крупа

210.

4

21

Пудинг рисовый

Г

Крупа

160.

6

22

Вареники ленивые

Г

Молоко

220.

4

23

Помидоры с луком

Г

Овощи

260.

4

24

Суфле из творога

Г

Молоко

280.

6

25

Рулет с яблоками

Д

Фрукты

200.

5

26

Яблоки печеные

Д

Фрукты

160.

3

27

Суфле яблочное

Д

Фрукты

220.

6

28

Крем творожный

Д

Молоко

160.

4

29

"Утро"

Н

Фрукты

200.

5

30

Компот

Н

Фрукты

200.

2

31

Молочный напиток

Н

Молоко

200.

2

32

Кофе черный

Н

Кофе

200.

1

33

Кофе на молоке

Н

Кофе

200.

2

БЛ

Рецепт

1

Помидоры...

2

Вареное...

3

Зелень ме...

4

Вареные р...

5

Филе суда...

6

Мясо варе...

7

Сметану п...

8

Протертый..

9

Грудинку...

10

Филе суда...

11

Судак очи...

12

Промытый...

13

Мясо наре...

14

Говядину...

15

Подготовл...

16

Сырые яйц...

17

Нарезать...

18

В протерт...

19

К свежим...

20

Рис свари...

21

Готовую р...

22

В протерт...

23

Спассеров...

24

В протерт...

25

Очистить...

26

Не прорез...

27

Запеченны...

28

Яйца разм...

29

Очищенную..

30

Яблоки оч...

31

Яблоки на...

32

Кофеварку..

33

Сварить ч...

Поставщики

ПС

Название

Статус

Город

Адрес

Телефон

1

СЫТНЫЙ

рынок

Ленинград

Сытнинская, 3

2329916

2

ПОРТОС

кооператив

Резекне

Садовая, 27

317664

3

ШУШАРЫ

совхоз

Пушкин

Новая, 17

4705038

4

ТУЛЬСКИЙ

универсам

Ленинград

Тульская, 3

2710837

5

УРОЖАЙ

коопторг

Луга

Песчаная, 19

789000

6

ЛЕТО

агрофирма

Ленинград

Пулковское ш.,8

2939729

7

ОГУРЕЧИК

ферма

Паневежис

Укмерге, 15

127331

8

КОРЮШКА

кооператив

Йыхви

Нарвское ш., 64

432123

Состав

Поставки

БЛ

ПР

Вес

БЛ

ПР

Вес

БЛ

ПР

Вес

БЛ

ПР

Вес

1

11

100

9

11

25

16

7

35

24

8

80

1

15

80

9

13

35

16

6

15

24

7

100

1

12

5

9

12

15

16

14

9

24

5

40

1

4

15

9

3

15

16

3

5

24

6

30

2

1

65

10

2

70

17

9

150

24

16

20

2

9

40

10

7

250

17

7

50

24

3

10

2

11

35

10

3

20

17

13

25

24

14

10

2

12

20

10

14

15

17

3

20

25

15

120

2

5

20

10

12

5

17

12

10

25

16

35

2

4

20

11

2

100

17

14

5

25

14

30

3

11

55

11

9

20

18

8

140

25

8

20

3

15

55

11

10

20

18

6

30

25

3

20

3

6

50

11

3

5

18

14

15

26

15

150

3

12

20

11

12

2

18

5

10

26

16

20

3

10

15

12

7

350

18

16

15

26

3

2

3

16

5

12

13

35

19

5

120

27

15

50

4

2

50

12

3

5

19

7

45

27

7

150

4

11

50

12

16

5

19

10

20

27

5

80

4

4

40

13

1

180

19

3

15

27

16

35

4

9

35

13

11

100

20

13

50

27

3

2

4

5

20

13

10

40

20

7

75

28

8

100

4

12

5

13

12

20

20

15

75

28

5

20

5

2

80

13

3

5

20

16

10

28

6

20

5

9

40

14

1

90

20

3

5

28

16

15

5

3

25

14

7

50

21

13

70

28

3

10

5

12

5

14

6

20

21

6

30

29

15

150

6

1

80

14

10

10

21

3

20

29

9

200

6

11

150

14

3

5

21

5

20

29

16

15

6

4

30

14

12

5

21

16

15

30

15

70

6

12

10

14

14

3

22

8

140

30

16

10

7

6

125

15

2

100

22

6

30

31

7

150

7

16

15

15

9

20

22

14

20

31

15

150

8

8

75

15

5

20

22

16

15

31

16

25

8

6

50

15

3

20

22

5

8

32

17

8

8

16

15

15

10

10

23

11

250

33

17

8

9

1

80

15

12

5

23

10

65

33

16

25

9

10

30

16

5

120

23

3

20

33

7

75

ПС

ПР

Цена

К_во

1

9

1

11

1.50

50

1

12

3.00

10

1

15

2.00

170

2

1

3.60

300

2

3

2

5

1.80

100

2

6

3.60

80

2

8

3

7

0.40

200

3

9

3

12

2.50

20

3

15

1.50

200

4

2

4

4

2.04

50

4

13

0.88

150

4

14

4

16

0.94

200

4

17

4.50

50

5

4

3.00

50

5

9

5

10

0.50

130

5

11

5

13

1.20

40

5

14

0.50

70

5

16

1.00

50

6

10

0.70

90

6

11

6

12

7

1

4.20

70

7

3

4.00

250

7

6

2.20

140

7

7

7

8

1.00

150

8

2

8

5

2.00

70

8

11

1.00

100

Продукты

Наличие

ПР

Продукт

Белки

Жиры

Углев

K

Ca

Na

B2

PP

C

1

Говядина

189.

124.

0.

3150

90

600

1.5

28.

0

2

Судак

190.

80.

0.

1870

270

0

1.1

10.

30

3

Масло

60.

825.

90.

230

220

740

0.1

1.

0

4

Майонез

31.

670.

26.

480

280

0

0.

0.

0

5

Яйца

127.

115.

7.

1530

550

710

4.4

1.9

0

6

Сметана

26.

300.

28.

950

850

320

1.

1.

2

7

Молоко

28.

32.

47.

1460

1210

1500

1.3

1.

10

8

Творог

167.

90.

13.

1120

1640

1410

2.7

4.

5

9

Морковь

13.

1.

70.

2000

510

210

0.7

9.9

50

10

Лук

17.

0.

95.

1750

310

180

0.2

2.

100

11

Помидоры

6.

0.

42.

290

140

400

0.4

5.3

250

12

Зелень

9.

0.

20.

340

275

75

1.2

4.

380

13

Рис

70.

6.

773.

540

240

260

0.4

16.

0

14

Мука

106.

13.

732.

1760

240

120

1.2

22.

0

15

Яблоки

4.

0.

113.

2480

160

260

0.3

3.

130

16

Сахар

0.

0.

998.

30

20

10

0.

0.

0

17

Кофе

127.

36.

9.

9710

180

180

0.3

1.8

0

ПР

К_во

Стоим

1

108

429.84

2

0

0.00

3

73

274.61

4

39

97.46

5

61

111.83

6

88

206.60

7

214

83.08

8

92

82.80

9

0

0.00

10

77

46.30

11

46

51.70

12

13

34.96

13

54

51.14

14

91

43.77

15

117

189.92

16

98

96.14

17

37

166.50

Вид_блюд

Трапезы

Меню

Выбор

Выбрано

В

Вид

З

Закуска

С

Суп

Г

Горячее

Д

Десерт

Н

Напиток

Т

Трапеза

1

Завтрак

2

Обед

3

Ужин

Т

В

БЛ

Т

В

БЛ

Т

В

БЛ

1

З

3

2

З

1

3

З

6

1

З

6

2

З

6

3

З

8

1

Г

19

2

С

9

3

Г

20

1

Г

21

2

С

12

3

Г

16

1

Н

31

2

Г

14

3

Н

30

1

Н

32

2

Г

16

3

Н

31

2

Г

18

2

Д

26

2

Д

28

СМ

Т

В

БЛ

2

1

З

3

2

1

Г

19

2

1

Н

31

2

2

З

1

2

2

С

12

2

2

Г

16

2

2

Д

26

2

3

З

8

2

3

Г

21

2

3

Н

32

СМ

Т

БЛ

1

1

3

1

1

21

.

2

2

16

2

2

26

.

3

1

6

.

32

3

30

Основные таблицы базы данных ПАНСИОН

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8