Глава 3
Создание таблиц новой базы данных
Как уже было сказано в главе 2, разработка новой базы данных «Контрольно-измерительные приборы» производится в программной среде Access 2002.
Формирование БД в Access состоит из ряда последовательных этапов, описываемых ниже. Первый этап этого процесса – создание таблиц. Таблицы в Access являются теми первичными, исходными файлами, на основе которых в дальнейшем строится все здание базы данных. Access 2002, как и предыдущие версии, предоставляет пользователю несколько разных вариантов построения таблиц, а также возможность применения дополнительных аналитических табличных структур.
Порядок создания всех таблиц одинаков и не зависит от их названия и конкретного содержания. Мы рассмотрим этот процесс на примере таблицы Страны.
Варианты создания таблиц
Формирование таблицы начинается с того, что вы открываете окно базы данных и в нем выбираете пункт Таблицы в разделе Объекты – рис. 3.1.
Рис. 3.1
Дальше следует щелкнуть по кнопке
на панели окна БД. В диалоговом окне Новая таблица, показанном на рис. 3.2, представлены все возможные параметры создания таблицы:
Рис. 3.2
• Режим таблицы;
• Конструктор;
• Мастер таблиц;
• Импорт таблиц;
• Связь с таблицами.
Последние два варианта создания таблиц – импорт таблиц и связь с таблицами – рассматриваются в том разделе главы 7, который посвящен объединению разнородных баз данных.
Формирование таблицы в режиме ввода
Войти в этот режим можно двумя способами: либо выбрав пункт Режим таблицы в окне Новая таблица (см. рис. 3.2) и щелкнув по кнопке ОК, либо выбрав опцию Создание таблицы путем ввода данных в окне базы данных (см. рис. 3.1). В результате на экране появится таблица, готовая к вводу информации (рис. 3.3).
Рис. 3.3
Ввод данных
Чтобы осуществить ввод данных, сначала надо заменить имеющиеся заголовки столбцов, а затем уже ввести сведения в поля таблицы. Рассмотрим эту операцию на примере создания таблицы Страны.
Заменим имена полей Поле1 и Поле2 на Код и Страна. Для этого дважды щелкните мышью в ячейке с именем соответствующего поля, а затем введите нужные значения. Записав первые данные (см. рис. 3.4), попробуйте выйти из созданной таблицы (кнопка в правом верхнем углу). Сначала Access 2002 спросит вас, надо ли сохранять произведенные в таблице изменения (если вы не хотите этого делать, она вообще сотрется из памяти). Затем вам будет предложено назвать таблицу (или согласиться с предлагаемым именем, которое присваивается автоматически). Все таблицы программа называет именем Таблица с добавлением текущего номера.
Рис. 3.4
Когда все это будет сделано, вы получите предупреждение о том, что ключевые поля не заданы, как показано на рис. 3.5.
Рис. 3.5
Если вы отказываетесь установить ключевые поля и отвечаете Нет, программа запомнит таблицу в том виде, в каком она показана на рис. 3.4. Однако вопрос о ключевых полях все равно возникнет на следующем этапе работы – когда вы будете формировать связи между файлами, и уж тогда без ключевых полей система не справится с этой задачей. Если вы поддались на уговоры и сразу согласились создать первичный код, выбрав ответ Да, то программа сама сделает это. В результате таблица будет выглядеть так, как показано на рис. 3.6.
Рис. 3.6
Если вы выберете пункт Отмена, таблица вновь примет тот вид, который показан на рис. 3.4. Однако это промежуточное состояние, из которого все равно надо как-то выходить. Внимательно посмотрите на первичные коды, созданные системой в поле Код. Здесь они ничем не отличаются от кодов, созданных пользователем в поле Код страны. Но в общем случае коды, введенные в это поле, совсем не обязаны быть такими же упорядоченными, как коды поля Код, – таблица, показанная на рис. 3.6, представляет собой словарь, и коды могут периодически изменяться. Поэтому для надежного контроля за файлами в Access предусмотрен механизм системных первичных кодов. Иногда (как, например, сейчас) они вводятся только по желанию пользователя. В других случаях при отсутствии этих кодов ряд функций Access 2002 выполняться не будет.
Поэтому, если у пользователя нет каких-то серьезных причин отказываться от введения первичных кодов, желательно их все-таки создать.
Отметим, что в словарном файле совсем не обязательно ограничиваться тем минимумом полей, которые показаны в нашем примере. Это было сделано исключительно в методических целях. На практике количество полей в файле вообще не ограничивается, следует лишь соблюдать единственное требование: поля должны находиться в отношениях «один-к-одному».
Создание таблицы в режиме конструктора
Описанная в предыдущем разделе таблица создавалась, можно сказать, стихийно. Теперь мы будем придерживаться строгой последовательности действий, заблаговременно обосновывая все дальнейшие операции, задавая необходимые данные и их форматы.
Окно конструктора таблиц
Войти в этот режим можно двумя способами. Первый: выберите пункт Конструктор в окне Новая таблица – рис. 3.2, затем щелкните по кнопке ОК. Другой вариант: выберите пункт Создание таблицы в режиме конструктора в окне базы данных (см. рис. 3.1). На экране появится окно конструктора таблиц (см. рис. 3.7), содержащее три раздела:
Рис. 3.7
• Имя поля;
• Тип данных – обязательный раздел;
• Описание – необязательный раздел.
В разделе Имя поля следует указать имена полей – те самые, которые в предыдущем разделе вводились в заголовки столбцов таблицы. Ситуация с первичным кодом совершенно аналогична.
Чтобы начать работу с разделом Тип данных, надо щелкнуть мышью в его пределах. Как только это произойдет, в его правой части появится стрелка прокрутки. Щелкните по ней – увидите список типов данных, которые поддерживаются в Access 2002 (см. рис. 3.8). Характеристика типов данных приводится в следующем разделе этой главы.
Рис. 3.8
Сведения о типах данных, полей и их свойствах являются в Access 2002 базовыми и используются при создании таблицы в режиме конструктора.
Типы данных и их свойства
Типы данных, поддерживаемые системой Access 2002 (см. рис. 3.8), приводятся вместе с основными характеристиками:
• Текстовый – символьные данные или сочетание символьных и цифровых данных. К этому типу относятся также цифровые данные, которые не требуют вычислений над ними (например, номер телефона). Длина поля по умолчанию составляет 255 символов, но можно задать меньший размер. Место для невведенных данных в пределах объявленного размера не резервируется;
• Мемо-поля – текстовые данные либо сочетание текстовых и цифровых данных, имеющих большой объем (например, примечания или описания). Длина поля – до 65 536 символов;
• Числовой – числовые данные, используемые в математических операциях (за исключением финансовых расчетов, для которых следует использовать тип данных Денежный). Длина поля может составлять 1, 2, 4 бита, 8 и даже 16 байт (в последнем случае в свойстве Размер поля нужно выбрать опцию Репликация[3]);
• Дата/Время – формат данных о дате и времени для периода с 100 до 9999 года. Длина поля – 8 байт. Access 2002 отличается некоторой спецификой в части обозначения дат. Интерпретируя номера годов, заданные двумя цифрами, программа использует параметры, вводимые в окне Язык и стандарты панели управления Microsoft Windows. В этом диалоговом окне год задается двумя цифрами и может отображаться в виде диапазона, равного 100. По умолчанию он охватывает годы с 1930 по 2029. Программа, использующая этот период для интерпретации номеров годов, заданных двумя цифрами, будет считать, что годам с 30 по 99 должно предшествовать число 19, а годам с 00 по 29 – число 20. Например, 99 будет интерпретировано как 1999, а 01 – как 2001. Этот параметр не влияет на номера годов, заданные четырьмя цифрами.
При работе с датами, относящимися к 2000 году и последующим годам, в силу сложности правил интерпретации их следует указывать более подробно. Это обеспечит правильность обработки дат в Access 2002.
При интерпретации неоднозначных дат Access делает некоторые допущения. Например, если введена дата, содержащая только месяц и еще одну или две цифры, Access исходит из того, что значение от 1 до 31 представляет число этого месяца, а дата относится к текущему году. Например, Access рассматривает 01 декабря как 1 декабря текущего года, а не как декабрь 2001 года. 32 декабря Access рассматривает как 1 декабря 1932 года.
Даты в объектах в режиме таблицы, введенные с указанием года в сокращенном формате, Microsoft Access интерпретирует как даты XXI столетия следующим образом:
Для обеспечения интерпретации значений года в Microsoft Access нужным образом следует указывать значения года четырьмя цифрами (например, 2001, а не 01). В Access 2002 имеется возможность при вводе полей дат и элементов управления, в которых года обозначаются четырьмя цифрами, проверять правильность столетия, для которого записывается конкретная дата. С этой целью на вкладке Общие диалогового окна Параметры (меню Сервис) в группе Формат года из четырех цифр могут выполняться следующие операции:
• установите флажок Текущая база данных, чтобы включить отображение годов четырьмя цифрами на уровне базы данных (в текущей базе данных или в текущем проекте Access);
• установите флажок Все базы данных, чтобы включить отображение годов четырьмя цифрами на уровне приложения (во всех базах данных и проектах Access).
При установке одного из этих флажков меняется только формат отображения дат, сами же даты не изменяются. Значения данных параметров определяют значения свойства Формат для отдельных полей и элементов управления.
Системные администраторы могут изменять правила, используемые Microsoft Office при интерпретации дат. Например, в качестве первого двузначного формата года, относящегося к XX столетию, можно задать не 30, а меньшее число (см. выше). Кроме того, можно изменить используемый по умолчанию формат дат, чтобы отображать значения года четырьмя цифрами, а не двумя;
• Денежный – значения денежных единиц и числовые данные, используемые в математических операциях. Эти данные должны иметь фиксированное число знаков до и после запятой. Используется также для предотвращения округления в ходе вычислений. Длина поля – 8 байт;
• Счeтчик – уникальная последовательность чисел, начинающаяся с единицы, или случайная последовательность, которую создает Access 2002 при добавлении новой записи в таблицу. Для уникальной последовательности чисел при добавлении новой записи последнее число увеличивается на 1. Эта последовательность представляет собой первичный код, который очень важен в Access 2002, он не может корректироваться пользователем и доступен только системе. Если вы удалите какую-либо запись, то будет удалено и соответствующее значение первичного кода. Длина поля для данных этого типа составляет 4 бита (или 16 байт, если в свойстве Размер поля установлен режим Репликация);
• Да/Нет – логический тип данных. Поле может принимать лишь одно из двух значений: Да или Нет, Истина или Ложь. Нулевое значение не допускается. Длина поля – 1 бит;
• Поле объекта OLE – обменный тип данных для хранения таких объектов, как таблицы Microsoft Excel, документы Microsoft Word, графические и звуковые файлы, другие двоичные данные, включенные в таблицы Access 2002 или связанные с ними. Данное поле сохраняет объем до 1 Гбайта и ограничивается объемом диска;
• Гиперссылки – текстовые данные или сочетания текстовых и цифровых данных, используемых в качестве адресов, по которым выполняется переход к файлу, фрагменту файла или странице HTML в корпоративной сети или Internet. Сохраняет до 64 000 знаков.
Адрес гиперссылки может состоять из трех частей:
– отображаемый текст – текст, который появляется на экране;
– адрес – путь к файлу или странице доступа к данным;
– субадрес – положение данных внутри файла или на странице;
• Мастер подстановок. Создает поле, позволяющее выбрать значение из другой таблицы или из списка значений, используя поле со списком. При выборе данного параметра в списке типов данных запускается мастер для автоматического определения этого поля.
Для сохранения требуется тот же размер, что и у первичного ключа, соответствующего полю подстановок, – обычно 4 байта.
Как видите, типы данных очень разнообразны. Прежде чем вы начнете определять и вводить их, обязательно ответьте себе на ряд вопросов:
• какие данные вы хотите ввести в конкретное поле. Например, нельзя сохранить текстовую информацию в поле с числовым типом данных. Нельзя также вводить в поле числового формата десятичные данные с разделителем в виде точки (разделителем должна быть запятая);
• какая длина поля вам необходима для сохранения данных и работы с ними;
• какие операции будут производиться с данными в этом поле. Например, Access 2002 позволяет суммировать данные в числовом и денежном форматах, но не делает этого в текстовом или в формате OLE;
• собираетесь ли вы сортировать или индексировать данные. Имейте в виду, что в формате OLE нельзя делать ни того, ни другого;
• будете ли вы применять групповые записи в формах или запросах. Поля формата OLE нельзя использовать для группировки записей;
• как вы собираетесь сортировать данные в поле. В текстовом поле числа рассматриваются как строки символов (1, 10, 100, 2, 20, 200 и т. д.), поэтому многие форматы дат могут сортироваться неправильно; для них следует использовать формат Дата/Время, а не цифровые значения. Чтобы сортировать числа как цифровые значения, необходимо применять числовой или денежный форматы.
Свойства полей
В Access 2002 предусмотрены два свойства полей: Формат и Маска ввода. Обе опции позволяют задавать формат, в котором данные вводятся в таблицу.
Свойство Формат рекомендуется применять при последовательном вводе данных в таблицу. Например, если для поля типа Дата/Время вы установили значение свойства Формат равным Средний формат времени, то все значения дат при их последовательном вводе будут иметь следующий вид: 12-Янв-96. Если пользователь будет вводить в базу данных значения дат в любом другом формате (скажем, в виде 01/12/96), при запоминании записи Access 2002 все равно преобразует ее в Средний формат времени.
Свойство Формат проявляется лишь при отображении значения, но не при его запоминании. Пока введенные данные не появились на экране, невозможно проверить, в каком формате они были введены. Предположим, вы непременно хотите отобразить данные именно в том формате, в котором они вводились. Тогда вам не следует применять свойство Формат. В заключение отметим, что оно используется в полях числового и денежного типа, Дата/Время, Счетчик и Да/Нет. Свойство Формат не определено для полей текстового типа, полей Memo и гиперссылок, хотя в принципе такая настройка возможна.
Свойство Маска ввода целесообразно при отображении литеральных (символьных) констант, а также при вводе данных в пустые графы (бланки, таблицы и т. д.) – например, если все номера телефонов в списке имеют один формат. Использование маски ввода обеспечит сохранение информации в определенном формате. Таким образом, вы всегда сможете установить, в каком виде будут вводиться данные в каждый документ. Предположим, надо, чтобы все вводимые данные о кодах и телефонах городов области содержали одинаковое количество знаков. Перед вводом предварительно задайте свойство Маска ввода, и в каждый документ (таблицу) будет помещено необходимое число символов.
Если вы зададите одновременно оба свойства, произойдет следующее: Access будет применять Маску ввода при добавлении или редактировании данных, а Формат – при отображении сохраненной записи.
Установка значений свойств Маска ввода и Формат
Теперь рассмотрим установку значений свойств Маска ввода и Формат на конкретном примере. Откроем таблицу Страны в режиме конструктора.
Значение свойства Маска ввода может содержать до трех разделов, разделенных точкой с запятой (;).
Первый – представляет саму маску ввода (например,!(999) 000-0000). Перечень знаков, используемых для определения масок ввода, приводится в справочной системе Access 2002.
Второй – определяет режим занесения в таблицу текстовых констант, добавляемых к знакам, которые вводятся пользователем. 0 в данном компоненте указывает, что текстовые константы (например, скобки и дефисы в маске ввода телефонных номеров) сохраняются вместе с введенными пользователем значениями; значение 1 или пустое значение данного раздела свидетельствует о том, что сохраняются только знаки, введенные пользователем.
Третий – определяет знак, используемый для изображения пустых позиций в маске ввода, в которые помещаются вводимые пользователем знаки. В этом разделе можно указать любой знак; чтобы отобразить пустую строку, введите пробел, заключенный в кавычки (" ").
Чтобы задать свойство в поле Код страны, введите соответствующую строку в верхнюю часть окна (см. рис. 3.9).
Рис. 3.9
Если щелкнуть в ее пределах (см. рис. 3.10), можно будет вводить значения вручную. Вначале введем значение 0L → L в строку Маска ввода. Начиная со следующей вводимой записи и до тех пор, пока маска ввода не будет снова изменена, коды стран будут задаваться в том виде, который показан на рис. 3.11 для кодов Индии и Пакистана. Это происходит в соответствии с правилами настройки форматов, приведенными выше (раздел «Свойства полей»). (Мы не обсуждаем сейчас вопрос о смысле такой установки, а просто рассматриваем возможности маски ввода.)
Рис. 3.10
Рис. 3.11
Правда, при переходе из режима конструктора в режим просмотра таблицы (см. рис. 3.10 и 3.11) Access 2002 может предупредить пользователя о возможных опасностях, выдав информацию о том, что условия целостности данных изменены и информация может противоречить новым условиям, предложив при этом проверить существующие данные в новых условиях. Если подобное предложение поступит, то с ним имеет смысл согласиться и ответить Да.
Для выбора значений маски ввода может также использоваться мастер маски ввода. Если вы захотите воспользоваться его помощью и щелкнете по кнопке
как показано на рис. 3.10, то программа предложит сохранить таблицу (рис. 3.13).
Рис. 3.12
Рис. 3.13
После того как вы согласитесь с этим предложением (в случае несогласия вы никуда не продвинетесь), появится окно мастера маски ввода (см. рис. 3.12). Открывшееся окно предлагает вам выбрать Маску ввода в соответствии с заданным свойством Формат данных. Чтобы проверить работу маски ввода, можете ввести данные в поле Проба. Значения свойства Маска ввода для ввода вручную рассматривались выше. Здесь мы перечислим шаблоны для случая их задания мастером:
• Общий формат даты;
• Длинный формат даты;
• Средний формат даты;
• Короткий формат даты;
• Длинный формат времени;
• Средний формат времени;
• Короткий формат времени.
Чтобы изменить маску ввода, щелкните по кнопке Список. Теперь выберите в открывшемся поле какую-либо позицию, например Средний формат времени (рис. 3.12). Затем, щелкнув по кнопке Далее, вы перейдете в следующее окно мастера масок (см. рис. 3.14).
Рис. 3.14
В этом окне вы также можете изменить шаблон. Это можно сделать в поле Маска ввода, которое в этом случае активизируется. Далее в том же окне мастера масок вы можете изменить вид заполнителей или меток. Эти метки заполняют пробелы между значащими символами. Выбор нужной метки из списка производится в поле Вид заполнителя с помощью стрелки прокрутки. Указанные вами метки вводятся автоматически по мере набора символов. Использовав все возможности коррекции масок, которыми располагает мастер, вы получите не менее разнообразные и экзотические маски, чем те, что пользователь создает вручную.
Проверить, как введены данные, можно, указав их в поле проверки Проба и затем нажав клавишу Enter. После этого, если не последует возражений со стороны мастера, щелкните по кнопке Далее. В следующем окне (см. рис. 3.15) мастер масок предоставит вам еще одну возможность изменить маску для данного шаблона, задав ее значение и вид заполнителя.
Рис. 3.15
Затем мастер поинтересуется, как вы хотите сохранить данные (рис. 3.16). Вы можете сохранить их либо вместе с возможными вспомогательными символами (они указываются во второй части маски, но являются необязательными), либо без них.
Рис. 3.16
Когда вы дадите тот или иной ответ, щелкните по кнопке Готово, и маска будет сформирована. Если на этой стадии работы вы выберете опцию Далее, то сначала появится еще одно окно. В нем мастер масок сообщит вам, что теперь у него есть все необходимое для создания маски.
На рис. 3.17 и 3.18 мы видим, как выглядит изменение маски ввода в окне конструктора и в окончательном виде в таблице Страны.
Рис. 3.17
В нашем примере сформированная мастером маска будет работать с момента ее установки и до следующей корректировки. Все это время Access 2002 будет допускать ввод только тех записей, у которых код страны имеет четыре разряда. На рис. 3.18 показаны записи, введенные согласно заданным условиям.
Рис. 3.18
Сравнивая два способа формирования маски ввода (вручную и с помощью мастера масок), мы пришли к заключению, что первый путь значительно проще, и поэтому именно он рекомендован пользователю.
В отличие от установки маски ввода, свойство Формат задается только вручную; мастер отсутствует (возможно, это и к лучшему). Введем значение свойства Формат в текстовое поле Страна. Для этого в позицию Формат поместим символ >, который обозначает перевод текстовых символов в верхний регистр (рис. 3.19).
Рис. 3.19
Если теперь мы включим режим просмотра таблицы, которая была показана на рис. 3.18, то увидим что все строки в поле Страна заполнены прописными буквами (см. рис. 3.20). Кстати, это еще одно отличие свойства Формат от свойства Маска ввода: его установки влияют на все содержимое поля, независимо от времени его (содержимого) ввода.
Рис. 3.20
Создание и использование полей подстановки
В ряде случаев поле может включать лишь определенные значения, которые иногда содержатся в заранее заданном списке, а иногда – в самом поле, вместе с произвольно вводимыми данными. Бывают ситуации, когда ввод данных можно упростить и ускорить за счет использования подстановок – ввода понятий, уже содержащихся в определенных полях, например элементов списков. В качестве таких списков могут служить таблица, запрос в этой же или другой базе данных или список, созданный пользователем для многократного применения.
Рассмотрим создание подстановки на следующем примере. В сформированную перед этим таблицу (см. рис. 3.20) надо ввести новое поле Фирмы. Оно должно заполняться за счет подстановки значений из таблицы Фирмы, которая содержится в той же базе данных.
Для создания подстановок используется мастер подстановок. Запустить его можно:
• в режиме конструктора таблиц;
• в режиме таблицы.
Подстановка в режиме конструктора таблиц
Чтобы запустить мастер подстановок в режиме конструктора таблиц, сначала войдите в него. Затем щелкните по стрелке прокрутки в поле, которое вы хотите заполнить одним из значений (в нашем случае это поле Фирмы). В появившемся списке типов данных выберите мастер подстановок – рис. 3.21.
Рис. 3.21
В результате на экране возникнет первое окно мастера подстановок (см. рис. 3.22). Мастер создает столбец подстановок, то есть список значений, из которых надо выбрать подходящее. В этом окне следует указать, что нужно вывести на экран: список значений из таблицы или список запроса, который пользователь сам будет заполнять по своему усмотрению.
Рис. 3.22
Приняв решение, пользователь выбирает в диалоговом окне соответствующий переключатель, а затем щелкает по кнопке Далее.
Если был выбран первый вариант, мастер подстановок открывает следующее диалоговое окно (см. рис. 3.23). Здесь пользователь определяет таблицу и/или запрос, значениями которых он будет заполнять поле подстановки. Например, на рис. 3.23 показано, что эти значения выбираются из таблицы Фирмы. Теперь снова надо щелкнуть по кнопке Далее. Если вы передумали и хотите что-либо исправить в предыдущем окне, вернитесь к нему с помощью кнопки Назад или вообще отмените все предыдущие действия, щелкнув по кнопке Отмена.
Рис. 3.23
В следующем окне (см. рис. 3.24) вы должны определить объект-источник подстановки и указать те поля в этом объекте, из которых будут выбираться конкретные значения. Сначала пометьте их в левом поле с помощью кнопки с одной стрелкой, указывающей вправо (для каждого значения по отдельности), или с двумя стрелками (для всех сразу). Затем перенесите их в правое поле.
Рис. 3.24
Теперь повторите те же операции с кнопками, что и в предыдущем окне. Если вы выбрали Далее, то в следующем окне мастера подстановок (см. рис. 3.25) к вашим услугам появится столбец. В нем содержится перечень значений, из которых следует выбрать нужное (в нашем случае это названия фирм). В окне есть опция, рекомендующая скрыть ключевые поля (рекомендуется). Мы согласны с разработчиками Access и также советуем поставить в этом поле флажок.
Рис. 3.25
Если вас не устраивает ширина столбца и вы хотите ее изменить, мастер подстановок любезно порекомендует либо передвинуть мышью правую границу столбца, установив его желаемую ширину, либо дважды щелкнуть правой кнопкой мыши по заголовку столбца и задать его размер.
Теперь щелкните по кнопке Готово, и процесс будет завершен. На экране появится окно с предложением сохранить созданную таблицу сейчас или позже (рис. 3.26), а на следующем рисунке (см. рис. 3.27) – и сама таблица, где следует нажать на стрелку прокрутки. В результате в поле Фирмы появится столбец значений, в котором можно выбрать нужную строку. Если же щелкнуть по кнопке Далее, то в конечном счете вы выйдете к той же таблице, но через две промежуточных стадии (на рисунках они не представлены). На первом этапе следует назвать таблицу или согласиться с предлагаемым именем (мы уже знаем, что это всегда Таблица с каким-либо номером). На втором этапе Access поинтересуется, хотите ли вы перед выводом на экран итоговой таблицы запомнить исходную.
Рис. 3.26
Рис. 3.27
Подстановка в режиме таблицы
Сначала откройте в режиме просмотра таблицу, в которой надо создать поле подстановки. Для этого в окне базы данных либо воспользуйтесь кнопкой Открыть, либо дважды щелкните по имени нужной таблицы. В качестве исходной при этом рассматривается таблица, показанная на рис. 3.18. Затем в меню Вставка окна базы данных следует отметить пункт Столбец подстановок. В результате на экране появится уже знакомое диалоговое окно мастера подстановок (см. рис. 3.20). После этого дальнейшие операции выполняются так же, как и в предыдущем разделе. Все этапы данного процесса продемонстрированы на рис. 3.20-3.25.
Организация связей между таблицами
Исходные таблицы в Access представляют собой обычные плоские таблицы Конечно, они не позволяют формировать иерархические информационные структуры; для данной цели используется аппарат связей между таблицами. Access 2002 дает возможность организовывать и отображать эти связи двумя способами:
• путем создания непосредственных связей между таблицами;
• путем создания вложенных таблиц данных.
Кроме того, в Access 2002, так же как и в Access предыдущих версий, существует довольно мощный аппарат гиперссылок, который применим для формирования таблиц и форм. Мы обсудим возможности использования гиперссылок на примере работы с географическими картами в главе 4.
Создание связей между таблицами
Когда между двумя таблицами устанавливается связь, это означает, что величины из одной таблицы ставятся в соответствие величинам из другой таблицы.
Создавать или изменять связи между открытыми таблицами нельзя, поэтому перед началом работы их следует закрыть. Теперь перейдите в окно базы данных (см. рис. 3.1). Такой переход осуществляется двумя способами. Первый вариант: в режиме просмотра любой формы щелкните по кнопке
на панели базы данных. Другой способ: находясь в любом диалоговом окне Access 2002, воспользуйтесь функциональной клавишей F11. Затем щелкните по кнопке
открывающей схему данных, на панели инструментов. Если в базе данных еще не определено никаких связей, на экран будет выведено окно Добавление таблицы (см. рис. 3.28). Если же в открытую на экране схему данных, пример которой показан на рис. 2.1, необходимо добавить таблицы, которых в этой схеме еще нет, щелкните по кнопке
на панели инструментов открытой схемы данных.
Рис. 3.28
Итак, вы последовательно добавляли все таблицы, то есть помечали их в окне и затем щелкали по клавише Добавить в окне, показанном на рис. 3.28. Теперь закройте это окно с помощью кнопки Закрыть. В результате появится диалоговое окно Схема данных, представленное на рис. 3.29. В этом окне вы должны организовать связи между таблицами. Связи устанавливаются через отдельные, определяемые пользователем поля. Для связывания этих полей надо выбрать поле в одной таблице и перетащить его, наложив на соответствующее поле в другой таблице.
Рис. 3.29
Обычно связывают ключевое поле родительской таблицы (внешний ключ) с соответствующим ему полем в другой, дочерней таблице. Оно часто имеет то же имя, что и первое, но в общем случае это не обязательно. Зато строго обязательными являются следующие условия:
• в одной или в обеих таблицах должно быть поле, принимающее уникальные (не имеющие дублей) значения во всех записях;
• связываемые поля должны иметь одинаковые типы данных. Однако из этого правила есть два исключения:
– поле счетчика разрешается связывать с числовым полем, если в последнем задано значение Длинное целое;
– поле счетчика разрешается связывать с числовым полем, если для обоих полей в свойстве Размер поля задано значение Код репликации;
• связываемые поля числового типа должны иметь одинаковые значения свойства Размер поля.
Для начала свяжите поле Код в таблице Страны с полем Код страны в таблице Фирмы. Для этого щелкните левой кнопкой мыши по одному из связываемых полей и, не отпуская ее, перетащите мышь на другое поле. На экране появится диалоговое окно Изменение связей (рис. 3.30).
Рис. 3.30
В левой части этого окна указано связываемое поле родительской таблицы, а в правой – связываемое поле дочерней таблицы. Если надо изменить одно из этих полей, можно щелкнуть в нем по стрелке прокрутки, а затем выбрать желаемое значение. Установив флажок Обеспечение целостности данных, вы зададите условие: ни в одной из связанных таблиц не будет записей, у которых нет соответствующих «партнеров» в другой таблице. Еще два флажка определяют режимы обновления и удаления полей:
• каскадное обновление связанных полей – устанавливает, что значения поля Код страны в таблице Фирмы изменяются в соответствии со значениями поля Код страны в таблице Страны. Этот флажок имеет смысл установить;
• каскадное удаление связанных записей – устанавливает, что если из первой таблицы будут удалены названия каких-либо стран, то удалятся и соответствующие фирмы во второй таблице. В рассматриваемой ситуации этот флажок вряд ли следует устанавливать, поскольку, во-первых, фирма может иметь дочернее отделение с тем же именем в другой стране; во-вторых, если приборы, выпускаемые этой фирмой, в базе данных остаются, то они в случае каскадного удаления могут оказаться «беспризорными».
Заслуживает внимания клавиша Ообъединение. Щелкнув по ней, вы откроете список возможных критериев для отбора тех записей, которые будут связываться. Вот имеющиеся варианты:
• связь распространяется только на те записи, в которых значения обеих таблиц совпадают;
• связь распространяется на все записи из таблицы Страны и только на те поля таблицы Фирмы, в которых значения, содержащиеся в объединяемых полях, совпадают;
• связь распространяется на все записи из таблицы Фирмы и только на те поля таблицы Страны, в которых значения объединяемых полей совпадают.
Для нашего примера выберем первый, самый простой вариант. Стоит отметить, что обычно подобные решения зависят от конкретной ситуации.
Итак, в поле Тип отношения следует указать, какого типа отношения устанавливаются между таблицами. В данном случае это отношение один-ко-многим.
Теперь щелкните по кнопке Создать. В окне Схема данных появится линия связи между таблицами Страны и Фирмы – рис. 3.31.
Рис. 3.31
Проделав такую процедуру для всех таблиц базы данных, вы получите необходимую систему связей, которая была в качестве примера показана на рис. 2.1.
Мастер печати связей
Чтобы напечатать схему связей, необходимо:
1. Открыть соответствующую базу данных.
2. Открыть подменю Сервис в строке меню этой базы данных. Выбрать пункт Схема данных, чтобы открыть одноименное диалоговое окно.
3. Открыть меню Файл, а в нем активизировать опцию Печать схемы данных.
Подтаблицы
В Access 2002 возможен и другой вариант введения и отображения связей между таблицами, имеющийся начиная с версии Access 2000, – использование подтаблиц. Иерархичность структуры баз данных в этом случае проявляется особенно наглядно.
Подтаблицу можно добавить в любую таблицу, запрос или форму. Форма в режиме формы или таблицы также может иметь подтаблицу. В подтаблицы могут включаться связанные или объединенные данные, находящиеся и в таблицах, и в формах, и в запросах, поэтому вложенными бывают также и формы, и запросы. В этом разделе мы расскажем именно о подтаблицах, создаваемых в режиме таблиц, а об использовании этого механизма для форм и запросов поговорим в соответствующих разделах.
Чтобы создать подтаблицу, как обычно, сначала войдите в окно базы данных и откройте требуемую таблицу (пусть это будет таблица Страны). Она будет выглядеть так, как показано на рис. 3.32.
Рис. 3.32
Перейдем в режим конструктора и щелкнем в этом режиме правой кнопкой мыши по заголовку таблицы – Страны: таблица (рис. 3.33). Откроется контекстное меню, в котором надо выбрать позицию Свойства. В результате на экране появится окно Свойства таблицы, в котором нас интересует конкретная позиция Имя подтаблицы. После щелчка в этой позиции (левой кнопкой) в строке появится стрелка прокрутки
после нажатия на нее отобразится меню, содержащее те объекты базы данных (таблицы, формы, запросы), которые мы хотели бы видеть в качестве подчиненных в таблице Страны (рис. 3.34).
Рис. 3.33
Рис. 3.34
Выберем в этом меню позицию Таблица. Фирмы и после обычных преобразований (режим конструктора, сохранение изменений в таблице, окно базы данных, открытие таблицы) получим первичную таблицу Страны – рис. 3.35.
Рис. 3.35
Следует добавить, что кроме поля Имя подтаблицы необходимо заполнить еще два поля в указанном окне Свойства таблицы, а именно: Подчиненные поля и Основные поля. Их надо заполнить именами тех полей, которые являются связующими между таблицами. В данном случае подчиненным полем будет Код фирмы, основным полем – Код.
На первый взгляд эта таблица идентична предыдущей, приведенной на рис. 3.32. Однако обратите внимание на значки (+), стоящие возле каждого кода фирмы. Они указывают на то, что здесь в свернутом виде содержится информация. Если щелкнуть по такому значку, соответствующая строка раскроется, и вы увидите перечень фирм, относящихся к этой стране, в данном случае USA (см. рис. 3.36).
Рис. 3.36
Иначе говоря, на рис. 3.36 продемонстрирована иерархическая двухуровневая структура Страны и Фирмы. Теперь для таблицы второго уровня – Фирмы – выполним такие же действия с окнами Свойства таблицы и Имя подтаблицы (см. рис. 3.34). В качестве родительской таблицы примем Фирмы, а в качестве дочерней – Менеджер. Связанными полями в обеих таблицах определим Код фирмы. Тогда таблица Фирмы, в свою очередь, будет содержать свернутую информацию о менеджерах, что также показано на рис. 3.34. Если вы раскроете эту информацию, то увидите уже трехуровневую иерархическую структуру Страны, Фирмы и Менеджер (см. рис. 3.38). Таким способом в принципе можно создать иерархическое дерево. В пределах таблицы можно вложить до восьми уровней подтаблиц. Однако каждая таблица или подтаблица, как мы видим, может иметь только одну вложенную подтаблицу. Подтаблица, относящаяся к подчиненной форме, может использовать в качестве источника данных таблицу, запрос или форму.
Рис. 3.37
Рис. 3.38
Кроме того, Access 2002 автоматически создает подтаблицу в таблице, имеющей отношение «один-к-одному» или являющейся стороной «один» в отношении «один-ко-многим», если свойство таблицы Имя подтаблицы имеет значение Авто.
Но это еще не все. Подтаблицу можно создать (по мнению автора) и более простым способом. И в дополнение к этому Access 2002 позволяет создать инвертированную подтаблицу. Если подтаблица, включенная в таблицу Страны, показывает фирмы, относящиеся к данной стране (точнее, к записи, связанной с этой страной), то инвертированная подтаблица, включенная в таблицу Фирмы, отобразит страны, связанные с этой фирмой.
Покажем это построение с использованием более простого пути. Откроем таблицу Фирмы (рис. 3.38).
Теперь откроем меню Вставка и в нем позицию Подтаблица. На вкладке Таблицы выделим Страны. В этом случае таблица Фирмы будет основной, а таблица Страны – подчиненной. Поэтому в нижней части диалогового окна Вставка подтаблицы укажем с помощью стрелок прокрутки в качестве основного поля Код фирмы, а в качестве подчиненного – Код (рис. 3.39).
Рис. 3.39
Открытая таблица Фирмы будет выглядеть так, как показано на рис. 3.40.
Рис. 3.40
В качестве примера открыто два фрагмента. При этом в таблице Страны созданная раньше подтаблица (рис. 3.35) осталась неизменной. Если необходимо одним щелчком развернуть все записи подтаблицы или свернуть все раскрытые записи, следует выбрать позицию Подтаблица в меню Формат (при открытой таблице Фирмы). Эта же позиция позволяет удалить подтаблицу.
Следует сказать, что такой способ применим для создания любой подтаблицы, а не только для инвертированной, как могло бы показаться из данного примера. Он не изменяет уже имеющихся связей между таблицами, отображаемых на схеме данных, но требует, чтобы между основной таблицей и подтаблицей связь такого типа была установлена. Если такая связь при создании подтаблицы отсутствует, Access с вашего позволения установит ее автоматически.
Таким образом, создание подтаблиц в Access правильнее отнести не к новому типу связей, а скорее к новому типу их отображения.
Резюме
1. Формирование таблиц является первым этапом создания БД, так как таблицы в Access – это те первичные, исходные файлы, на основе которых в дальнейшем строится вся база данных. Access 2002 и предыдущие версии предоставляют пользователю несколько разных вариантов построения таблиц.
2. В настоящей главе рассматривались три варианта формирования таблиц: режим таблицы или режим ввода данных, режим конструктора и мастер таблиц. Еще два варианта создания таблиц – импорт таблиц и связь с таблицами – рассматриваются в том разделе главы 7, который посвящен объединению разнородных баз данных.
3. Наиболее детальным, гибким и основательным (и, соответственно, самым трудоемким) методом формирования таблиц является режим конструктора.
4. Для надежного контроля за файлами в Access предусмотрен механизм системных первичных кодов. Этот механизм очень полезен, и если у пользователя нет каких-то серьезных причин отказываться от введения первичных кодов, рекомендуется их всегда создавать.
5. Используемые в Access типы данных очень разнообразны, и для их эффективного применения следует перед выбором типа еще раз уточнить назначение этих данных при функционировании БД.
6. В Access 2002 предусмотрены два свойства полей: Формат и Маска ввода. Обе опции позволяют задавать формат, в котором данные вводятся или, точнее, запоминаются при вводе в таблицу.
Свойство Формат рекомендуется применять при последовательном вводе данных в таблицу.
Свойство Маска ввода целесообразно при отображении литеральных (символьных) констант, а также при вводе данных в пустые графы (бланки, таблицы и т. д.). При этом пользователю рекомендуется сформировать маску ввода вручную – это значительно проще.
7. Часто поле может включать лишь определенные значения, которые иногда содержатся в заранее заданном списке, а иногда – в самом поле, вместе с произвольно вводимыми данными. В этих случаях ввод данных можно упростить и ускорить за счет использования подстановок.
8. Для создания информационных структур можно использовать аппарат связей между таблицами, либо возможность организации вложенных подтаблиц, либо и то и другое вместе. Эти средства позволяют пользователю создавать достаточно сложные структуры данных.