Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

База данных (условной) предметной области.




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

 

Таблица 1. Товары

¨ Код товара Integer

¨ Наименование товара VarChar(20)

¨ Единица измерения VarChar(10)

¨ Цена за единицу Integer

¨ Количество товара на складе Integer

 

Таблица 2. Покупатели

¨ Код покупателя Integer

¨ Наименование покупателя VarChar(30)

¨ Город VarChar(15)

¨ Адрес VarChar(20)

¨ Телефон VarChar(10)

 

Таблица 3. Расход товара

¨ Код покупки Integer

¨ Дата покупки Date

¨ Количество покупки Integer

¨ Стоимость покупки Integer

¨ Код товара Integer

¨ Код покупателя Integer

Первая таблица содержит сведения о продаваемых товарах – его наименование, в каких единицах измеряется товар, стоимость единицы товара и количество товара на складе на момент просмотра таблицы. Для простоты предполагается, что цена товара не меняется со временем. Наименование полностью идентифицирует товар. Если один и тот же товар присутствует на складе в разных единицах измерения, то он должен иметь семантически одинаковое, но синтаксически разное название (например, огурцы баночные, огурцы развесные и пр.). Однако для однозначной идентификации товара используется специальный код товара. Именно код товара будем считать первичным ключом в таблице «Товары»[1].

Таблица 2 содержит данные о покупателях товара. Столбец «город» выделен из столбца «адрес» для дальнейших упражнений по составлению запросов.

Третья таблица предназначена для отслеживания отпуска товаров со склада конкретным покупателям. Каждый день на склад поступают товары. Допустим, что процесс прихода товаров на склад и его учет нас не интересуют (на самом деле наш пример является составной частью большой задачи). Таблица «Расход товара» является дочерней для таблиц «Товары» и «Покупатели» и находится с ними в связи многие к одному. Между дочерней таблицей и каждой из ее родительских таблиц должно выполняться требование ссылочной целостности - отпускаемые товары должны присутствовать в таблице «Товары», а получающие их покупатели - в таблице «Покупатели». Стоимость покупки определяется произведением цены товара на количество купленного товара.

Связи между таблицами, входящими в базу данных приведены на рисунке

2.Создание базы данных.
Работа с InterBase WINDOWS IB_CONSOLE.

Рассмотрим процесс создания базы данных в INTERBASE, состоящую из описанных выше таблиц. Для хранения базы данных используется папка «C:\UCHBASE\SKLAD» (эту папку следует предварительно создать). Для создания базы данных воспользуемся утилитой INTERBASE WINDOWS IB_CONSOLE. Эта утилита предназначена для управления сервером INTERBASE и устанавливается одновременно с сервером. Перед началом работы необходимо проверить, запущен ли сервер. По умолчанию, при инсталляции, сервер настраивается на автоматический запуск (если сервер запущен, на панели задач появляется соответствующее изображение ярлыка). Если сервер по какой-либо причине не запущен, необходимо это сделать в ручном режиме с использованием утилиты INTERBASE MANAGER. Для запуска консоли необходимо использовать пункт Программы\Interbase\ IBConsole из основного меню рабочего стола WINDOWS.

Если работа с утилитой INTERBASE WINDOWS IB_CONSOLE происходит в первый раз, необходимо зарегистрировать сервер (это делается только один раз). После появления рабочего окна программы необходимо вызвать контекстное меню и выбрать строку регистрации. В появившемся диалоговом окне заполняется имя пользователя (необходимо использовать системное имя SYSDBA) и пароль (системный пароль «masterkey», набор пароля производится в нижнем регистре клавиатуры, на экране набранные символы высвечиваются знаком «*»). Позиция «Local Server» означает создание локальной базы данных на Вашем компьютере (позиция «Remote Server» выбирается при создании удаленной базы данных). Отмена регистрации выбранного сервера производится с использованием команды UnRegister.

В случае, когда сервер зарегистрирован в системе, работа в IB_CONSOLE начинается с установления связи с сервером путем выбора пункта Login. Далее необходимо набрать имя пользователя и пароль. Завершение работы с сервером (разрыв связи) происходит путем выбора режима LogOut.

 

Для создания базы данных необходимо в позиции DATABASE, нажав на правую кнопку мыши, выбрать строку Create DataBase с вызовом на экран следующего диалогового окна:

