Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy и ответы.doc
Скачиваний:
5
Добавлен:
20.04.2019
Размер:
671.23 Кб
Скачать

База данных платежного поручения

 

Справочник банков Banks

Наименование поля

Тип

Размер

Пояснения

ID_Num

I

 

Код банка, первичный ключ

Short_Name

A

40

Короткое наименование банка

Full_Name

B

 

Наименование банка

BIK

A

15

Бик банка

KC1

A

25

Кор. Счет банка

KC2

A

25

Кор. Счет банка для валютных платежей

KC3

A

25

Кор. Счет банка банка для валютных платежей

KC4

A

25

Кор. Счет банка банка для валютных платежей

 

Справочник организаций Companys

Наименование поля

Тип

Размер

Наименование поля

ID_Num

I

 

Код организации, первичный ключ

INN

A

15

ИНН организации

Short_Name

A

40

Короткое наименование организации

Full_Name

В

 

Юридическое имя организации

OKONH

A

10

ОКОНХ

OKPO

A

15

ОКПО

ID_Rec

I

 

Код реквизита в банке по умолчанию

 

Справочник реквизитов организации Rec_Company

Наименование поля

Тип

Размер

Наименование поля

ID_Num

I

 

Код

ID_Company

I

 

Код организации

ID_Bank

I

 

Код банка организации

PC_In_Bank

A

25

Расчетный счет организации в банке

 

 

Справочник плательщиков Plat

Наименование поля

Тип

Размер

Наименование поля

ID_Company

I

 

Код организации, первичный ключ

Name

A

10

Поле для сортировки по наименованию

 

Справочник получателей Pol

Наименование поля

Тип

Размер

Наименование поля

ID_Company

I

 

Код организации, первичный ключ

Name

A

10

Поле для сортировки по наименованию

 

Список платежных поручений          Plat_Por

Наименование поля

Тип

Размер

Пояснения

Year_Now

S

 

Первичный ключ - отчетный год, номер и код плательщика

Number

I

 

ID_Plat

I

 

ID_Rec_Plat

I

 

Код реквизита плательщика

ID_Pol

I

 

Код  получателя

ID_Rec_Pol

I

 

Код реквизита получателя

Date_Now

D

 

Дата

Balance

F

 

Сумма

Opl_Type

A

6

Вид оплаты

Nazn_Type

A

6

Назначение платежа

Kod_Type

A

6

Код

Date_Plat

D

 

Срок платежа

Och_Type

A

6

Очередность платежа

Naznachenie

B

6

Назначение платежа

 

                Теперь, нужно создать эти таблицы. Эту базу данных можно было бы создать, используя Paradox, но нам нужно научиться работать с SQL базами данных, поэтому мы будем писать SQL базу данных для Interbase Server. Для работы нам понадобиться локальный или удаленный доступ к серверу Interbase. Я рекомендую создавать таблицы локально, а потом переносить их на сервер. Чтобы у Вас было меньше проблем, создайте пользователя в локальном Interbase с таким же именем, как и на серверном варианте. Т.е. Вы должны узнать у администратора Interbase Server имя пользователя и пароль, который он даст Вам для доступа к сетевому серверу, а затем Вы можете создать точно такого же пользователя локально. Сразу позаботьтесь о безопасности. При установки локального Interbase Server поменяйте пароль по умолчанию masterkey на что-нибудь более секретное, а затем только создавайте новых пользователей. Далее, мы подключимся к локальному серверу с именем пользователя как в сетевом варианте, а не SYSDBA и создадим таблицы. Для создания таблиц лучше использовать InterBase Interactive SQL. Эта программа поставляется вместе с сервером и клиентом InterBase. Вот список команд, необходимых для создания таблиц. По ходу дела я рассмотрю их все.

CREATE DATABASE " …\PlatPor.gdb"

USER "…" PASSWORD "…"

PAGE_SIZE =  8192

DEFAULT CHARACTER SET "WIN1251"

Эта команда создаст файл базы данных по указанному пути с указанными параметрами. Выберите в меню InterBase Interactive SQL строку меню File/CreateDatabase… Здесь нужно указать имя файла базы данных с реальными путем, именем пользователя и паролем.

 

                Нажмите кнопку OK, и файл базы данных будет создан. Строчка PAGE_SIZE =  8192 говорит о размере страницы в файле базы данных. Можно указывать размер, равный максимальному размеру объекта базы данных, т.е. размер самой большой строки без BLOB полей, но это неразумно, лучше использовать размер побольше, чтобы в одной странице было несколько объектов. Дело в том, что страница считывается в память только целиком, так что можно рассматривать размер страницы как минимальный размер буфера потока, связанного с файлом базы данных. Строчка DEFAULT CHARACTER SET "WIN1251" означает, что символы в полях будут хранится в кодировке WIN1251. Эта строчка обязательна, если Вы хотите использовать русские буквы в текстах и строках при работе с Windows NT сервером. Теперь, пора начать создавать таблицы. Таблицы создаются, начиная со справочников, т.е. с заголовков доменов. Т.к. в списке платежек используется справочник организаций, а в справочнике организаций используется справочник реквизитов организаций, а в справочнике реквизитов организаций используется справочник банков, а в справочнике банков не используются другие справочники, то со справочника банков и начнем.

CREATE TABLE BANKS

(

 ID_NUM INTEGER NOT NULL,

 SHORT_NAME VARCHAR(40),

 FULL_NAME BLOB,

 BIK VARCHAR(15),

 KC1 VARCHAR(25),

 KC2 VARCHAR(25),

 KC3 VARCHAR(25),

 KC4 VARCHAR(25),

 PRIMARY KEY (ID_NUM)

);

                Этот запрос создает таблицу, в списке параметров идет перечисление полей, их тип и размер, если нужно, то можно указать значение по умолчанию, например: SHORT_NAME VARCHAR(40) DEFAULT “Новая организация”, но нам это, пока, не нужно. В конце запроса указано поле первичного ключа. Если в состав первичного ключа входят несколько полей, то их имена разделяют запятыми. Обратите внимание, что первичный ключ объявлен как NOT NULL, т.е. ему обязательно должно быть присвоено значение. Это обязательное правило.

CREATE INDEX BANKS_NAME ON BANKS(SHORT_NAME);

                Этот запрос создает индекс в таблице банков по полю с коротким именем. Этот индекс нам понадобится для более быстрого выполнения сортировки и поиска по короткому имени банка.

CREATE GENERATOR BANKS_GEN;

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

SET GENERATOR BANKS_GEN TO 50;

                Здесь мы устанавливаем начальное значение генератору. Цифра 50 была выбрана не случайно, т.к. кроме вызова процедуры на обновление счетчика, другие программисты могут использовать триггеры. Им будет нужно для работы хотя бы несколько номеров вначале последовательности, и они будут Вам очень благодарны за предоставленную возможность иметь эти номера.

CREATE PROCEDURE SET_BANKS_NUM

RETURNS (NUM INTEGER)

AS

BEGIN

 NUM = GEN_ID(BANKS_GEN, 1);

END;

                А вот и процедура, которая будет вызываться всякий раз при добавлении новой записи. Процедура, как явствует из описания, возвращает переменную с именем NUM целого типа. Эта переменная инициализируется вызовом стандартной процедуры InterBase, которая просто складывает значение генератора с единицей, и возвращает полученное значение.

                Запросы в InterBase Interactive SQL нужно заводить по частям. Отдельные запросы отделяются точкой с запятой. Вот пример работы с InterBase Interactive SQL.

 

                В нижней части окна виден предыдущий запрос, а в верхней части окна введен новый. Чтобы выполнить его, нажмите кнопку с подсказкой Execute query или выберите соответствующий пункт меню. В конце работы, выберите пункт меню File/Commit Work для принятия изменений в базе данных. Теперь, двигаемся дальше.

CREATE TABLE COMPANYS

(

 ID_NUM INTEGER NOT NULL,

 SHORT_NAME VARCHAR(40),

 FULL_NAME BLOB,

 INN VARCHAR(15),

 OKONH VARCHAR(10),

 OKPO VARCHAR(15),

 ID_REC INTEGER,

 PRIMARY KEY (ID_NUM)

);

 

CREATE INDEX COMPANYS_NAME ON COMPANYS(SHORT_NAME);

CREATE GENERATOR COMPANYS_GEN;

