На этом шаге мы рассмотрим SQL-запросы, используемые для создания таблиц и генераторов.
Разработаем простое клиент-серверное приложение "Продажа товара". В базе данных будут следующие таблицы:
Название поля | Описание | Тип данных |
---|---|---|
TovarID | Код товара | Счетчик |
Name | Название товара | Текст длиной 100 символов |
Price | Цена товара | Целое число (будем считать цену товара целой величиной, без копеек) |
Название поля | Описание | Тип данных |
---|---|---|
FirmID | Код фирмы | Счетчик |
Name | Название фирмы | Текст длиной 100 символов |
Название поля | Описание | Тип данных |
---|---|---|
SaleID | Код (номер) продажи | Счетчик |
FirmKod | Код фирмы, совершающей покупку | Число |
TovarKod | Код товара, который купили | Число |
Rem | Комментарии по покупке | Текст длиной 100 символов |
После создания файла базы данных переходим к созданию структуры указанных таблиц. Это можно сделать с помощью следующих запросов:
CREATE TABLE TOVAR ( TOVARID INTEGER NOT NULL, NAME VARCHAR(100) NOT NULL COLLATE PXW_CYRL, PRICE INTEGER NOT NULL, PRIMARY KEY (TOVARID) );
Вот как этот запрос выглядит в утилите InteractiveSQL:
Рис.1. Запрос на создание таблицы Товары
В InterBase нет такого типа как счетчик или Autoincrement. Выход из этой ситуации обеспечивается созданием так называемого генератора. Генератор - это хранящаяся в базе данных программа, выдающая при каждом обращении к ней уникальное число. Для каждого автоинкрементного поля в базе данных создадим свой генератор.
Для создания генератора используем запрос:
CREATE GENERATOR GEN_TOVAR;
Создали генератор GEN_TOVAR. Теперь нам надо установить начальное значение генератора. Делается это следующим образом:
SET GENERATOR GEN_TOVAR TO 1;
В этом случае начальное значение генератора установлено в 1.
Свяжем генератор с конкретным полем у конкретной таблицы. Пусть это будет генератор для поля TOVARID таблицы TOVAR. Это можно сделать с помощью триггера. Триггер - это небольшая программа, которая выполняется в ответ на возникновение какого-либо события. В нашем случае сделаем так, чтобы триггер запускался перед вставкой новой строки в таблице TOVAR. Пишем запрос:
SET TERM !! ; CREATE TRIGGER BEF_INS_TOVAR FOR TOVAR ACTIVE BEFORE INSERT AS BEGIN NEW.TOVARID=GEN_ID(GEN_TOVAR, 1); END!! SET TERM ; !!
Oсталось создать еще две таблицы - Организации и Продажи.
Для создания справочника организаций пишем запрос:
CREATE TABLE FIRM ( FIRMID INTEGER NOT NULL, NAME VARCHAR(100) NOT NULL COLLATE PXW_CYRL, PRIMARY KEY (FIRMID) );
Создаем генератор для таблицы:
CREATE GENERATOR GEN_FIRM;
Устанавливаем начальное значение для генератора
SET GENERATOR GEN_FIRM TO 1;
Привязываем генератор к таблице FIRM:
SET TERM !! ; CREATE TRIGGER BEF_INS_FIRM FOR FIRM ACTIVE BEFORE INSERT AS BEGIN NEW.FIRMID=GEN_ID(GEN_FIRM, 1); END!! SET TERM ; !!
Теперь создаем таблицу Продажи и, соответственно, генератор для нее:
CREATE TABLE SALE ( SALEID INTEGER NOT NULL, FIRMKOD INTEGER NOT NULL, TOVARKOD INTEGER NOT NULL, REM VARCHAR(100) COLLATE PXW_CYRL, PRIMARY KEY (SALEID) );
Создаем генератор для таблицы:
CREATE GENERATOR GEN_SALE;
Устанавливаем начальное значение для генератора:
SET GENERATOR GEN_SALE TO 1;
"Привязываем" генератор к таблице SALE:
SET TERM !! ; CREATE TRIGGER BEF_INS_SALE FOR SALE ACTIVE BEFORE INSERT AS BEGIN NEW.SALEID=GEN_ID(GEN_SALE,1); END!! SET TERM ; !!
База создана.
На следующем шаге мы рассмотрим структуру приложения для работы с созданной базой.