Ключи и индексы

Таблицы баз данных

Реляционные базы данных

Основные понятия баз данных

4. Реляционные базы данных

4.1. Таблицы баз данных

4.2. Ключи и индексы

4.3. Методы и способы доступа к данным

4.4. Связь между таблицами

4.5. Механизм транзакций

4.6. Бизнес-правила

4.7. Словарь данных

 

Приложение. Таблицы формата dBase и Paradox


Реляционная БД состоит из взаимосвязанных таблиц. Каждая таблица содержит информацию об объектах одного типа, а совокупность всех таблиц образует единую БД

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

Для одной таблицы создается несколько файлов, содержащих данные, индексы, ключи и т. п. Главным из них является файл с данными, имя этого файла ста­новится именем таблицы, которое задается при ее создании. В некотором смыс­ле понятие таблицы и ее главного файла являются синонимами, при выборе таблицы выбирается именно ее главный файл: для таблицы dBase — это файл с расширением DBF, а для таблицы Paradox — с расширением DB. Имена остальных файлов таблицы назначаются автоматически — все файлы имеют одинаковое имя, совпадающее с именем таблицы, и разные расширения, указы­вающие на содержимое соответствующего файла. Расширения файлов приведе­ны в приложении к данной лекции "Таблицы формата dBase и Paradox" ниже.

Каждая таблица БД состоит из строк и столбцов и предназначена для хранения данных об однотипных объектах информационной системы. Строка таблицы называется записью, столбец таблицы — полем (рис. 1). Каждое поле должно иметь уникальное в пределах таблицы имя.

Поле

Запись

 

Рис. 1.Таблица базы данных

 

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

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

Замечание

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

 

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

§ описание полей;

§ ключ;

§ индексы;

  • ограничения на значения полей;

§ ограничения ссылочной целостности между таблицами;

§ пароли.

 

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

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

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

§ создание (определение структуры);

§ изменение структуры (реструктуризация);

§ переименование;

§ удаление.

 

При создании таблицы задается структура и имя таблицы. При сохранении на диске создаются все необходимые файлы, относящиеся к таблице. Их имена совпадают с именем таблицы.

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

При переименовании таблица получает новое имя, в результате чего новое и^л также получают все ее файлы. Для этого используются соответствующие про­граммы (утилиты), предназначенные для работы с таблицами БД, например, Database Desktop или Data Pump.

Замечание

Таблицу нельзя переименовать, просто изменив названия всех ее файлов, на­пример, с помощью Проводника Windows.

 

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


 

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

§ однозначную идентификацию записей таблицы;

§ ускорение выполнения запросов к БД;

§ установление связи между отдельными таблицами БД;

§ использование ограничений ссылочной целостности.

 

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

Информация о ключе может храниться в отдельном файле или совместно с дан­ными таблицы. Например, в БД Paradox для этой цели используется отдельный файл (ключевой файл или файл главного индекса) с расширением РХ. В БД Ac­cess вся информация содержится в одном общем файле с расширением MDB. Значения ключа располагаются в определенном порядке. Для каждого значения ключа имеется уникальная ссылка, указывающая на расположение соответ­ствующей записи в таблице (в главном ее файле). Поэтому при поиске записи выполняется непоследовательный просмотр всей таблицы, а прямой доступ к записи на основании упорядоченных значений ключа.

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

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

  • Ключ должен быть уникальным. У составного ключа значения отдельных полей (но не всех одновременно) могут повторяться.

§ Ключ должен быть достаточным и неизбыточным, т. е. не содержать поля, которые можно удалить без нарушения уникальности ключа.

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

 

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

Удобным вариантом создания ключа будет использование для него поля соот­ветствующего типа, которое автоматически обеспечивает поддержку уникально­сти значений. Для таблиц Paradox таким является поле автоинкрементного типа, еще одним достоинством которого является небольшой размер (4 байта). В то же время в таблицах dBase и InterBase поле подобного типа отсутствует, и програм­мист должен обеспечивать уникальность значений ключа самостоятельно, на­пример, используя специальные генераторы.

 

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

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

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

Использование индекса обеспечивает:

§ увеличение скорости доступа (поиска) к данным;

§ сортировку записей;

§ установление связи между отдельными таблицами БД;

§ использование ограничений ссылочной целостности.

 

В двух последних случаях индекс применяется совместно с ключом второй тао-лицы.

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

Сортировка представляет собой упорядочивание записей по полю или группе полей в порядке возрастания или убывания их значений. Можно сказать, что индекс служит для сортировки таблиц по индексным полям. В частности, в Delphi записи набора Table можно сортировать только по индексным полям. Набор данных Query позволяет выполнить средствами SQL сортировку по лю­бым полям, однако и в этом случае для индексированных полей упорядочива­ние записей выполняется быстрее.

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

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

Замечание

Создание ключа может привести к побочным эффектам. Так, если в таблице Paradox определить ключ, то записи автоматически упорядочиваются по его значениям, что в ряде случаев является нежелательным.

Таким образом, использование ключей и индексов позволяет:

§ однозначно идентифицировать записи;

§ избегать дублирования значений в ключевых полях;

§ выполнять сортировку таблиц;

§ ускорять операции поиска в таблицах;

  • устанавливать связи между отдельными таблицами БД;

§ использовать ограничения ссылочной целостности.