Проектирование баз данных в Delphi 7

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

Из этой статьи вы узнаете:

  •  что такое ключи и индексы и зачем они нужны;
  •  каковы основные виды связей таблиц;
  •  что такое три основные нормальные формы таблиц и способы нормализации;
  •  что такое средства CASE.

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


Ключ— это комбинация нескольких полей, данные в которых однозначно опреде­ляют запись Таблицы.

Ключи бывают простыми и сложными (составными).

Простой ключ — это ключ, состоящий из одного поля.

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


Соответственно поля, по которым строится ключ, называются ключевыми полямиВ каждой таблице может быть только один ключ.

Ключ иногда называют первичным ключом или главным индексом.

Для чего же служит ключ? Прежде всего, для обеспечения однозначного опреде­ления записей таблицы. Кроме того, ключ предназначен для более быстрого вы­полнения запросов к базе данных. По ключевым полям организуется связь между таблицами базы данных. У ключа есть еще много других функций, они будут объясняться по мере изложения материала книги.  

Сведения о ключе таблицы могут храниться как вместе с данными таблицы, так и в отдельном файле. Этот файл имеет такое же имя, что и файл таблицы, но другое расширение. Например, в базе данных Microsoft Access информация о ключе со­держится вместе с данными в одном файле, который имеет расширение .MDB.

А Paradox выделяет для информации о ключе отдельный файл с расширением .РХ.


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


Ключевые поля вам придется определять самостоятельно, поэтому следуйте представ­ленным ниже правилам, которые помогут достаточно эффективно выбрать эти поля:   

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

Индекс— это комбинация нескольких полей, которые служат для быстрого досту­па к необходимой информации.


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


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

Поля, по которым строится индекс, называют индексными полями. Процесс созда­ния индекса называетсяиндексированием таблицы.

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

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


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


Вообще говоря, поведение индексов и ключей зависит от типа используемой базы данных. Так, например, в таблицах Paradox ключ автоматически является глав­ным индексом, который не имеет имени.


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

ВНИМАНИЕ: Процесс создания ключа в ряде случаев может привести к неожиданным результатам. Например, при создании ключа в таблице базы данныхParadoxбудут автоматически отсор­тированы записи по значениям ключа. 


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


ПРИМЕЧАНИЕ: В других литературных источниках встречается понятие соединения таблиц, которое явля­ется тем же самым связыванием. Также в других источниках вместо термина связь исполь­зуется термин отношение. 

 

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

 

ПРИМЕЧАНИЕ: Вместо понятия поля связи в некоторых источниках упоминается термин совпадающие поля. Нужно заметить, что, независимо от используемого типа базы данных, поля связи обязательно должны быть индексированными.

 

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

Главная таблица {родительская таблица или master) — это таблица, в которой со­держатся основные данные.

Подчиненная таблица {дочерняя таблица или detail) — таблица, значения в полях которой зависят от значений главной таблицы.

Главная таблица может иметь несколько подчиненных таблиц.

Таким образом, при перемещении по записям главной таблицы будет автомати­чески производиться перемещение по записям подчиненной таблицы.

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

Само название связи между таблицами реляционной базы данных формируют по типу таблиц:

  • главный—подчиненный,
  • родительский—дочерний или master—detail.

Как было уже сказано на первом занятии, существует четыре вида связи между таблицами:

  1. один к одному;
  2. один ко многим;
  3. много к одному;
  4. много ко многим.  

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


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


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


Последний вид связи много ко многим означает, что одной записи главной таблицы могут быть сопоставлены несколько записей подчиненной таблицы и, наоборот, одной записи подчиненной таблицы может соответствовать несколько записей главной таблицы. Ярким примером организации такого вида связи является база данных типа «Рас­писание», подразумевающая, что в одной учебной аудитории может заниматься несколько групп и наоборот, одна группа может заниматься в нескольких аудито­риях. Таким образом, данные об аудиториях могут находиться и одной таблице, а о группах — в другой. При этом трудно утверждать, что одна пи таблиц является главной, а вторая — подчиненной. 


Данный вид связи является наиболее сложным, поэтому он применяется очень редко.

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


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


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


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

  • достаточно быстрый доступ к данным;
  • отсутствие повторяющихся записей;
  • целостность данных.  

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


Избыточность информации — это повторение (дублирование) данных, содержа­щихся в базе данных.


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


Таблица 2.1. Простое повторение данных

ФИО сотрудника

Город проживания сотрудника

Иванов Иван Иванович

Абакан

Петров Петр Петрович

Абакан

Сидоров Иван Петрович

Черногорск

Михайлов Василий Борисович

Минусинск

Семенов Иван Данилович

Абакан

Васильев Сергей Анатольевич

Абакан


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

Избыточность данных может приводить к различным аномалиям: 

  • аномалии удаления;
  • аномалии обновления;
  • аномалии ввода.

 

Аномалии удаления возникают тогда, когда удаляется какая-либо из записей, со­держащая дублированные данные. В этом случае будет потеряна сопутствующая информация. Например, при удалении любой из записей из табл. 2.1 пропадет ин­формация о ФИО сотрудника.


Аномалии обновленияимеют место, если значение поля одной записи изменяется, а аналогичные значения того же поля для всей таблицы остаются без изменения.


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

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: