6 / 12
Действительное |
Числа от -1038-1 до 1038-1 (adp). Числа от -1028-1 до |
28 знаков |
12 байт |
|
1028-1 (.mdb). |
|
|
Код репликации |
Глобальный уникальный идентификатор (GUID) |
Не определено |
16 байт |
|
при репликации объектов данных. |
|
|
|
|
|
|
Поле типа Счетчик
Для создания полей, в которые при добавлении записи автоматически вводится число, в Microsoft Access существует тип данных Счетчик. При этом созданный для записи номер уже не может быть удален или изменен. В поле счетчика могут быть использованы три типа чисел: последовательно возрастающие на один, случайные числа, а также коды репликации (также называются QUID — уникальные глобальные идентификаторы). Наиболее часто используется счетчик последовательно возрастающих чисел. Такой тип счетчика удобно использовать как ключевое поле таблицы. Счетчик случайных чисел создает уникальный номер для каждой записи в таблице.
Поле счетчика и репликация
Код репликации используется при репликации базы данных для создания уникальных идентификаторов, обеспечивающих синхронизацию реплик. При репликации базы данных необходимо определить подходящий размер для поля типа Счетчик, используемого в качестве ключевого поля таблицы. При использовании поля типа Счетчик как ключевого поля для таблицы в реплицированной базе данных для его свойства Размер поля (FieldSize) можно установить значение либо Длинное целое, либо Код репликации.
•Если между операциями синхронизации реплик добавляется, как правило, менее 100 записей, то с целью экономии дискового пространства для свойства Размер поля (FieldSize) следует использовать значение Длинное целое
•Если между операциями синхронизациями добавляется более 100 записей, с целью предотвращения повторения значений в ключевых полях в разных репликах следует использовать значение Код репликации. Однако следует иметь в виду, что в поле типа Счетчик с размером Код репликации генерируются 128-битовые значения, требующие больше места на диске.
Свойство Формат поля
Свойство Формат поля (Format) позволяет указать форматы вывода текста, чисел, дат и значений
времени на экран и на печать. Например, для поля Цена разумно указать в свойстве Формат поля формат Денежный и установить для его свойства Число десятичных знаков (DecimalPlaces) значение 2 или Авто. В этом случае введенное в поле значение 4321,678 будет отображаться как 4 321,68р.. Допустимо использование как встроенных, так и специальных форматов, созданных , при помощи символов форматирования.
Для элементов управления значение свойства Формат поля задается в окне свойств. Для поля в таблице или запросе значение данного свойства задается в режиме конструктора таблицы (в разделе свойств поля) или в окне запроса (в окне свойств поля). Форматы можно выбирать из списка встроенных форматов для полей, имеющих числовой, денежный, логический типы данных, а также типы данных счетчика и даты/времени. Также для любых типов данных полей, отличных от объектов OLE, есть возможность создания собственных специальных форматов. Кроме того, значение данного свойства можно задать в макросе или в программе Visual Basic.
Свойство Формат поля определяет только способ отображения данных, не оказывая воздействия на способ их сохранения. В Microsoft Access определены стандартные форматы для полей с типами данных Числовой, Дата/время, Логический Текстовый и Поле MEMO. В качестве стандартных используются национальные форматы, выбираемые в окне Язык и стандарты Панели управления Windows Набор форматов определяется настройками для конкретной страны. Например если на вкладке Язык и стандарты указать Английский (США), то число 1234.56 в денежном формате будет выглядеть как $1,234.56. Но если указать на этой вкладке Русский, то это число будет выглядеть так: 1 234,56р. Маска ввода обеспечивает соответствие текстовых данных и дат определенному формату, а также заданному типу значений, вводимых в каждую позицию.
Мощь реляционных баз данных заключается в том, что с-их помощью быстро найти и связать данные из разных таблиц при помощи запросов, форм и отчетов. Для этого каждая таблица должна содержать одно или несколько полей, однозначно идентифицирующих каждую запись в таблице. Эти поля называются ключевыми полями таблицы. Если для таблицы обозначены ключевые поля, то ядро базы данных (в Access — Microsoft Jet) предотвращает дублирование или ввод пустых значений в ключевое поле.
7 / 12
Типы ключевых полей
В Microsoft Access можно выделить три типа ключевых полей: счетчик, простой ключ и составной ключ.
Ключевые поля счетчика
Поле счетчика можно задать таким образом, чтобы при добавлении каждой записи в таблицу в это поле автоматически вносилось порядковое число (см. выше раздел "Поле счетчика"). Указание такого поля в качестве ключевого — наиболее простой способ создания ключевых полей. Если до сохранения созданной таблицы ключевые поля не были определены, то при сохранении будет выдано сообщение о создании ключевого поля. При нажатии кнопки Да будет автоматически создано ключевое поле счетчика.
Простой ключ
Если поле содержит уникальные значения, такие как коды или инвентарные номера, то это поле можно определить как ключевое. Если выбранное поле содержит повторяющиеся или пустые значения, то оно не будет определено как ключевое. Для определения записей, содержащих повторяющиеся данные можно выполнить запрос на поиск повторяющихся записей. Если устранить повторы путем изменения значений невозможно, то следует либо добавить в таблицу поле счетчика и сделать его ключевым, либо определить составной ключ.
Составной ключ
В случаях, когда невозможно гарантировать уникальность значений каждого отдельного поля, можно создать ключ, состоящий из нескольких полей. Чаще всего такая ситуация возникает для таблицы, используемой для связывания двух таблиц в отношении "многие к многим". Примером такой таблицы может служить таблица Книги базы данных Картотека (см. рис. 3.4), связывающая таблицы Авторы и Издатели. В этой таблице можно назначить ключ, состоящий из двух полей: МоАвтора и ЫоИздателя. В таблице Книги может быть представлено много авторов и много издателей, но каждая книга присутствует в картотеке только один раз, поэтому комбинация значений полей ЫоАвтора и МоИздателя достаточна для образования ключа. Другим примером может служить складская база данных, в инвентарной книге которой используются один основной и один или несколько вспомогательных инвентарных номеров.
Примечание: Если определить подходящий набор полей для составного ключа сложно, можно просто добавить поле счетчика и сделать его ключевым. Например, не рекомендуется определять ключ по полям Имена и Фамилии, поскольку нельзя исключить повторения этой пары значений для разных людей.
Индексы
Индексы — объекты базы данных, которые обеспечивают быстрый доступ к отдельным строкам в таблице. Индекс создается с целью повышения производительности операций запросов и сортировки данных таблицы. Индексы также используются для поддержания в таблицах некоторых типов ключевых ограничений (например, ограничений Unique и Primary Key); эти индексы часто создаются автоматически при определении ограничения. Индекс — независимый объект, логически отдельный от индексированной таблицы; создание или удаление индекса никак не воздействует на определение или данные индексированной таблицы. Индекс хранит специальным образом обработанные версии всех значений одного или больше столбцов таблицы. Когда значение запрашивается из индексированного столбца, ядро базы данных использует индекс для быстрого нахождения требуемого значения. Индексы должны постоянно поддерживаться, чтобы отражать последние изменения индексированных столбцов таблицы. Процедуры обновления индекса при вставке, модификации или удалении значения в индексированный столбец автоматически выполняются ядром базы данных. Хотя эти операции не требуют никаких действий со стороны пользователя, они, однако, снижают эффективность некоторых операций манипулирования данными (кроме запросов на выборку). Однако уменьшение производительности, ассоциированное с поддержанием индекса, в большинстве случаев с лихвой компенсируется преимуществами повышения быстродействия доступа к данным, которое обеспечивает индекс. Индексы обеспечивают наибольшие выгоды для относительно статичных таблиц, по которым, в то же время, часто выполняются запросы.
Содание и изменение ключевых полей
Для создания ключевых полей таблицы:
1.В режиме конструктора выделить одно или несколько полей, которые необходимо определить как ключевые. Для выделения одного поля нужно щелкнуть область выделения строки нужного поля (кнопка слева строки). Выделить нескольких полей можно, удерживая при выборе каждого поля кла-
вишу <Ctrl>.
2.Нажать кнопку Ключевое поле (Primary Key) на панели инструментов. На рис. 3.4 в качестве ключевого назначено поле МоИздателя.
8 / 12
Допускается назначение ключевым поля, содержащего данные, однако, если в этом поле имеются повторяющиеся или пустые значения, будет выведено сообщение об ошибке, так как для клю-
чевого поля устанавливается ограничение Unique и Not Null. В этом случае можно либо найти записи, содержащие повторяющиеся или пустые значения в поле, и изменить эти значения, либо выбрать другое поле, либо добавить поле счетчика и определить его как ключевое.
Создание индекса
Создать индексы, как и ключи, можно по одному или нескольким полям. Составные индексы позволяют при отборе данных группировать записи, в которых первые поля могут иметь одинаковые значения. Индексировать поля требуется для выполнения частых поисков, сортировок или объединений с полями из других таблиц в запросах.
Ключевые поля таблицы индексируются автоматически. Нельзя индексировать поля с типом данных поле MEMO, гиперссылка или объект OLE. Для остальных полей индексирование используется, если поле имеет текстовый, числовой, денежный тип или тип даты/времени и требуется осуществлять поиск и сортировку значений.
Если предполагается, что будет часто выполняться сортировка или поиск одновременно по двум и более полям, можно создать составной индекс. Например, если для одного и того же запроса часто устанавливается критерий для полей "Имя" и "Фамилия", то для этих двух полей имеет смысл создать составной индекс. При сортировке таблицы по составному индексу сначала осуществляется сортировка по первому полю, определенному для данного индекса. Если в первом поле содержатся записи с повторяющимися значениями, то сортировка осуществляется по второму полю и так далее. Чтобы создать индекс для одного поля следует:
1.В режиме конструктора в панели структуры таблицы (верхняя часть окна) выбрать поле, для которого требуется создать индекс.
2.В панели свойств (нижняя часть окна) для свойства Индексированное поле (Indexed) установить значение "Да (Допускаются совпадения)" или Да (Совпадения не допускаются).
Убедиться, что в данном поле совпадающих записей нет, можно, выбрав значение "Да (Совпадения не допускаются)". Чтобы создать составной индекс, необходимо:
1.В режиме конструктора на панели инструментов нажать кнопку индексы.
2.В первой пустой строке поля Индекс (Index Name) ввести имя индекса. Для индекса можно использовать либо имя одного из индексируемых полей, либо другое подходящее имя.
3.В поле Имя поля (Field Name) нажать стрелку и выбрать в списке первое поле, для которого требуется создать индекс.
4.В следующей строке поля Имя поля (Field Name) указать второе индексируемое поле (для данной строки поле Индекс (Index Name) следует оставить пустым). Повторить эти действия для всех полей, которые необходимо включить в индекс. В составном индексе может быть до 10 полей.
Ограничение Unique
Ограничение Unique предотвращает ввод в поле повторяющихся значений. Этот тип ограничения может быть установлен как для одного поля, так и для несколькох полей составного ключа. Назначение ключевого поля (для одного поля) автоматически запрещает ввод в него повторяющихся значений, тем самым обеспечивая для каждой записи уникальный идентификатор. Однако, запрет на ввод повторяющихся значений может потребоваться и для других, неключевых, полей. Чтобы установить ограничение Unique для одного поля таблицы, предлагается:
1.В режиме конструктора в панели структуры таблицы выбрать поле, в котором допускается ввод только уникальных значений.
2.В панели свойств для свойства Индексированное поле (Indexed) установит! значение Да (Совпадения не допускаются).
После создания таблиц, содержащих данные по различным темам, необходимо сформировать схему компонования этих данных при извлечении их из базы данных и предоставлении пользователю. Первым шагом при этом должно быть определение связей между таблицами. После этого становится возможным создание запросов, форм и отчетов, в которых выводятся данные одновременно из нескольких таблиц. Если в форме или отчете должны быть выведены данные, которые содержат сведения об одном и том же объекте (например, заказе), то они должны быть определенным образом скоординированы. Эта координация осуществляется путем установления связей между таблицами. Связь между таблицами устанавливает отношения между совпадающими значениями в ключевых полях, обычно между полями разных таблиц, имеющими одинаковые имена. В большинстве случаев с клю-
9 / 12
чевым полем одной таблицы, являющимся уникальным идентификатором каждой записи (первичный ключ), связывается внешний ключ другой таблицы. Например, для соотнесения сведений об авторах и о написанных ими книгах следует в двух таблицах — Книги и Авторы — определить связь по полям МоАвтора.
Отношение "один к многим"
Связь с отношением "один к многим" — наиболее часто используемый тип связи между таблицами. В такой связи каждой записи в таблице А могут соответствовать несколько записей в таблице В, а запись в таблице В не может иметь более одной соответствующей ей записи в таблице А.
Отношение "многие к многим"
При отношении "многие к многим" одной записи в таблице А могут соответствовать несколько записей в таблице В, а одной записи в таблице В несколько записей в таблице А. Такая схема реализуется толъко с помощью третьей (связующей) таблицы, ключ которой состоит, по крайней мере, из двух полей, которые являются полями внешнего ключа в таблицах А и В. Например, между таблицами Авторы и Издатели имеется отношение "многие к многим", которое определяется путем создания двух связей с отношением "один к многим" через таблицу Книги (см. рис. 3.4).
Отношение "один к одному"
При отношении "один к одному" запись в таблице А может иметь не более одной связанной записи в таблице В и наоборот. Этот тип связи используется редко, поскольку такие данные могут быть помещены в одну таблицу. Связь с отношением "один к одному" используют для разделения очень широких таблиц, для отделения части таблицы по соображениям защиты, а также для сохранения сведений, относящихся к подмножеству записей в главной таблице. Например, такой тип связей между таблицами подходит для хранения конфиденциальных кадровых сведений о сотрудниках, а также для случаев самоссылки (см. рис. 6.8).
Определение связей
Процедура определения связей между таблицами базы данных следующая:
1.Закрыть все открытые таблицы. Создавать или изменять связи между открытыми таблицами нельзя.
2.Переключиться в окно базы данных. Для переключения в окно базы данных из других окон можно нажатием клавиши F11.
3. Нажать кнопку Схема данных (Relationships) l°° I на панели инструментов.
4.Если в базе данных не определено никаких связей, то на экран автоматически будет выведено окно Добавление таблицы (Show Table). Если до определения связей необходимо добавить таблицы, а диалогового окна Добавление таблицы (Show Table) на экране нет, нужно нажать кнопку Отобразить таблицу (Show Table) LEJ на панели инструментов. Если же таблицы, которые необходимо связать, уже отображены на экране, перейти к шагу 6.
5.В окне диалога Добавление таблицы (Show Table) дважды щелкнуть имена таблиц, для которых требуется определить связи. Закрыть окно.
6.Для связывания полей выбрать поле в одной таблице и перенести его на соответствующее поле во второй таблице. Для связывания сразу нескольких полей выбрать и перенести их при нажатой клави-
ше <Ctrl>.
В большинстве случаев связывается ключевое поле (представленное в списке полей полужирным шрифтом) одной таблицы с соответствующим ему полем (часто имеющим то же имя), которое называется полем внешнего ключа во второй таблице. Связанные поля не обязательно должны иметь одинаковые имена, но они должны иметь одинаковые типы данных и иметь содержимое одного типа. Кроме того, связываемые поля числового типа должны иметь одинаковые значения свойства Размер поля (FieldSize). Относительно типов данных имеются следующие два исключения -из правила:
• Поле счетчика можно связывать с числовым полем, если в последнем в свойстве Размер поля задано значение "Длинное целое".
• Поле счетчика можно связать с числовым, если для обоих полей в свойстве Размер поля задано значение "Код репликации".
7.В открывшемся диалоговом окне Изменение связей (Relationships) проверить имена полей, представленные в двух списках. В случае необходимости, здесь можно внести изменения.
Если необходимо, установить параметры связи.
8.Для создания связи нажать кнопку Создать (Create).
9.Шаги с 5 по 8 проделать для каждой связываемой пары таблиц.
Примечание: Иногда требуется связать поле таблицы с другим полем той же таблицы,I Этот случай называется самоссылкой или ограничением самоссылочной! целостности. Такая ситуация возникает при определении поля с подста-| новкой значений из той же таблицы. Этот тип внешнего ключа ссылается! на родительский ключ
10 / 12
той же самой таблицы. В примере на рис. 6.8 праТ вило ссылочной целостности определено так, чтобы каждому значению!! столбце Руководитель таблицы Служащие соответствовало значение, ко! торое в настоящее время содержится в столбце МоСотрудника той же! таблицы. Это ограничение устраняет возможность ошибочных номеров! служащих в столбце Руководитель (руководитель — тоже служащий). Дл«| связывания полей одной таблицы эту таблицу следует добавить в от Схема данных (Relationships) дважды.
Тип создаваемой связи зависит от полей, для которых определяется связь.
•Отношение "один к многим создается в том случае, когда только одно из поле!| является ключевым или имеет уникальный индекс.
•Отношение "один к одному" создается в том случае, когда оба связываемых поля являются ключевыми или имеют уникальные индексы.
•Связь с отношением "многие к многим", фактически, представляет собой две связи с отношением
"один к многим" через третью таблицу, ключ которой состоит, по крайней мере, из двух полей, которые являются полями внешнего ключа, соответствующими ключам в двух других таблицах.
Ограничения и поддержание целостности данных
Ограничение — некоторое ограничивающее условие, или правило. В базе данных — общее понятие, охватывающее широкий круг аспектов управления базой данных: ключи, значения, типы и форматы данных и т.д.. Ограничения устанавли'
вают для пользователя некоторые рамки при вводе, изменении или удалении пан-ных приложения. Вся система ограничений при создании приложения базы данные строится с целью обеспечения целостности данных. Целостность данных представляет собой набор правил, используемых ядром базы данных для поддержания связей между записями в связанных таблицах, а также для защиты от случайного удаления или изменения связанных данных.
Например, ограничение можно использовать, чтобы гарантировать, что каждый служащий в базе данных будет относиться к какому-либо отделу, или гарантировать, что пользователи не смогут случайно ввести отрицательное значение для цены товара.
Ограничения можно определять на двух уровнях:
Вбазе данных. Ограничения в базе данных ассоциируются с определениями объектов-таблиц. Например, для таблицы может быть установлено ограничение, которое требует, чтобы каждое значение в столбце было уникальным.
Вприложении Access (в программном коде или свойствах объектов). Ограничения в приложении ассоциируются с объектами приложения, которые формируют интерфейс к информации базы данных. Например, текстовое поле может иметь ограничение, которое требует, чтобы все вводимые в него значения были больше 20.
Ограничения в базе данных
Ограничение в базе данных — декларативно определенное правило, ограничивающее значения, которые могут быть введены в столбец или набор столбцов в таблице. Ограничения базы данных являются декларативными, так как определяют ограничения как часть структуры таблицы при ее создании или изменении. Будучи однажды ассоциировано с таблицей, ограничение всегда поддерживается, если его явно не удалить или деактивировать. Размещение ограничений в базе данных имеет следующие преимущества:
•Централизация. Ограничение базы данных определяется только один раз и может автоматически использоваться всеми клиентами, обращающимися к базе данных. Определение ограничения в базе данных освобождает разработчика от необходимости вносить одни и те же ограничения в каждую форму, которая использует данную информацию. Кроме того, при необходимости модифицировать ограничение изменения вносятся только в один объект.
•Защита. Ограничения базы данных всегда поддерживаются, независимо от того, какой инструмент доступа к данным используется. С другой стороны, ограничения, определенные в приложении, могут быть нарушены пользователем, использующим для доступа к тем же таблицам другое приложение или инстру-
IUPHT
мент.
Простота. Ограничения базы данных просты в определении и не требуют никакого программного кппя кого программного кода
Типы ограничений в базе данных
Типы ограничений, которые можно ассоциировать с таблицей, варьируются, в зависимости от базы данных, в которой хранится эта таблица. Описанные ниже категории ограничений, поддерживаются большинством реляционных баз данных, в том числе и Microsoft Access.