Пензенский государственный университет Факультет вычислительной техники Кафедра "Информационно-вычислительные системы"
...
29 downloads
349 Views
800KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Пензенский государственный университет Факультет вычислительной техники Кафедра "Информационно-вычислительные системы"
РУКОВОДСТВО ПО ИСПОЛЬЗОВАНИЮ РЕДАКТОРА БАЗ ДАННЫХ OPENOFFICE BASE Методические указания
2010
УДК 681.3.07
Методические указания разработаны на кафедре "Информационно-вычислительные системы" и предназначены для студентов Факультета вычислительной техники специальности 080801 "Прикладная информатика в экономике" при выполнении практических и лабораторных работ.
Составители: А.В.Еременко, Е.М.Голобокова.
2
Оглавление Введение........................................................................................................................................................4 Основные понятия теории баз данных......................................................................................................4 Встроенная СУБД HSQLDB.......................................................................................................................6 Разработка структуры БД........................................................................................................................6 Создание базы данных.................................................................................................................................7 Создание таблицы Т_ПРОДАВЦЫ.....................................................................................................10 Создание первичного ключа............................................................................................................11 Создание других полей....................................................................................................................12 Создание таблицы Т_ТОВАРЫ............................................................................................................14 Создание таблицы Т_ПРОДАЖИ........................................................................................................15 Определение связей между таблицами...............................................................................................15 Связывание таблиц Т_ПРОДАЖИ и Т_ПРОДАВЦЫ...................................................................16 Связывание таблиц Т_ПРОДАЖИ и Т_ТОВАРЫ.........................................................................17 Ввод данных без использования формы.............................................................................................18 Простые формы..........................................................................................................................................19 Создание формы с помощью мастера..................................................................................................19 Создание выпадающего списка............................................................................................................23 Создание простых запросов......................................................................................................................27
3
Введение Модуль Base (редактор баз данных) обеспечивает инструментальные средства для ежедневной работы с базами данных, использующие простой интерфейс. С его помощью можно создавать и редактировать формы, отчеты, запросы, таблицы, представления и связи таким же способом, как и с помощью других популярных приложений работы с базами данных. Base имеет много новых возможностей, таких как способность анализировать и редактировать связи между данными на основе диаграмм представления этих данных. Base по-умолчанию использует встроенную систему управления реляционными базами данных (СУБД) HSQLDB. Кроме того, он может подключаться к базам данных dBASE, Microsoft Access, MySQL, Oracle, а также к любым ODBC или JDBC совместимым базам данных. Base также обеспечивает поддержку языка запросов ANSI-92 SQL, но не всех его возможностей.. Модуль Base предназначен для пользователей OpenOffice.org 3.1 (OOo 3.1), которые хотят работать с базами данных, но о базах данных либо не имеют представления, либо знают очень мало. Поэтому в нем используются несколько другая (упрощенная) терминология, чем терминология теории баз данных. Освоение этого модуля в полном объеме требуется только для специалистов по базам данных, для пользователей же важно знать, как использовать функции этого модуля в повседневной работе. Данные методические указания предназначены для специалистов, знающих теорию баз данных, поэтому в них будут описаны основные понятия, относящиеся к базам данных (БД) и системам управления базами данных (СУБД), а использование модуля Base будет рассмотрено шаг за шагом на примере создания простой базы данных. База данных – это некоторый набор связанных данных, относящихся к определенным свойствам различных объектов реального мира (реальных объектов, процессов, событий) и определенным фактам об этих объектах. Например, объект работник имеет определенную фамилию, имя и отчество, а такой-то поставщик товаров находится в Саратове. Объекты, данные о которых хранятся в базе данных, называются сущностями. Для доступа к информации, хранящейся в базе данных, необходимо иметь систему управления базами данных, представляющую собой программное обеспечение, которое пользователи используют для создания и поддержки базы данных. Замечание
Следует иметь в виду, что иногда термин база данных используется даже тогда, когда на самом деле подразумевается СУБД (в упомянутом ранее толковании). Вот типичный пример: "База данных X превосходит по производительности базу данных Y в два раза". Такое небрежное обращение с терминами часто приводит к путанице, тем не менее оно очень широко распространено.
Основные понятия теории баз данных В настоящее время термины база данных и система управления базами данных используются исключительно как относящиеся к компьютерам. В общем случае термин база данных можно применить к любому набору данных об определенном объекте. Например, в качестве базы данных можно рассматривать расписание движения поездов или книгу регистрации данных о заказах покупателей и выполнении этих заказов. Такие базы данных можно назвать ручными. Ручные базы данных имеют ряд существенных недостатков, таких как трудности поиска нужной информации и трудности их модификации. Использование компьютеров позволяет устранить многие проблемы, свойственные ручным базам данных. Они обеспечивают высокую скорость поиска информации и обладают высокой компактностью. В ручных базах данных информация о сущностях хранится в 4
виде таблиц. Существует значительное количество программных продуктов, которые позволяют организовать данные и поместить их в таблицу. Однако это не означает, что любая такая программа предоставляет широкие возможности по эффективному управлению базой данных. Например, программы подготовки текстов, такие как OOo Writer, могут работать с таблицами, но имеют ограниченные возможности при их использовании в качестве систем управления базами данных. Модуль Base представляет собой редактор реляционных баз данных, который позволяет эффективно управлять создаваемыми с его помощью базами данных. Такие базы данных хранятся в файлах с расширением .odb. Кратко реляционную базу данных можно представить как систему, в которой данные передаются пользователю в виде упомянутых ранее таблиц (и никак иначе). Здесь возникает резонный вопрос: почему же мы называем такую базу данных именно реляционной, а не табличной? Ответ прост: термин relation (отношение) – это математическое название таблицы. Как правило, реляционная база данных состоит из одной или нескольких таблиц. Каждая таблица предназначена для хранения определенных сведений (атрибутов), относящихся к определенной сущности. Для этого каждая таблица содержит ряд записей, каждая из которых представляет собой набор полей, которые иногда называют столбцами, предназначенных для хранения значений атрибутов сущностей. Прежде чем заносить данные в таблицы, нужно определить структуру этих таблиц. Под этим понимается не только описание наименований и типов столбцов (полей записи), но и ряд других характеристик (например, формат данных, критерии проверки вводимых данных). Структуру таблицы можно легко представить себе в виде бланка документа, поля которого необходимо заполнить данными. Между таблицами могут существовать связи, которые осуществляются с помощью использования совпадающих значений в одном или нескольких полях записи (атрибутах) этих таблиц. Например, клиенты и заказы имеют связь типа один ко многим, так как одной записи в таблице, содержащей сведения о клиентах, может соответствовать несколько записей в таблице заказов этих клиентов, а каждый заказ соответствует одному клиенту. Если же рассмотреть связь между книгами и авторами этих книг, то это будет связь типа многие ко многим, так как один автор может написать несколько книг, а одна книга может иметь несколько авторов. И последний тип связей между таблицами – это связи типа один к одному. Такой тип связи встречается гораздо реже. Как правило, это бывает в двух случаях: запись имеет большое количество полей, и тогда данные об одном типе объектов разносятся по двум связанным таблицам, или нужно определить дополнительные атрибуты для некоторого количества записей в таблице. Тогда создается отдельная таблица для этих дополнительных атрибутов, которая имеет связь типа один к одному с основной таблицей. В некотором смысле, таблицу можно представить и как электронную таблицу Calc : поля похожи на столбцы, а записи на строки данных электронной таблицы. Однако, имеется существенное отличие : в таблице базы данных тип содержимого каждого столбца определяется структурой таблицы и содержит в каждой строке одинаковые по типу данные. При каждом вводе новых данных в бланк документа создается новая запись. Поле, по существу является областью, предназначенной для хранения данных, которые должны удовлетворять определенным правилам. Для реляционных баз данных существуют следующие правила: • тип данных : должен быть определен тип данных, которые хранятся в поле каждой записи. Например, целые числа или строки символов. В дальнейшем будет рассказано о различных типах данных, доступных в используемой БД. • ограничения : на данные могут быть установлены определенные ограничения. Например, требование уникальности означает, что определенное поле записи (столбец) для разных записей не может содержать одно и то же значение. Требование обязательных данных означает, что поле записи всегда должно содержать данные и не может быть пустым.
значение по умолчанию : можно определить, какое значение будет записано в поле записи по умолчанию, если пользователь не введет в него никаких данных. •
5
• первичный ключ : базы данных требуют наличия в каждой таблице первичного ключа. Первичный ключ – это поле записи (или совокупность полей), которое выбрано для уникальной идентификации записей в БД. В модуле Base такой первичный ключ может поддерживаться автоматически.
Встроенная СУБД HSQLDB Модуль Base может быть использован для редактирования внешней базой данных (например MySQL), но в данном документе рассматривается использование и создание баз данных с помощью встроенной в него СУБД HSQLDB. Документы Base (базы данных) содержат следующие элементы : •
структуру базы данных и сами сохраняемые в ней данные;
•
формы для ввода, чтения и изменения данных;
•
запросы для выбора из БД и отображения необходимой информации.
СУБД HSQLDB используется в OpenOffice.org в автономном (встроенном) режиме. В таком режиме пользователю не требуется отдельно запускать на выполнение саму СУБД, это выполняет модуль Base. Автономный режим означает, что в любой момент времени с одной базой данных может работать только один пользователь. Такие системы называются также настольными системами. Сама СУБД HSQLDB позволяет работать с одной базой данных одновременно нескольким пользователям, но этот режим не используется в OpenOffice.org. В отличие от других СУБД, HSQLDB хранит все данные в одном файле, хотя в нем хранится несколько разных таблиц. Это упрощает обмен данными и формами между пользователями OOo Base, поскольку все указанные элементы содержатся в одном объединенном файле с расширением .odb. С другой стороны, настольные СУБД не подходят для одновременного использования многими пользователями, поскольку не позволяют определять права доступа пользователей к базам данных. Кроме того, СУБД HSQLDB имеет некоторые недостатки в отношении производительности, что не позволяет использовать ее для работы с очень большими объемами данных. Замечание
В данном документе рассматриваются вопросы создания базы данных с помощью встроенной СУБД HSQLDB. Для работы с такими встроенными СУБД на компьютер не требуется устанавливать дополнительные приложения, обеспечивающие выполнение обсуждаемых действий. Результатом этого может быть то, что некоторые действия, описанные в данном документе, могут оказаться недоступными при работе с другими (внешними) СУБД.
Разработка структуры БД Прежде чем начинать использование инструментов модуля Base, необходимо рассмотреть организацию данных в нашем проекте.
6
Пусть имеется фирма, которая продает свои товары через частных продавцов. Каждый продавец реализует несколько товаров. Реализация товара может происходить в течение некоторого времени. После реализации товара или его части продавцы сдают выручку в кассу фирмы. В базе данных необходимо хранить информацию о том, сколько и какого товара получил каждый продавец для продажи, а также вести кассовую книгу для регистрации сдаваемых продавцами выручек. В данном руководстве, мы предположим, что хотим создать базу данных для фирмы, в которой должна храниться следующая информация: •
записи о продавцах этой фирмы,
•
записи о продаваемых фирмой товарах,
•
записи о выданных продавцам товарах,
•
записи о сдаваемых продавцами выручках.
Записи о продавцах фирмы должны содержать его идентифицирующую информацию и почтовый адрес для пересылки писем и других отправлений. Записи о товарах должны содержать название товара и стоимость единицы товара. Учет выданных продавцам товаров должен предусматривать хранение даты получения продавцом товара, количества полученного товара и контрольного срока его реализации. Для упрощения решаемой задачи, учет поступления выручки от продавцов рассматривать не будем. В связи с этим наша база данных должна содержать не менее трех таблиц : таблицу с данными о продавцах фирмы, таблицу об имеющихся товарах и таблицу учета выданных продавцам товаров.
Создание базы данных Для создания базы данных выполните команду меню Файл > Создать > Базу данных. Создать базу данных можно также с помощью контекстного меню пиктограммы Создать, расположенной на стандартной панели инструментов. Для этого щелкните мышкой по треугольнику рядом с пиктограммой и выберите в контекстном меню команду Базу данных (см. Рис. 1). При любом способе создания, откроется окно Мастер базы данных, в котором на первом шаге нам предлагается выбрать, создавать ли новую базу данных, открыть уже существующий файл базы данных или подключиться к существующей (внешней) базе данных. По умолчанию выбрана радиокнопка Создать базу данных (см. Рис. 2). Мы, конечно, согласимся с этим выбором. Щелкните по кнопке Далее. На втором шаге мастер предложит определить два параметра: • зарегистрировать или нет базу данных. Если база данных зарегистрирована, то она доступна в качестве источника данных для всех ООо документов, например, для вставки данных в письмо, создаваемое с помощью модуля ООо Writer. Позже можно изменить этот параметр, поэтому оставьте существующий выбор по умолчанию. • открыть базу данных на редактирование или создать таблицу с помощью мастера. Оставьте этот параметр, как он определен по умолчанию (см.Рис. 3).
7
Пиктограмма Создать
Рис. 1: Создание базы данных Щелкните по кнопке Готово, после чего можно сохранить базу данных в выбранном каталоге под выбранным именем (используем имя Продажа товаров).
Рис. 2: Первый шаг мастера базы данных.
8
После этого будет открыто основное окно модуля Base (см. Рис. 4). Здесь можно работать с таблицами, запросами, формами и отчетами. Можно создавать указанные объекты, редактировать их и делать многое другое. В дальнейшем, каждый раз при открытии базы данных Продажа товаров, на экран будет выводиться окно Продажа товаров.odb - OpenOffice.org. Используя это окно, в базу данных можно будет вносить любые изменения. В качестве названия этого окна Base всегда использует сочетание (название базы данных) - OpenOffice.org. При работе с базой данных вы должны регулярно сохранять ее. Это означает, что вы должны сохранять не только текущие изменения, внесенные в эту базу данных, но и всю базу данных целиком. Например, при создании первой таблицы, вы должны ее сохранить в базе данных перед тем, как закрыть окно, отображающее эту таблицу. Пиктограмма Сохранить на Стандартной панели инструментов после закрытия таблицы, будет находиться в активном состоянии. Необходимо щелкнуть мышкой по этой пиктограмме и она перейдет в пассивное состояние. При этом будет сохранена не только таблица, но она также станет частью вашей базы данных. Как показано на Рис. 4, секция База данных содержит четыре пиктограммы (иконки): Таблицы, Запросы, Формы, Отчеты, которые можно использовать для выбора объекта, с которым мы работаем в данный момент. Секция Задачи служит для выбора различных режимов работы с объектами базы данных. Каждый из указанных объектов можно создавать в двух режимах – с помощью мастера или в режиме дизайна. Секция Формы отображает различные ранее созданные объекты. На приведенном рисунке эта секция пуста, поскольку еще не создано ни одной формы. Секция Отчеты служит для вывода на печать выбранных данных из таблиц базы данных.
Рис. 3: Второй шаг мастера базы данных 9
Рис. 4: Рабочие области главного окна Base
Создание таблицы Т_ПРОДАВЦЫ Выберите в секции Базы данных объект Таблицы и щелкните по строке Создать таблицу в режиме дизайна. На экране появится окно Проектирование таблицы, показанное на Рис. 5. Использование режима дизайна для создания таблицы считается более профессиональным режимом, так как позволяет непосредственно ввести информацию о каждом столбце (каждом поле записи) создаваемой таблицы. Можно заметить, что для каждого поля записи (атрибута сущности) создаваемой таблицы имеются столбцы Название поля, Тип поля и Описание, а также секция Свойства поля. С правой стороны в секции Свойства поля, находятся подсказки по параметрам каждого поля. Зеленый треугольник в первом столбце показывает, какое поле (атрибут) является текущим и выбрано для отображения его свойств. Как было сказано выше, записи о продавцах фирмы должны содержать: его идентифицирующую информацию (фамилия, имя, отчество и дата_рождения), почтовый адрес для пересылки писем и других отправлений (адрес, индекс), а также ключевое поле. СУБД HSQLDB использует для имен полей и таблиц символы в кодировке Unicode. Тем не менее, в данном руководстве, мы будем использовать только русские символы и не будем применять пробелы в указанных именах. Хотя для совместимости при экспорте структуры базы данных в другие СУБД может потребоваться использование латинских букв. Имена таблиц будем набирать заглавными буквами и начинать их с символов "T_". Имена полей будем набирать строчными буквами, а первичные ключи будем заканчивать символами "_ном".
10
Рис. 5: Окно Конструктор таблиц
Создание первичного ключа
Как было сказано выше, каждая таблица должна иметь первичный ключ. Этот первичный ключ необходим для того, чтобы уникальным образом идентифицировать каждую запись таблицы. Самым простым методом идентификации каждой записи таблицы является использование уникальных номеров для каждой из них: первый продавец будет иметь номер 1, второй — номер 2 и т.д. Каждая запись при таком методе идентификации будет иметь свой номер, причем все номера будут разными. При этом модуль Base может автоматически назначать каждой записи различные номера. Используем для создаваемой таблицы этот метод идентификации записей. Для создания первичного ключа необходимо: •
присвоить полю имя. Используем имя продавец_ном.
• определить тип данных для первичного ключа. Следует использовать тип Integer (целое число). Для этого надо щелкнуть мышкой по кнопке со стрелкой, расположенной в правой части столбца, и из контекстного меню выбрать необходимый тип (см. Рис. 6). • определить дополнительные свойства поля первичного ключа. Возможные параметры зависят от типа данных. Для нашего первичного ключа, установим автоматическое создание его значения. Чтобы сделать это, надо для параметра Автозначение в секции Свойства поля, расположенной в нижней части окна, выбрать значение Да (см. Рис. 7). Это значит, что создаваемые номера будут действительно уникальными (две записи таблицы никогда не будут иметь одинаковое значение первичного ключа продавец_ном). Значения остальных свойств этого поля можно оставить равными значениям по умолчанию.
11
Рис. 6: Определение типа данных определить, что данное поле будет содержать первичный ключ, для чего надо щелкнуть правой кнопкой мыши по зеленому треугольнику слева от имени поля и выбрать из контекстного меню строку Первичный ключ. Слева появится пиктограмма (иконка) с изображением ключа, показывающая, что в этом поле находится первичный ключ таблицы. К этому же результату приведет переход в следующую строку конструктора таблиц (путем установки в ней курсора), если значением свойства Автозначение является значение Да. •
Рис. 7: Свойства поля для первичного ключа При сохранении таблицы в первый раз, необходимо щелкнуть мышкой по пиктограмме Сохранить, расположенной на Стандартной панели инструментов, и в появившемся окне ввести следующее имя этой таблицы: Т_ПРОДАВЦЫ. Создание других полей
Теперь, создайте поле с именем фамилия, для которого определите тип данных Varchar. Тип Varchar используется для хранения данных в виде строки символов, поэтому надо установить максимальную длину этой строки, что выполняется в секции Свойства поля. Для фамилии достаточно выбрать максимальную длину, равную 50, и выбрать значение параметра Обязательное равным Да, что будет заставлять пользователя вводить фамилию при добавлении новой записи в таблицу. Не стоит создавать запись для продавца, чья фамилия неизвестна. Используя ту же процедуру, создайте поля имя и отчество с теми же значениями свойств. Затем создайте поле с именем дата_рождения, для которого используйте тип Date. Этот тип предназначен для хранения информации о датах. Для идентификации личности достаточно этой минимальной информации о ней: фамилия, имя, отчество и дата_рождения, поэтому значением параметра Обязательное для этих полей должно быть Да. Можно также выбрать формат, в котором должны отображаться даты при чтении их из таблицы. Оставим для формата даты предлагаемое значение по умолчанию "01.01.00", которое можно изменить в любой момент времени по требованию пользователя.
12
Далее создайте поле с именем адрес, с типом Varchar, с параметром Длина равным 50 и значением параметра Обязательное равным Нет. На самом деле, можно ввести запись для продавца без обязательного ввода его адреса, который всегда можно ввести позднее. Теперь создайте поле с именем индекс. Его тип можно определить как Integer для тех почтовых индексов, которые состоят только из цифр. Однако, на самом деле это поле содержит строку символов, даже если она содержит только цифры. Мало вероятно, что когда нибудь надо будет использовать почтовый индекс в математических расчетах. Поэтому определим для этого поля тип Varchar. Установите необходимую длину этого поля, учитывая возможные длины почтовых индексов для конкретной страны, например, для России, следует использовать значение 6. В следующей таблице приведено описание различных полей таблицы Т_ПРОДАВЦЫ и значения их свойств: Имя поля
Тип
Свойства
продавец_ном
Integer
Автозначение : Да Первичный ключ
фамилия
Varchar
Обязательное : Да Длина : 50
имя
Varchar
Обязательное : Да Длина : 50
отчество
Varchar
Обязательное : Да Длина : 50
дата_рождения
Date
Обязательное : Да
адрес
Varchar
Обязательное :Нет Длина : 50
индекс
Varchar
Обязательное: Нет Длина: 6
Структура разработанной таблицы показана на Рис. 8. Не забудьте сохранить таблицу под именем T_ПРОДАВЦЫ, если вы это не сделали ранее. Таблицы можно представлять также в виде схемы — имени таблицы, за которым (в скобках) перечисляются имена атрибутов. При этом поля первичного ключа подчеркиваются: T_ПРОДАВЦЫ (продавец_ном, фамилия, имя, отчество, дата_рождения, адрес, индекс). Теперь можно закрыть окно Конструктор таблиц, а имя таблицы, которую вы только что создали, появится в списке таблиц при щелчке по иконке Таблицы в секции База данных. Если теперь дважды щелкнуть по иконке, представляющей таблицу T_ПРОДАВЦЫ, то откроется окно, в котором будет отображена таблица в табличном представлении, и вы сможете вводить данные непосредственно в каждое поле. Можно проверить, выполняются ли те ограничения, которые вы определили ранее, например, оставив поле фамилия пустым или попробовав ввести более шести символов в поле индекс: модуль OOoBase откажется регистрировать введенные данные. Далее мы рассмотрим другие более удобные способы ввода и чтения данных. А теперь удалите введенные пробные данные (щелкните правой кнопкой по записи и выберите Удалить строки), а затем закройте окно.
13
Рис. 8: Структура созданной таблицы T_ПРОДАВЦЫ.
Создание таблицы Т_ТОВАРЫ Создайте в режиме дизайна новую таблицу T_ТОВАРЫ, а затем таким же образом, как и для предыдущей таблицы, создайте следующие поля : Имя поля
Тип
Свойства
товар_ном
Integer
Автозначение : Да Первичный ключ
название
Varchar
Обязательное : Да Длина: 50
цена
Decimal
Обязательное: Да Знаков после запятой : 2 Значение по умолчанию: 0 Формат : денежный 0,00 руб Длина : 20
примечание
Varchar
Обязательное: Нет Длина: 50
Схема этой таблицы будет иметь вид: T_ТОВАРЫ (товар_ном, название, цена, примечание).
14
Создание таблицы Т_ПРОДАЖИ Создайте в режиме дизайна еще одну таблицу с именем T_ПРОДАЖИ, а затем таким же образом, как и для предыдущей таблицы, создайте следующие поля : Имя поля
Тип
Свойства
продажа_ном
Integer
Автозначение : Да Первичный ключ
дата_получения
Date
Обязательное : Да
продавец_указ
Integer
Обязательное : Да
товар_указ
Integer
Обязательное : Да
количество
Integer
Обязательное: Да Значение по умолчанию: 0
дата_реализации
Date
Обязательное: Нет
Таблица имеет схему: T_ПРОДАЖИ (продажа_ном, дата_получения, продавец_указ, товар_указ, количество, дата_реализации). Обратите особое внимание на два поля : продавец_указ и товар_указ, имеющие тип Integer. Эти два поля содержат ссылки на записи, расположенные в других таблицах, которые мы уже создали. Это таблицы T_ПРОДАВЦЫ и T_ТОВАРЫ. Использование таких ссылок позволит нам в таблице T_ПРОДАЖИ не вводить многократно фамилии и названия товаров в соответствующие поля записей, что избавит нас от возможных ошибок. В качестве ключа таблицы может выступать не только единственное поле, но и совокупность нескольких полей (такой ключ называется составным первичным ключом). Например, для таблицы T_ПРОДАЖИ, можно в качестве первичного ключа использовать совокупность двух полей: поля продавец_указ и поля товар_указ. В этом случае поле продажа_ном может быть излишним и его не следует включать в состав таблицы T_ПРОДАЖИ. При этом таблица будет иметь схему: T_ПРОДАЖИ та_реализации).
(дата_получения,
продавец_указ,
товар_указ,
количество,
да-
Неискушенный в области баз данных читатель может спросить - "Почему же плохо иметь в таблицах поля с повторяющимися данными?". Дело в том, что это очень неэффективный способ хранения данных. И не только потому, что они занимают лишнее место в памяти. Основная причина в том, что такие данные долго вводить и трудно анализировать. Если случайно при вводе ин формации пользователь допустил грамматическую ошибку или просто ввел лишний пробел, то при запросах и поиске информации в базе данных такое значение будет рассматриваться как самостоятельное и строка, содержащая это значение, просто не будет выведена на экран. Именно поэтому, при проектировании структуры баз данных стараются избегать повторения данных и создают для них связанные таблицы. Этот процесс называется нормализацией.
Определение связей между таблицами Установление связей между определенными полями разных таблиц создает возможность связать логически информацию, содержащуюся в разных таблицах. Связи обеспечивают возможность возложить контроль за целостностью данных на СУБД, а также позволяют сократить избыточность данных и объем памяти для хранения таблиц БД. 15
Связывание таблиц Т_ПРОДАЖИ и Т_ПРОДАВЦЫ
Поскольку поле продавец_ном таблицы T_ПРОДАВЦЫ однозначно идентифицирует продавца, используем это поле, чтобы показать в поле продавец_указ таблицы T_ПРОДАЖИ, номер продавца, получившего товар для реализации. При отсутствии такой связи, в таблице T_ПРОДАЖИ пришлось бы повторять фамилию продавца, что привело бы к увеличению объема хранимых данных, так как для хранения фамилии мы выделили длину строки 50 символов, а хранение целого числа требует всего 2 символов. Кроме того, при наличии связи повышается надежность хранимых данных, поскольку пользователь не сможет ввести фамилию несуществующего продавца. Чтобы создать связь, выполните команду меню Сервис > Связи. Открывающееся окно Добавить таблицы позволяет пользователю выбрать связываемые между собой таблицы. Давайте добавим таблицы T_ПРОДАВЦЫ и T_ПРОДАЖИ. После этого можно закрыть это окно. При этом в окне Конструктор связей будет отображено две таблицы, как показано на Рис. 9. Чтобы связать таблицы, щелкните по полю продавец_ном таблицы T_ПРОДАВЦЫ и удерживая нажатой кнопку мышки, перетащите курсор на поле продавец_указ таблицы T_ПРОДАЖИ. После освобождения кнопки, между двумя таблицами появится соединительная линия (см. Рис. 10). Обозначения на концах соединительной линии указывают на то, что эта связь имеет тип один ко многим. Теперь можно сохранить связь, закрыв окно и ответив Да на вопрос "Сохранить связи?". С этого момента, вы можете в поле продавец_указ сохранять значения, только существующие в поле продавец_ном таблицы T_ПРОДАВЦЫ. Если вы попытаетесь ввести значение в поле продавец_указ, которое отсутствует в поле продавец_ном, такая запись не будет сохранена. А это и означает, что несуществующего продавца в записи таблицы T_ПРОДАЖИ ввести невозможно.
Рис. 9: Подготовка к связыванию таблиц
16
Рис. 10: Связывание таблиц
Связывание таблиц Т_ПРОДАЖИ и Т_ТОВАРЫ
Создадим теперь связь, определяющую выбор вводимых данных в поле товар_указ таблицы T_ПРОДАЖИ. Откройте окно Конструктор связей (команда Сервис > Связи), в нем должна отобразиться связь, определенная нами ранее. Выполните команду меню Вставка > Добавить таблицы и добавьте таблицу T_ТОВАРЫ. Закройте окно выбора таблиц, теперь таблица T_ТОВАРЫ появится в окне Конструктор связей. Создайте связь, идущую от поля товар_ном таблицы T_ТОВАРЫ к полю товар_указ таблицы T_ПРОДАЖИ (см. Рис. 11).
Рис. 11: Окно проектирования связей (окончательный вид)
Сохраните связь и закройте окно. С этого момента, в поле товар_указ таблицы T_ПРОДАЖИ, можно вводить только те значения, которые присутствуют в поле товар_ном таблицы T_ТОВАРЫ, то есть использовать только существующие товары. Пока в таблицу T_ТОВАРЫ не будет введено ни одной записи, невозможно будет создать любую запись в таблице T_ПРОДАЖИ, поскольку поле товар_указ должно содержать значение, и это значение должно присутствовать в поле товар_ном одной из записей таблицы T_ТОВАРЫ. Поэтому сначала надо создать несколько записей в таблице T_ТОВАРЫ. Такое же 17
замечание относится и к таблице T_ПРОДАВЦЫ. Прежде, чем вводить записи в таблицу T_ПРОДАЖИ, надо создать несколько записей в таблицах T_ПРОДАВЦЫ и T_ТОВАРЫ.
Ввод данных без использования формы Данные можно вводить в режиме таблицы без использования форм. Но с помощью форм намного проще просматривать и изменять данные, чем при работе в режиме таблицы. В главном окне Base, щелкните по иконке Таблицы и вы увидите имена трех созданных к этому времени таблиц. Щелкните правой кнопкой мышки по имени таблицы T_ТОВАРЫ, выберите команду Открыть, после чего откроется таблица для ввода или изменения данных, как показано на Рис. 12. В верхней части таблицы располагаются имена полей (ячеек, находящихся в одном столбце таблицы), ниже следуют записи (строки таблицы), в которые вносятся данные. Одна запись всегда является текущей, и рядом с ней расположен указатель текущей записи (стрелка зеленого цвета в поле выделения в левой части окна). В нижней части окна расположены кнопки навигатора, позволяющие перемещать указатель текущей записи по записям таблицы (на первую запись, на предыдущую запись, на следующую запись, на последнюю запись). Там же находится поле номера текущей записи, кнопка создания новой записи и указатель общего количества записей в таблице. Для создания новой записи служит последняя строка таблицы, отмеченная в поле выделения звездочкой (см. Рис. 14).
Рис. 12: Прямой ввод данных в режиме Таблица (данные еще не введены)
Таблица отображается в табличной форме. Каждый столбец соответствует полю, а каждая строка формы - записи. Надпись <Автополе> в поле товар_ном означает, что это поле будет заполнено автоматически. Из одного поля в другое можно перемещаться с помощью клавиши TAB. В таблицу можно ввести несколько видов товаров. Введенные данные в действительности не будут записаны в базу данных до тех пор, пока вы не сохраните их из этого же окна или не закроете его. Если же вы закроете это окно без сохранения измененной информации, будет выведено предупреждающее сообщение, которое предложит вам сохранить изменения. Окно с предупреждением имеет вид, показанный на Рис. 13.
Рис. 13: Окно с предупреждением
18
Окончательный вид окна в режиме Таблица после ввода данных показан на Рис. 14. Этот способ ввода данных является основным, но он не всегда удобен при вводе сложных данных. Для упрощения процесса ввода данных используются формы, к обсуждению которых мы переходим.
Рис. 14: Прямой ввод данных в режиме Таблица (данные уже введены) Замечание
Нумерация записей в поле товар_ном (и во всех полях со значением свойства Автозамена, равным Да) будет начинаться с 0. Поэтому, если по каким-то причинам такое правило окажется не совсем подходящим, можно использовать один из следующих приемов: •
ввести в поле название записи с номером 0 слово неизвестно;
•
ввести в обязательные поля записи с номером 0 любые значения, а затем удалить эту запись. Следующая, рабочая запись, будет иметь номер 1;
•
после создания записи с номером 0, вручную изменить ее номер на 1.
Простые формы Формы представляют собой текстовые документы или электронные таблицы, которые связаны с какой либо базой данных и позволяют отображать, изменять или вводить данные в эту БД. Другими словами, они обеспечивают графический интерфейс для представления данных на экране. При этом число ошибок ввода существенно сокращается, поскольку кроме удобного представления информации, формы обеспечивают автоматическую проверку корректности введенных данных. Кроме того, в формах можно отображать результаты вычислений и обеспечивать доступ к данным сразу в нескольких связанных таблицах. На формах размещаются элементы управления, с помощью которых и осуществляется доступ к полям таблиц базы данных.
Создание формы с помощью мастера Создадим форму для ввода данных в таблицу T_ПРОДАВЦЫ, используя мастер создания форм. Для этого щелкните по иконке Формы, расположенной в секции База данных документа Base, а затем щелкните по строке Использовать мастер для создания формы в секции Задачи. OOoBase создаст новый текстовый документ, а также будет выведено диалоговое окно мастера (Рис. 15). Из выпадающего списка Таблицы или запросы выберите таблицу T_ПРОДАВЦЫ. В секции Существующие поля будут отображены имена всех полей этой таблицы. Так как мы хотим поме19
стить на форму все поля этой таблицы, то надо щелкнуть по кнопке с двойной стрелкой ">>", чтобы перенести все возможные поля в секцию "Поля в форме".
Рис. 15: Первое окно Мастера форм после выбора всех полей для формы Сейчас мы не будем использовать вторичные формы (субформы), поэтому перейдем к шагу 5, щелкнув по строке Расположить элементы управления. В появившемся окне (см. Рис. 16) можно определить, как данные будут отображаться на создаваемой форме.
Рис. 16: Диалоговое окно для позиционирования элементов управления 20
Можно выбирать различные иконки в секции Расположение головной формы, щелчок по которым изменяет внешний вид будущей формы, и смотреть как это будет выглядеть. Подбираем тот, что понравился. Выберите пиктограмму (иконку) расположения Столбцы – Подписи слева, как показано на Рис. 16. Щелкните по кнопке Дальше. При выполнении шагов 6 и 7 оставьте установки по умолчанию, затем на шаге 8 задайте имя формы. По умолчанию, мастер предложит использовать в качестве имени формы имя таблицы. Для того, чтобы использовать более информативное имя, добавьте слово “ФОРМА” в начало предлагаемого имени (ФОРМА Т_ПРОДАВЦЫ). Мы сейчас не собираемся редактировать эту форму, поэтому оставьте выбранным параметр Действия после заполнения формы равным "Работа с формой", как показано на Рис. 17. Вы всегда можете отредактировать форму потом, когда в этом возникнет необходимость. Щелкните по кнопке "Готово", после чего будет открыта созданная форма, показанная на Рис. 18.
Рис. 17: Завершающий шаг мастера форм На Рис. 19 показан вид заполненной формы. Навигатор формы, расположенный в ее нижней части, позволяет выполнять ряд операций в базе данных, таких как: •
перемещение от одной записи к другой,
•
добавление новой записи,
•
сохранение новой или измененной записи,
•
отмену ввода данных,
•
удаление записи,
•
обновление записи.
21
Рис. 18: Форма после ее создания. Данные в нее еще не введены.
Рис. 19: Форма после ввода в нее данных. 22
Создание выпадающего списка Используя описанную выше процедуру, создайте с помощью мастера форму для таблицы T_ПРОДАЖИ. Должна получиться форма, приведенная на Рис. 20. Как видно предыдущая форма не использует выпадающих списков. Однако, на форме ФОРМА Т_ПРОДАЖИ для полей продавец_указ и товар_указ полезно будет выполнять их заполнение с помощью выбора значений из заранее подготовленных для этого выпадающих списков, поскольку не слишком удобно вводить определенный номер, например 3, в поле продавец_указ для нужного продавца, так как это потребует знания всех номеров всех продавцов.
Рис. 20: Форма ФОРМА Т_ПРОДАЖИ после ее создания мастером Чтобы отредактировать форму, щелкните правой кнопкой мышки по имени этой формы в секции Формы и выберите строку Изменить. Теперь форма откроется в режиме редактирования. Убедитесь в том, что панели инструментов Дизайн формы (вертикальная панель с левой стороны рабочей области формы) и Элементы управления (левая горизонтальная панель внизу) активны. Если это не так, выполните команду меню Вид > Панели инструментов и сделайте их видимыми. Видимые панели инструментов в контекстном меню указанной команды отмечены флажками. Далее убедитесь, что включен режим редактирования Мастер. Пиктограмма Мастер на панели инструментов Дизайн формы должна быть "утоплена". Если это не так, то щелкните по ней мышкой, что приведет к включению режима редактирования Мастер. На панели инструментов Дизайн формы щелкните по иконке Список и нарисуйте на форме с помощью мышки прямоугольник справа от поля продавец_указ. Начнет работать мастер списка, в окне которого можно определить параметры этого списка. На первом экране мастер попросит выбрать таблицу, данные из которой надо поместить в список. В нашем случае, это таблица Т_ПРОДАВЦЫ (см. Рис. 21). 23
Рис. 21: Первое окно мастера списка Щелкните по кнопке Далее. Следующий экран позволит вам выбрать то поле из таблицы Т_ПРОДАВЦЫ, которое надо отобразить в списке. Выберите поле фамилия (см. Рис. 22).
Рис. 22: Второе окно мастера списка
24
Щелкните по кнопке Далее. Третий экран служит для выбора соответствующих полей обеих таблиц (Т_ПРОДАЖИ и Т_ПРОДАВЦЫ), которые должны в списке правильно отображать данные выбранного поля. В данном случае, необходимо выбрать поле продавец_указ из таблицы значений Т_ПРОДАЖИ и связанное с ним поле продавец_ном из таблицы списка Т_ПРОДАВЦЫ (см. Рис. 23).
Рис. 23: Третье окно мастера списка Щелкните по кнопке Готово. Сохраните форму, закройте окно Дизайнер форм и откройте снова форму, дважды щелкнув по ее имени. Теперь можно ввести данные в поле продавец_указ, выбрав в выпадающем списке необходимую фамилию продавца. Использование выпадающих списков позволяет отказаться от ввода на форму значений номеров из другой таблицы (в данном случае из поля продавец_указ, так как для пользователя важно знать фамилию продавца, а не его номер). При этом, СУБД будет автоматически помещать нужные значения в такие поля, а видеть их пользователю не обязательно. Поэтому на форму можно не помещать поле продавец_указ. Создайте таким же способом выпадающий список для поля товар_указ. В качестве таблицы-источника выберите таблицу T_ТОВАРЫ, в качестве поля, данные которого должны появляться в списке, используйте поле название, а в качестве связанных полей укажите поля товар_указ и товар_ном. Вид законченной формы с двумя выпадающими списками показан на Рис. 24. Все поля записи номер 1 на этой форме заполнены соответствующими значениями Обсуждение всех доступных настроек форм займет очень большое время, поэтому мы не будем здесь этим заниматься, так как это тема отдельного рассмотрения.
25
Рис. 24: Вид формы с двумя выпадающими списками
На форме ФОРМА Т_ПРОДАЖИ для полей дата_получения и дата_реализации также полезно будет выполнять их заполнение с помощью выбора значений из выпадающих календариков, Для внесения указанных изменений, надо открыть вышеприведенным способом эту форму для редактирования и затем выделить поле ввода даты, щелкнув по нему при нажатой клавише Ctrl. Сначала изменим поле дата_получения(см. Рис. 25).
Рис. 25: Выделение поля ввода даты На панели инструментов Элементы управления щелкните по иконке Элемент управления (см. Рис. 26 ). Она показана на рисунке внутри красной окружности.
Рис. 26: Панель инструментов Элементы управления После этого откроется окно Свойства:Поле даты, в котором содержатся значения свойств редактируемого поля формы (см. Рис. 27). Установите значение свойства Формат данных, с помо26
щью выпадающего списка, равное Стандартный (короткий ГГГГ). А затем значение свойства Раскрываемый установите равным Да.
Рис. 27: Окно свойств поля даты После этого форма будет иметь вид, показанный на Рис. 28.
Рис. 28: Вид законченной формы
Создание простых запросов Было бы хорошо знать состояние продажи товаров на какой-то момент времени. Запрос является способом обращения к базе данных с вопросом, содержащим конкретный критерий ответа, что также обеспечивает возможность всегда знать текущее положение дел, так как при выполнении запроса будут учтены все добавленные до него новые записи. Создадим запрос, который будет подсчитывать суммарное количество различных товаров, которые переданы продавцам для реализации. 27
Чтобы сделать это, переключитесь в режим Запросы и щелкните по задаче Создать запрос в режиме дизайна. В окне Добавить таблицы, выберите таблицу T_ТОВАРЫ и щелкните по кнопке Добавить, затем выберите таблицу Т_ПРОДАЖИ и щелкните по кнопке Добавить, а затем щелкните по кнопке Закрыть. Окно Построитель запросов позволит нам выбрать поля, которые надо включить в запрос, а также применить к найденным в этих полях значениям определенные математические операции.
Рис. 29: Окно Дизайнер запросов
В первой ячейке строки Поле, выберите из выпадающего меню поле Т_ТОВАРЫ.название. В строке Псевдоним (следующей после строки Поле) введите Товар. Убедитесь, что в строке Видимый флажок установлен, а в строке Функция выберите функцию Group. Во втором столбце, выберите поле Т_ПРОДАЖИ.количество и в качестве псевдонима введите Всего. Убедитесь, что в строке Видимый флажок установлен, а в строке Функция выберите функцию Сумма. Сохраните запрос. Закройте окно Построитель запросов. В окне ввода названия запроса введите З_ПРОДАЖИ. Теперь состояние продаж можно проверить двойным щелчком по имени только что созданного запроса.
28
Рис. 30: Создание запроса закончено Выполнив данный запрос, мы получим суммарное количество товаров, переданных продавцам для реализации. При этом результаты будут сгруппированы по названию товаров (см. Рис. 31).
Рис. 31: Результат выполнения запроса.
29