- «Периодичность». Значением этого атрибута является периодичность проведения ревизий на участке трубопровода.
- «Дата заключения». Значением этого атрибута является дата заключения, когда было сделано заключение на основе ревизии.
- «Номер заключения». Значением этого атрибута является номер заключения.
- «Заключение». Значением этого атрибута является заключение которое было сделано экспертом в ходе проведения ревизии.
«Испытания участков». В этой таблице хранятся данные, содержащие всю информацию о проводившихся испытаниях на участке трубопровода.
- «Участок трубопровода». Значением этого атрибута является указатель на участок трубопровода к которому относится испытание.
- «Дата обследования». Значением этого атрибута является дата проведения испытания на участке трубопровода.
- «Наименование организации, проводившей обследование». Значением этого атрибута является наименование организации проводившей испытание участка трубопровода.
- «Ф.И.О. эксперта». Значением этого атрибута является Ф.И.О. эксперта, который проводил испытание участка трубопровода.
- «Дата следующего обследования». Значением этого атрибута является дата следующего проведения испытания.
- «Периодичность». Значением этого атрибута является периодичность проведения испытаний на участке трубопровода.
- «Дата заключения». Значением этого атрибута является дата заключения, когда было сделано заключение на основе испытания.
- «Номер заключения». Значением этого атрибута является номер заключения.
- «Заключение». Значением этого атрибута является заключение которое было сделано экспертом в ходе проведения испытания.
«Диагностика участков». В этой таблице хранятся данные, содержащие всю информацию о проводившихся диагностиках на участке трубопровода.
- «Участок трубопровода». Значением этого атрибута является указатель на участок трубопровода к которому относится диагностика.
- «Дата обследования». Значением этого атрибута является дата проведения диагностики на участке трубопровода.
- «Наименование организации, проводившей обследование». Значением этого атрибута является наименование организации проводившей диагностику участка трубопровода.
- «Ф.И.О. эксперта». Значением этого атрибута является Ф.И.О. эксперта, который проводил диагностику участка трубопровода.
- «Дата следующего обследования». Значением этого атрибута является дата следующего проведения диагностики.
- «Периодичность». Значением этого атрибута является периодичность проведения диагностик на участке трубопровода.
- «Дата заключения». Значением этого атрибута является дата заключения, когда было сделано заключение на основе диагностики.
- «Номер заключения». Значением этого атрибута является номер заключения.
- «Заключение». Значением этого атрибута является заключение которое было сделано экспертом в ходе проведения диагностики.
«Ремонт участков». В этой таблице хранятся данные, содержащие всю информацию о проводившихся ремонтах на участке трубопровода.
- «Участок трубопровода». Значением этого атрибута является указатель на участок трубопровода к которому относится ремонт.
- «Дата поломки». Значением этого атрибута является дата поломки участка трубопровода.
- «Дата начала ремонта». Значением этого атрибута является дата начала ремонта участка трубопровода.
- «Заключение о поломке». Значением этого атрибута является заключение о поломке участка трубопровода.
- «Дата конца ремонта». Значением этого атрибута является дата окончания ремонта участка трубопровода.
- «Выполненные работы». Значением этого атрибута является информация которая содержит перечень всех выполненных работ в ходе ремонта участка трубопровода.
Описанные сущности представлены на ER-диаграмме на рис. 1.
Рис. 1. ER – диаграмма.
Переход от ER-диаграммы к схеме базы данных осуществляется по следующим правилам:
· сущности преобразуются в таблицы,
· связи один ко многим преобразуются во внешние ключи,
· связи многие ко многим преобразуются в таблицы.
Полученная по этим правилам схема базы данных расположена на рисунке 2.
Рис. 2.
Хранимая процедура для удаления записи из таблицы «Трубопроводы»:
CREATE PROCEDURE spDelPipeline(@Id uniqueidentifier) AS
DELETE FROM CommentaryPipeline
WHERE Id_Pipeline = @id
DELETE FROM InspectionPipeline
WHERE Id_Pipeline = @id
Delete from RevisionPartsPipeline where
RevisionPartsPipeline.id_RevisionPartsPipeline in
(select RevisionPartsPipeline.id_RevisionPartsPipeline from
((Pipeline inner join PartsPipeline on Pipeline.id_Pipeline = PartsPipeline.id_Pipeline) inner join
RevisionPartsPipeline on PartsPipeline.id_PartsPipeline = RevisionPartsPipeline.id_PartsPipeline)
where Pipeline.id_Pipeline=@id)
Delete from TestPartsPipeline where
TestPartsPipeline.id_TestPartsPipeline in
(select TestPartsPipeline.id_TestPartsPipeline from
((Pipeline inner join PartsPipeline on Pipeline.id_Pipeline = PartsPipeline.id_Pipeline) inner join
TestPartsPipeline on PartsPipeline.id_PartsPipeline = TestPartsPipeline.id_PartsPipeline)
where Pipeline.id_Pipeline=@id)
Delete from RefusalPartsPipeline where
RefusalPartsPipeline.id_RefusalPartsPipeline in
(select RefusalPartsPipeline.id_RefusalPartsPipeline from
((Pipeline inner join PartsPipeline on Pipeline.id_Pipeline = PartsPipeline.id_Pipeline) inner join
RefusalPartsPipeline on PartsPipeline.id_PartsPipeline = RefusalPartsPipeline.id_PartsPipeline)
where Pipeline.id_Pipeline=@id)
Delete from DiagnosticPartsPipeline where
DiagnosticPartsPipeline.id_DiagnosticPartsPipeline in
(select DiagnosticPartsPipeline.id_DiagnosticPartsPipeline from
((Pipeline inner join PartsPipeline on Pipeline.id_Pipeline = PartsPipeline.id_Pipeline) inner join
DiagnosticPartsPipeline on PartsPipeline.id_PartsPipeline = DiagnosticPartsPipeline.id_PartsPipeline)
where Pipeline.id_Pipeline=@id)
Delete from RepairPartsPipeline where
RepairPartsPipeline.id_RepairPartsPipeline in
(select RepairPartsPipeline.id_RepairPartsPipeline from
((Pipeline inner join PartsPipeline on Pipeline.id_Pipeline = PartsPipeline.id_Pipeline) inner join
RepairPartsPipeline on PartsPipeline.id_PartsPipeline = RepairPartsPipeline.id_PartsPipeline)
where Pipeline.id_Pipeline=@id)
DELETE FROM PartsPipeline
WHERE Id_Pipeline=@id
DELETE FROM Pipeline
WHERE Id_Pipeline=@Id
GO
Хранимая процедура для удаления записи из таблицы «Транспортируемые продукты» :
CREATE PROCEDURE SPDelDic_ClassTransportProductTE(@idrec uniqueidentifier) AS
DECLARE @ins_error int, @ROWCOUNT int
BEGIN TRANSACTION TranName
DELETE FROM DIC_CLASSTRANSPORTPRODUCTTE
WHERE Id_Dic_ClassTransportProductTE = @idrec
select @ROWCOUNT=@@ROWCOUNT, @ins_error=@@error
if @ins_error=0
begin
COMMIT TRANSACTION TranName
return (0)
end
else
begin
ROLLBACK TRAN TranName
return (1)
end
GO
Запрос на добавления записи в таблицу «Трубопроводы»:
SQLStr.Add('INSERT INTO dbo.PartsPipeline (Id_PartsPipeline, Id_Pipeline, '+
'NameParts, NameProjectOrganizations, DateEndConstract, DatePutting, '+ 'DateEndServiceLife, DateLeavePutting, DepartureTehPar, '+ 'Id_Dic_ClassDBAOrganizationsTE, 'Id_Dic_ClassTypeIsolationTE, '+ Id_Dic_ClassTypeHeatingTE, Id_Dic_ClassTypeInhibitorTE, '+
'IncutDate, Length, StellGrade, OuterDiameter, WorkingPressure, WorkingTemperature, '+
'NominalThickness, ActualThickness, VelocityCorrosion, '+
'MotiveLeavePutting, NumberProject) '+
'VALUES ('''+ Id_PartsPipeLine +''', '+
''''+ Id_Pipeline +''', '+
''''+ memNameParts.text +''', '+
''''+ memNameProjectOrg.text +''','+
''+ DateTimeToStrDB(deDateEndConstract.Date,' : ') +', '+
''+ DateTimeToStrDB(deDatePutting.Date,' : ') +', '+
''+ DateTimeToStrDB(deDateEndServiceLife.Date,' : ') +', '+
''+ DateTimeToStrDB(deDateLeavePutting.Date,' : ') +', '+
''''+ memDepartureTehPar.text +''', '+
Id_ClassDBAOrganizations +', '+
Id_ClassTypeIsolation +', '+
Id_ClassTypeHeating +', '+
Id_ClassTypeInhibitor +', '+
''+ DateTimeToStrDB(deIncutDate.Date,' : ') +', '+
''''+ edtLength.text +''', '+
''''+ edtStellGrade.text +''', '+
''''+ edtOuterDiameter.text +''', '+
''''+ edtWorkingPressure.text +''', '+
''''+ edtWorkingTemperature.text +''', '+
''''+ edtNominalThickness.text +''', '+
''''+ edtActualThickness.text +''', '+
''''+ edtVelocityCorrosion.text +''', '+
''''+ memMotiveLeavePutting.text +''', '+
''''+ edtNumberProject.text +''')');
Запрос на обновление записи примечания к трубопроводу в таблице «Примечания»:
MemberCommentary.Add('UPDATE dbo.CommentaryPipeline SET '+
'Commentary = '''+ Data.Commentary +''', '+
'DateCommentary = '+ ConvertFormatDate(Data.DateCommentary) +' '+
' WHERE Id_CommentaryPipeline = '''+ Data.Id_Commentary +''' ');
Существую три дореляционных подхода к организации баз данных:
· системы, основанные на инвертированных списках,
· иерархические системы,
· сетевые системы.
Одними из современных подходов к организации баз данных являются объектно-ориентированный и реляционный.
Данные в рамках рассматриваемой предметной области сильно структурированы. В данной работе использована реляционная модель, поскольку она является наиболее эффективной для представления такого рода данных.
Пользовательский интерфейс должен предоставлять следующие функции:
· поиск по типу;
· поиск по виду;
· поиск по наименованию трубопровода;
· поиск по категории трубопровода;
· поиск по транспортируемым продуктам;
· поиск по регистрационному номеру ФСТН;
· поиск по дате регистрации в ФСТН;
· поиск по регистрационному номеру СТН;
· поиск по дате регистрации в СТН;
· поиск по месторождению;
Для реализации данного проекта был выбран язык Delphi. Будучи языком высокого уровня, он всё же предоставляет программисту полный контроль над машиной, позволяет переходить на язык более низкого уровня (ассемблер). Delphi является стандартом для приложений, где нужно быстродействие и малый размер кода при достаточно глобальных масштабах проекта.
В качестве рабочей среды разработки пользовательского приложения программы использовался Delphi 2005. Выбор именно этой среды разработки был обусловлен целым рядом факторов – эта среда позволяет быстро создавать приложения различной сложности, также она поддерживает все современные наработки как в собственно языке Pascal, так и разнообразных библиотек, необходимых для разработки.
Для решения поставленной задачи СУБД должна отвечать следующим требованиям: