Смекни!
smekni.com

Проект электронного архива (стр. 5 из 11)

RoadType

BalPrin

BTI_11 – таблица параметров БТИ для воздушных ЛЭП:

ID_ObjIm (FK)

InvNum

InvDate

SetDate

WrkVolt

LineType

ProvType

MainSec

OpType

OpTotal

LineLen

BalPrin

BTI_12 – таблица параметров БТИ для кабельных ЛЭП 6-10 кВ:

ID_ObjIm(FK)

InvNum

InvDate

SetDAte

WrkVolt

CabVolt

CabType

MainSec

TotKolod

LineLen

BalPrin

BTI_13 – таблица параметров БТИ для кабельных ЛЭП 0,4 кВ:

ID_ObjIm (FK)

InvNum

InvDate

NumTP

ObjAdress

ObjName

SetDate

ProvType

MainSec

OpType

OpTotal

PrislsolProv

LineLen

BalPrin

BTI_14 – таблица параметров БТИ для воздушных ЛЭП 0,4 кВ:

ID_ObjIm (FK).

InvNum

InvDate

NumTP

ObjAdress

ObjName

SetDate

CabVolt

CabType

MainSec

TotKolod

LineLen

BalPrin

2.3 Хранение документов произвольной структуры

Документ – слабо структурированный объект, но тем не менее для формализованного поиска необходимо выделять в нем некоторые структуры, общие для всех документов с тем, чтобы по этим структурам осуществлять поиск документов. Эти структуры принято называть атрибутами документов. Документы бывают разные и невозможно заранее предусмотреть для всех их состав. Все виды атрибутов, используемых в документе, заранее указать нельзя. Пойдем на компромисс между полнотой описания документа и простотой описания состава документа в терминах реляционных отношений. Попытаемся выделить и использовать основные виды атрибутов. Таковыми представляются атрибуты вида «поле документа» - содержат одно единственное значение из некоторого множества значений, которое называется доменом значения атрибутов. Такие атрибуты назовем простыми атрибутами. Можно выделить еще атрибуты вида «таблица значений». Наиболее употребительными являются таблицы, у которых столбцы имеют заголовки, а строки пронумерованы, может быть и неявно. Назовем такие атрибуты сильно множественными.

Все документы одинакового состава назовем относящимися к одному виду документов. Кроме того, с течением времени структура используемых документов будет менятся, и, хотя формально документы одного вида, структура у них будет разного. Поэтому реализуем в рамках типа документа подтипы (версии типов) документа. Состав документа необходимо описывать. Естественным кажется завести таблицы для описания атрибутов, в которых указывается, какие атрибуты принадлежат виду документов, кроме того для описания множественных атрибутов требуется таблица с описанием заголовков столбцов.

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

Итак, у нас имеется таблица описания типов документов DocTypes, таблица описания подтипов документов DocSubTypes. Таблица Attributes описывает все атрибуты указанного подтипа документа, если атрибут множественный, то определение его полей находится в таблице VMAttributes. Все атрибуты относятся к какому – то домену значений, домены описаны в таблице Domains.

Для хранения значений атрибутов для каждого подтипа создается таблица, имя которой формируется по правилу “ATS”+SubTypeID, где “ATS” – префикс, а SubTypeID – ID подтипа документа. Для хранения значений множественных атрибутов для каждого множественного атрибута создается таблица ATM “ATM”+AttribID, где “ATM” – префикс, а AttribID – ID множественного атрибута. Такая схема формирования имен обеспечивает уникальность.

Для лучшего понимания приведем пример.

2.3.1 Пример структуры документа


Рис.2.3.1.1. Пример документа.

Структура документа

Название документа

Дата(хранится в таблице Документы и среди атрибутов)

Номер(хранится в таблице Документы и среди атрибутов)

Дата регистрации

Кто зарегистрировал

ТаблицаОбъектов

Инв. №

Название

Адрес

Стоимость первоначальная

Стоимость остаточная

Износ

Домены Значений Атрибутов

DomainID Description Realization
1 Дата Datetime
2 Название документа Varchar(100)
3 Номер документа Varchar(30)
4 Организация Varchar(100)
5 Денежная сумма Money
6 Инвентарный номер Varchar(20)
7 Наименование объекта Varchar(30)
8 Адрес Varchar(20)

Типы документов

TypeID Name
1 Приложение к плану приватизации "Акт оценки №1 стоимости зданий, сооружений, передаточных устройств"

Организации

OrgID Name Address Telephone INN
1 АО «Свердловэнерго» NULL NULL NULL

Документы

DocID OrgID TypeID DocDate DocNumber
1 1 12.11.2000

Определение атрибутов

AttribID TypeID DomainID TabOrder Name Plurality
1 1 2 1 Название 0
2 1 3 2 Номер 0
3 1 1 3 Дата 0
4 1 7 4 Зарегистрировано 0
5 1 Null 5 СписокОбъектов 2

ATS1

DocID FieldData
1 Приложение №1 к плану приватизации "Акт оценки №1 стоимости зданий, сооружений, передаточных устройств"
1 1
1 12.11.2000
1 Министерством по управлению госимуществом
1 NULL

ОпредПолейСильноМнож

AttribID ColumnID DomainID Name
5 1 6 Инвентарный номер
5 2 7 Название
5 3 8 Адрес
5 4 5 Стоимость первоначальня
5 5 5 Стоимость остаточная
5 6 5 Износ

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


ATM5

DocID RowID FieldData1 FieldData2 FieldData3 FieldData4 FieldData5 FieldData6
1 1 1233 ТП 1021 Ул.Свердлова,7 111,11 333,33 222,22
1 2 1344 ТП 7563 Ул.Фурманова,45 222,22 555,55 333,33

3. Программная реализация комплекса

3.1 Серверная часть

В состав серверной части комплекса ходит:

таблиц, в которых хранятся собственно данные;

хранимых процедур, реализующих доступ к этим таблицам;

сообщениях об ошибочных ситуациях;

список пользователей и ролей.

3.1.1 Руководство программиста

При создании серверной части использовалось следующее соглашения о наименовании объектов:

Имя объекта формируется из 3 составных частей:

1 - префикс типа объекта (sp,vw,df, tr);

2 - аббревиатура модуля;

3 – действие;

3 - объект;

Например, spONIAddDomain.

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

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

Список хранимых процедур, их параметров и описание приведены в табл 3.1.


Таблица 3.1.

Список хранимых процедур серверной части

Хранимая процедура Описание
CREATE PROC spONIAddAttribute@Name varchar(100), @SubTypeID int, @TabOrder int, @DomainID int, @Plurality int, @ID int OUTPUT Создание атрибута докуммента
CREATE PROC spONIAddCategory@level int, @NameValue varchar(128), @FKValue int, @ID int OUTPUT Создание новой категории при использовании универсального иерархического компонента
CREATE PROC spONIAddDoc@SubTypeID int,@ID int OUTPUT Создание нового документа
CREATE PROC spONIAddDocSubType@NameValue varchar(128),@TypeID int, @ID int OUTPUT Создание нового подтипа документа. Одновременно создаются таблицы для хранения значений атрибутов документа данного подтипа.
CREATE PROC spONIAddDomain@Name varchar(20), @Realization varchar(20), @ID int OUTPUT Создание нового домена значений атрибутов документа
CREATE PROC spONIDeleteAttribute@ID int Удаление атрибута документа
CREATE PROC spONIDeleteCategory@level int, @ID int Удаление категории при использовании универсального иерархического компонента
CREATE PROC spONIDeleteDoc@ID int Удаление документа
CREATE PROC spONIDeleteDocSubType@ID int Удаление подтипа документа
CREATE PROC spONIDeleteDomain@ID int Удаление домена значений атрибутов документа
CREATE PROC spONIGetAttributes@ID int Получение списка атрибутов указанного подтипа документов
CREATE PROC spONIGetCategories@level int, @ID int Получение значений категории указанного уровня
CREATE PROC spONIGetDocs Получение списка документов
ё Получение списка доменов значений атрибутов
CREATE PROC spONIGetSingleAttributeValue@DocID int,@SubTypeID int, @AttribID int,@Value nvarchar(4000) output Получение значения простого атрибута документа
CREATE PROC spONIRenameAttribute@ID int, @TabOrder int, @DomainID int, @Name varchar(100), @Plurality int Изменение атрибута документа
CREATE PROC spONIRenameCategory@level int, @NameValue varchar(128), @ID int Изменении категории при использовании универсального иерархического компонента
CREATE PROC spONIRenameDomain@ID int,@Name varchar(20),@DomainType int, @Realization varchar(20) Изменение домена значений атрибутов докуменат
CREATE PROC spONIUpdateSingleAttributeValue@DocID int, @SubTypeID int, @AttribID int,@Value varchar(4000) Изменение значения атрибута

3.2 Клиентская часть