SET GENERATOR COMPANYS_GEN TO 50;

CREATE PROCEDURE SET_COMPANYS_NUM

RETURNS (NUM INTEGER)

AS

BEGIN

 NUM = GEN_ID(COMPANYS_GEN, 1);

END;

                Пока, ничего нового нет, все как в справочнике банков.

CREATE TABLE  REC_COMPANY

(

 ID_NUM INTEGER NOT NULL,

 ID_COMPANY INTEGER,

 ID_BANK INTEGER,

 RC_IN_BANK VARCHAR(25),

 PRIMARY KEY (ID_NUM),

 FOREIGN KEY (ID_COMPANY) REFERENCES COMPANYS(ID_NUM),

 FOREIGN KEY (ID_BANK) REFERENCES BANKS(ID_NUM)

);

CREATE INDEX REC_COMPANY_RC ON REC_COMPANY(RC_IN_BANK);

                Конструкция FOREIGN KEY объявляет внешний ключ. Здесь указано, что поле ID_COMPANY связано ссылочной целостностью с полем ID_NUM таблицы COMPANYS. То же самое и для банков.

ALTER TABLE COMPANYS

ADD FOREIGN KEY (ID_REC) REFERENCES REC_COMPANY(ID_NUM);

                Конструкция ALTER TABLE позволяет изменять уже существующую таблицу. В последнем запросе мы просто добавили внешний ключ в таблицу COMPANYS по полю ID_REC к таблице REC_COMPANY по полю ID_NUM. Мы не могли это сделать раньше, т.к. таблицы REC_COMPANY тогда еще не было. Теперь создадим следующие таблицы.

CREATE TABLE  PLAT

(

 ID_COMPANY INTEGER NOT NULL,

 PRIMARY KEY (ID_COMPANY),

 FOREIGN KEY (ID_COMPANY) REFERENCES COMPANYS(ID_NUM)

);

CREATE TABLE  POL

(

 ID_COMPANY INTEGER NOT NULL,

 PRIMARY KEY (ID_COMPANY),

 FOREIGN KEY (ID_COMPANY) REFERENCES COMPANYS(ID_NUM)

);

CREATE TABLE  PLAT_POR

(

 YEAR_NOW SMALLINT NOT NULL,

 ID_PLAT INTEGER NOT NULL,

 NUMBER INTEGER NOT NULL,

 ID_REC_PLAT INTEGER,

 ID_POL INTEGER,

 ID_REC_POL INTEGER,

 DATE_NOW DATE,

 DATE_PLAT DATE,

 BALANCE DOUBLE PRECISION,

 OPL_TYPE VARCHAR(6),

 NAZN_TYPE VARCHAR(6),

 KOD_TYPE VARCHAR(6),

 OCH_TYPE VARCHAR(6),

 NAZNACHENIE BLOB,

 PRIMARY KEY (YEAR_NOW, ID_PLAT , NUMBER),

 FOREIGN KEY (ID_PLAT) REFERENCES COMPANYS(ID_NUM),

 FOREIGN KEY (ID_REC_PLAT) REFERENCES REC_COMPANY(ID_NUM),

 FOREIGN KEY (ID_POL) REFERENCES COMPANYS(ID_NUM),

 FOREIGN KEY (ID_REC_POL) REFERENCES REC_COMPANY(ID_NUM)

);

CREATE INDEX PLAT_POR_DATE ON PLAT_POR(YEAR_NOW, ID_PLAT, DATE_NOW);

CREATE INDEX PLAT_POR_YEAR ON PLAT_POR(YEAR_NOW, ID_PLAT , BALANCE);

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

                Рассмотренные нами запросы – это не полный список, который программист должен знать для уверенной работы по созданию баз данных. Вот еще несколько возможностей:

ALTER TABLE /Имя таблицы/

DROP /Имя поля/

                Так удаляют поле таблицы.

ALTER TABLE /Имя таблицы/

ADD /Имя поля, тип, размер, значение по умолчанию, если нужно (см. выше)/

                Так можно добавить поле таблице.

DROP TABLE /Имя таблицы/

                Так можно удалить всю таблицу. На этом, мы закончим. Я думаю, что старт дан, а более подробно Вы познакомитесь с методами создания баз данных из специальной литературы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]