В пункте Alias необходимо набрать идентификатор (псевдоним) пользователя, в таблице Files указать полный путь к базе данных (с расширением.gdb для базы INTERBASE, в данном примере база содержится в одном файле), в позиции Default Character Set выбрать кодовую страницу WIN1251 для поддержки русского языка. Остальные параметры можно сохранить по умолчанию. Следует обратить внимание на позицию SQL Dialect. Однажды выбрав диалект языка, необходимо поддерживать именно этот вариант во время работы с базой данных (например, при переносе базы на другие компьютеры). Несоблюдение этого правила может приводить к различным проблемам. Завершение процедуры создания базы данных осуществляется нажатием на кнопку OK. В результате на экране появится информация о пустой базе данных.

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

Управление базой данных включает:

операция команды
создание и удаление БД Create database, Drop database
регистрацию БД Register, UnRegister
подключение БД Connected, Disconnected
Создание резервной копии и восстановление БД Database BackUp, Restore DataBase
просмотра статистической информации о базе данных Database Statistics
просмотр и сохранение информации о метаданных View Metadata

Кроме того, пользователь может отключить сервер (ShutDown), Функция просмотра в текстовом виде текущего состояния базы данных (View Metadata) позволяет посмотреть информацию о структуре таблиц базы данных, индексах, связях между таблицами и хранимых процедурах на текущий момент времени. Эта информация может быть сохранена в текстовом файле с расширением.txt или.sql, и использована в дальнейшем для восстановления структуры базы данных и создания отчетов.

В процессе работы над базой данных накапливается мусор, представляющий старые версии записей. Наличие мусора увеличивает размер и фрагментацию базы данных, поэтому БД необходимо время от времени чистить. Мусор удаляется командой Maintenance\Sweep. Мусор также удаляется при резервном копировании базы данных с последующим его восстановлением[2].

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

Следующий шаг состоит в создании таблиц в составе базы данных. Для создания таблиц необходимо использовать операторы языка SQL. Вызов режима работы с операторами языка SQL производится через пункты меню tools\interactive SQL…. Настройка параметров интерактивного выполнения SQL запросов показана ниже:

Отметим, что при работе необходимо выбрать кодовую страницу(набор символов, используемый для кодировки данных), а также настроить значение терминатора (разделителя, используемого в качестве маркера окончания SQL оператора). При работе с хранимыми процедурами и триггерами значение терминатора должно отличаться от точки с запятой. В остальных случаях необходимо оставить точку с запятой. Параметр Auto Commit DDL означает автоматическое подтверждение операторов определения данных (в частности, при создании таблиц). Флажок Clear input window on success управляет режимом очистки верхней части окна с текстом SQL запроса в случае его успешного выполнения. При установленном флажке окно очищается. На дополнительной странице можно установить, как завершается транзакция при выходе из консоли.

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

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

После выполнения оператора в базе данных создается таблица TOVARY, ее поля соответственно получают наименования KOD_TOVAR, TOVAR, ED_IZM, ZENA, COUNT_TOV. Параметр NOT NULL вводится для контроля начального заполнения поля при его обработке (в этом случае, если поле не получило никакого значения, на уровне сервера вырабатывается исключительная ситуация; мы сознательно не поставили этот параметр на полях ED_IZM и COUNT_TOV для демонстрации обработки соответствующей ситуации на уровне клиентского места). Параметр DEFAULT задает значение соответствующего поля по умолчанию. Поскольку поле ZENA не может принимать отрицательных значений, то для этого поля определен предикат ZENA >= 0, исполняющий роль сторожа. Ложное значение предиката генерирует исключительную ситуацию. Поле COUNT_TOV также должно принимать неотрицательные значения. При проектировании базы данных проверка этого предиката оставлена клиентской части программы. Параметр COLLATE определяет порядок сортировки символьных полей. В данном примере для символьных полей TOVAR и ED_IZM определен порядок сортировки символов русской кириллицы[3]. Для таблицы TOVARY определен первичный ключ KOD_TOVAR.

В случае ошибки выполнения оператора генерируется соответствующий код ошибки, о чем сообщается пользователю. Текст последнего выполненного оператора можно вернуть, нажав на кнопку . Интерактивную справку по операторам SQL можно получить через меню Help\SQL References. SQL операторы могут быть загружены (сохранены) из текстового файла с расширением.sql (режимы Query\Load Sсript и Query\Save Sсript). Можно также сохранить в виде “истории” последовательность действий, заданных после запуска окна Interactive SQL. Для этой цели служат режимы File\Load History и File\Save History.

Перед созданием таблицы «Покупатели» создадим домен KEY_TYPE, используя оператор:

CREATE DOMAIN KEY_TYPE AS INTEGER DEFAULT 0 NOT NULL;

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

При выполнении операций, связанных с изменением базы данных автоматически используется механизм транзакций. Транзакция запускается при начале выполнения SQL оператора. Для фиксации произведенных изменений необходимо выполнить оператор Transaction\Commit, а для их отмены - оператор Transaction\RollBack.

Таблица «Покупатели» определяется оператором:

CREATE TABLE POKUPATELI (

KOD_POKUP KEY_TYPE,

POKUP VARCHAR(30) NOT NULL COLLATE PXW_CYRL,

GOROD VARCHAR(20) DEFAULT '' COLLATE PXW_CYRL,

ADRES VARCHAR(25) DEFAULT '' COLLATE PXW_CYRL,

TEL VARCHAR(8) COLLATE PXW_CYRL,

PRIMARY KEY (KOD_POKUP));

 

Отметим, что при определении поля KOD_POKUP используется ранее определенный домен KEY_TYPE[4]. Для таблицы определен первичный ключ KOD_POKUP.

Таблица «РАСХОД ТОВАРА» определяется оператором:

CREATE TABLE RASXOD(

KOD_RASH KEY_TYPE,

DATA_RASH TIMESTAMP NOT NULL,

KOLVO INTEGER DEFAULT 0,

STOIM KEY_TYPE,

KOD_TOVAR KEY_TYPE,

KOD_POKUP KEY_TYPE,

PRIMARY KEY (KOD_RASH));

Поскольку в нашей задаче существует связь между таблицами (каждая покупка, описанная в таблице RASXOD связывает конкретного покупателя, описанного в таблице POKUPATELI с товаром, описание которого дано в таблице TOVARY), необходимо зафиксировать эту связь на уровне базы данных. Отсутствие такой информации может привести к ситуации, когда зафиксирована покупка отсутствующего товара, или товар приобретен не зафиксированным покупателем[5]. Поддержка концепции целостности данных обеспечивается установкой специальных связей.

Добавим связи между таблицами

ALTER TABLE RASXOD

ADD CONSTRAINT TOV_RASH

FOREIGN KEY(KOD_TOVAR) REFERENCES TOVARY

ON DELETE CASCADE ON UPDATE CASCADE;

 

Оператор ALTER TABLE включает в себя достаточно широкий набор операций связанных с изменением структуры существующей таблицы, добавлением и удалением различных ограничений. Каждому ограничению CONSTRAINT можно присвоить имя. В случае, когда имя не определено, оно генерируется системой. Рекомендуется указывать явным образом мнемоничное имя вводимого ограничения (CONSTRAINT). В приведенном случае – это TOV_RASH. В этом случае при возникновении исключительных ситуаций сервер ссылается на это условие по данному имени. Если имя не указать, то сервер сам генерирует имя. Появление пользовательских наименований в сообщениях сервера облегчает анализ исключительной ситуации. Оператор ALTER TABLE может потерпеть неудачу при задании операции, нарушающей другое существующее ограничение (например, удалении столбца, являющегося частью ключа, использующегося в CHECK или в выражении, определяющим вычислимое поле). При условии, что необходимо поменять атрибуты поля (например, изменение длины) с сохранением существующих данных обычно применяют следующий алгоритм:

1. используя оператор ALTER TABLE, в таблицу добавляют новый столбец с необходимыми атрибутами.

2. копируют данные из старого столбца в новый, используя оператор:

UPDATE имя таблицы SET имя нового столбца=имя старого столбца

3. используя оператор ALTER TABLE, удаляют старый столбец.

 

В нашем примере в базу данных добавлена связь таблицы «Расход» по полю KOD_TOVAR с родительской таблицей «Товары». Теперь SQL-сервер не допустит появления в таблице «Расход» строк со значениями поля KOD_TOVAR, которые не встречаются в таблице «Товары». Причем, благодаря дополнительным указаниям ON..., удаление товара или изменение кода товара в таблице «Товары» повлечет соответствующие изменения в соответствующих записях дочерней таблицы «Расход» (режим каскадного обновления содержимого таблиц).

Связь между таблицами «Расход» и «Покупатели» определим следующим оператором:

ALTER TABLE RASXOD

ADD CONSTRAINT POK_RASH

FOREIGN KEY(KOD_POKUP) REFERENCES POKUPATELI;

 

В этом случае не объявлено автоматическое каскадное обновление и удаление записей дочерней таблицы для соответствующих операций в родительской таблице. По умолчанию будет использована RESTRICT-стратегия поддержания ссылочной целостности, т.е. SQL-сервер не допустит удаления строки и изменения кода покупателя таблице «Покупатели», если на этого покупателя (по коду) ссылается хотя бы одна строка таблицы «Расход». Программист может запрограммировать соответствующие действия каскадного обновления и удаления в процедурах-триггерах базы данных.

Соответствующие триггеры выглядят следующим образом.

¨ Для обновления дочерней таблицы

CREATE TRIGGER AU_POKUPATELI FOR POKUPATELI

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...