Проектирование баз данных в среде OpenOffice.org Base/Таблицы

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

Создание базы данных править

 
Рис. 8 Страница входа в phpMyAdmin

Познакомимся с phpMyAdmin на примере создания новой базы. Для начала нам необходимо убедиться, что веб-сервер работает. Для этого открываем браузер и переходим по адресу http://localhost. Если вы видите сообщение «It works!» или аналогичное значит все работает. Если нет значит веб-сервер установлен неправильно или не запущен.

Для того чтобы зайти в phpMyAdmin просто перейдите по адресу http://localhost/phpmyadmin. Вы уведите запрос на ввод логина и пароля. Войдите под пользователем root используя пароль, который вы ввели в процессе установки MySQL.

 
Рис. 9 Вкладка привилегии — создание нового пользователя в phpMyAdmin
 
Создание новой базы в phpMyAdmin

После входа в верхней части странице найдите вкладку «Привилегии» и перейдите на нее. Вы увидите всех пользователей для которых разрешено работать с MySQl. Нам необходимо добавить пользователя для нашей базы данных. Отдельный пользователь необходим для возможности установки определенных прав, например разрешить работу только с определенной БД. Для создания пользователя нажмите ссылку «Добавить нового пользователя». Создадим пользователя с именем air и паролем air. Пока наш пользователь будет иметь все привилегии, для этого в разделе «Глобальные привилегии» нажмите «Отметить все». В последующем мы можем ограничить права пользователя как нам будет угодно. При создании пользователя есть возможность автоматического создания для него базы данных. Мы не будем использовать эту возможность для того чтобы продемонстрировать создание базы вручную.

Для создания новой базы перейдем на вкладку «Базы данных». Файлы баз в Ubuntu физически расположены в каталоге /var/lib/mysql, для каждой базы создается своя папка.

Данные править

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

  • «Авиалайнеры»
  • «Рейсы»
  • «Продажи»
  • «Справка»

Давайте попробуем описать какие поля в каких таблицах нам могут понадобится:

Таблица «Авиалайнеры»
  • Бортовой номер самолета
  • Тип самолета
  • Дата техосмотра
Таблица «Справка»
  • № рейса
  • тип салона (первый, второй, бизнес)
  • количество мест
  • количество свободных мест
  • стоимость билетов
Таблица «Рейсы»
  • № рейса
  • бортовой номер
  • дни вылета (четные, нечетные, каждый день)
  • пункт отправления
  • пункт назначения
Таблица «Продажи»
  • № рейса
  • дата продажи
  • тип салона (первый, второй, бизнес)
  • Ф.И.О. пассажира
  • номер и серия паспорта
  • количество билетов
  • скидка (20%, 50%, 100%)
  • дата вылета

Оптимизация данных править

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

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

Основные таблицы править

  Таблица airplanes — «Авиалайнеры»
Имя поля Тип Описание Другие свойства
bnum smallint(4) Бортовой номер самолета (уникальный) unsigned, NOT NULL, AUTO INCREMENT
type tinyint(3) Тип самолета NOT NULL
tech_date date Дата техосмотра NOT NULL
  Таблица disposal — «Продажи»
Имя поля Тип Описание Другие свойства
id int(10) Код заказа unsigned NOT NULL AUTO_INCREMENT
flight_num smallint(5) Номер рейса unsigned NOT NULL
sell_date date Дата продажи билетов NOT NULL
salon_type tinyint(3) Тип салона unsigned NOT NULL
surname tinytext Ф.И.О. CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
passport text Паспортные данные CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
tickets_num smallint(5) Количество билетов unsigned NOT NULL DEFAULT '1'
discount tinyint(3) Скидка unsigned NOT NULL DEFAULT '0'
flight_date date Дата вылета NOT NULL
  Таблица flights — «Рейсы»
Имя поля Тип Описание Другие свойства
flight_num smallint(5) Номер рейса unsigned NOT NULL AUTO_INCREMENT
bnum smallint(5) Бортовой номер самолета unsigned NOT NULL
days tinyint(1) По каким дням происходят вылеты unsigned NOT NULL
start_point smallint(5) Пункт вылета unsigned NOT NULL
dest_point smallint(5) Пункт назначения unsigned NOT NULL
  Таблица info — «Справка»
Имя поля Тип Описание Другие свойства
flight_num smallint(5) Номер рейса unsigned NOT NULL
salon_type tinyint(3) Тип салона unsigned NOT NULL
places smallint(5) Общее количество мест unsigned NOT NULL
free_places smallint(5) Количество свободных мест unsigned NOT NULL
price smallint(5) Цена билета unsigned NOT NULL

Таблицы-справочники править

  Таблица-справочник cities — «Города»
Имя поля Тип Описание Другие свойства
code smallint(5) код города unsigned, NOT NULL, AUTO_INCREMENT
name tinytext Имя города COLLATE utf8_unicode_ci NOT
  Таблица-справочник days — «Дни вылета»
Имя поля Тип Описание Другие свойства
days_code tinyint(1) Код типа дней вылета unsigned NOT NULL AUTO_INCREMENT
days_descr tinytext Описание типа дней COLLATE utf8_unicode_ci NOT NULL
  Таблица-справочник discounts
Имя поля Тип Описание Другие свойства
id tinyint(3) Уникальны код скидки unsigned NOT NULL AUTO_INCREMENT
disc_descr tinytext Описание скидки COLLATE utf8_unicode_ci NOT NULL
percent tinyint(3) Процент скидки unsigned NOT NULL
  Таблица salon_types — «Типы салона»
Имя поля Тип Описание Другие свойства
type tinyint(3) Код типа салона unsigned NOT NULL AUTO_INCREMENT
name tinytext Описание типа салона COLLATE utf8_unicode_ci NOT NULL

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

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

Создание таблиц править

phpMyAdmin править

 
Создание новой таблицы в phpMyAdmin
 
Определение полей в новой таблице используя phpMyAdmin

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

После создания новой БД phpMyAdmin автоматически предлагает создать таблицу. Но мы можем сделать это самостоятельно в любой момент. Создать новую таблицу в базе данных можно на вкладках «Структура» и «Операции». Необходимо нажать на ссылку «Создать новую таблицу», в открывшейся форме вписать имя таблицы (предполагаемое) количество полей. После нажатия кнопки «ОК» открывается форма для описания полей формы. Здесь необходимо указать названия полей, тип, размер и другие свойства. Тут же можно указать ключевое поле и опциональные комментарии. По завершении заполнения формы необходимо нажать кнопку «Сохранить». Заметьте, что кнопка «ОК» добавит еще одно (или больше) поле в форму, а не создаст таблицу. Поэтому внимательно смотрите, что вы нажимаете. Добавить в таблицу запись можно на вкладке «Вставить», но мы в дальнейшем создадим специальные формы в OpenOffice.org Base для заполнения таблиц.

OOO Base править

 
Методы создания таблиц в OOO Base
 
Определение свойств полей в OOO Base
 
Добавление записей в таблицу
 
Мастер создания таблицы

В OpenOffice создать таблицу можно в режиме дизайна и через мастер создания таблиц. Как ни странно, когда мы выбираем режим дизайна, открывается конструктор таблиц. Не удивляетесь, это связано с плохим качеством перевода элементов интерфейса. Поэтому особого смысла разделять понятия конструктор и дизайнер для нас нет (в Access есть!) и далее мы будем оперировать термином «конструктор». Процесс создания таблицы в OOO аналогичен процессу в phpMyAdmin, необходимо последовательно вводить названия и типы полей и указать ключевое поле при необходимости.

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

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

Ресурсы править