Автор работы: Пользователь скрыл имя, 13 Января 2013 в 22:36, дипломная работа
Дипломный проект рассматривает вопросы автоматизации, направленные на решение основных проблем в бизнесе страховой компании, занимающейся добровольным медицинским страхованием.
Целью дипломного проекта является повышение эффективности бизнеса страховой компании за счет увеличения гибкости её информационной системы.
Введение 9
Цель дипломного проекта 17
Постановка задачи 17
1 Специальная часть 19
1.1 Обоснование выбора сервис-ориентированной архитектуры 19
1.2 Выбор инструментальных средств проектирования и разработки 32
1.2.1 Обоснование выбора средств моделирования бизнес процессов 32
1.2.2 Обоснование выбора CASE средств проектирования 37
1.2.3 Обоснование выбора СУБД 38
1.2.4 Набор программных средств, используемых в ходе дипломного проектирования 38
1.3 Используемые методы и стандарты 39
1.3.1 Разработка, управляемая моделями 39
1.3.2 Независимость от платформы 42
1.3.3 Программная платформа 43
1.3.4 Модель требований FURPS 44
1.4 Формирование требований к разрабатываемой системе 46
1.4.1 Проект требований 47
1.5 Моделирование бизнес-процессов 49
1.5.1 Моделирование бизнес процесса как есть 49
1.5.2 Анализ бизнес-процессов «как есть». 53
1.5.3 Результаты имитации 55
1.5.4 Моделирование бизнес-процессов «как должно быть» 58
1.5.5 Анализ модели «как должно быть». Сравнение результатов 59
1.6 Разработка UML-модели системы 61
1.6.1 Трансформация модели бизнес процессов в UML-модель 61
1.6.2 Модификация полученной в результате трансформации UML-модели 63
1.7 Разработка сервисной модели 69
1.7.1 Трансформация в сервисную модель 69
1.7.2 Идентификация сервисов 71
1.7.3 Моделирование сервисов 73
1.8 Разработка базы данных 77
1.8.1 Трансформация UML-модели в логическую модель данных 77
1.8.2 Получение окончательной логической модели данных 81
1.8.3 Разработка физической модели данных 82
1.8.4 Генерация базы данных на основе физической модели данных 84
1.9 Реализация сервисов 85
1.10 Выводы 87
2 Экономическая часть 89
2.1 Экономическая эффективность от внедрения сервисов, реализованных на базе сервис-ориентированной архитектуры. 89
2.1.1 Абсолютный показатель изменения годовой трудоемкости обработки информации в результате внедрения SOA-решения для процесса заключения договора страхования 90
2.1.2 Абсолютный показатель изменения годовых затрат на обработку информации в результате внедрения SOA-решения для процесса заключения договора страхования 91
2.1.3 Относительные показатели изменения годовой трудоемкости и годовых затрат на обработку информации в результате внедрения проекта 97
2.1.4 Расчетный коэффициент эффективности единовременных затрат на разработку и внедрение проекта 98
2.1.5 Срок окупаемости единовременных затрат на разработку и внедрение проекта 104
2.2 Выводы 104
3 Экологическая часть и безопасность жизнедеятельности 105
3.1 Требования к организации рабочего места пользователя (сотрудника страховой компании) 105
3.2 Вредные излучения при работе компьютера и способы их минимизации 113
3.3 Заболевания, развивающиеся при работе за компьютером, и их профилактика 116
3.4 Выводы 118
Заключение 120
Список использованной литературы 122
Приложение А. 126
Проект требований 126
Приложение Б. 129
Модель бизнес-процессов 129
Приложение В. 139
Трансформированная модель бизнес-процессов в UML-модель 139
Приложение Г. 155
Трансформированная сервисная модель 155
Приложение Д. 162
WSDL описания сервисов 162
Приложение Е. 178
Исходный Java-код сервисов 178
Приложение Ж. 191
Логическая модель данных, полученная путем трансформации UML-модели 191
Приложение И. 202
SQL скрипт для генерации схемы базы данных 202
import java.sql.*; // Классы JDBC
public class CREATEPOLICY_1 {
public static void CREATEPOLICY_1(int whichQuery, int[] polid, int progid,
java.sql.Date datestart, java.sql.Date dateend,
java.math.BigDecimal summcost, int insur_id, int payer_id,
ResultSet[] rs1) throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
switch (whichQuery) {
case 0:
sql = "INSERT INTO DIPLOM.POLICY (DATESTART, DATEEND, SUMMCOST, INSURED_ID,"
+ " PAYER_ID)" + " VALUES ( ? , ? , ? , ? , ? )";
stmt = con.prepareStatement(sql);
stmt.setDate(1, datestart);
stmt.setDate(2, dateend);
stmt.setBigDecimal(3, summcost);
stmt.setInt(4, insur_id);
stmt.setInt(5, payer_id);
bFlag = stmt.execute();
break;
case 1:
sql = "INSERT INTO DIPLOM.PROGPOL (PROGRAM_ID, POLICY_ID)"
+ " VALUES ( ? , (SELECT MAX(DIPLOM.POLICY.POL_ID)"
+ " FROM DIPLOM.POLICY))";
stmt = con.prepareStatement(sql);
stmt.setInt(1, progid);
bFlag = stmt.execute();
break;
default:
sql = "SELECT PROCSCHEMA, PROCNAME FROM SYSCAT.PROCEDURES";
stmt = con.prepareStatement(sql);
}
updateCount = stmt.executeUpdate();
// Задать возвращаемый параметр
ResultSet rs = stmt.executeQuery("SELECT MAX(DIPLOM.POLICY.POL_ID) FROM DIPLOM.POLICY");
polid[0] = rs.getInt(1);
}
}
/**
* Хранимая процедура JDBC DELETEPOLICY
* @param whichQuery
* @param polid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class DELETEPOLICY {
public static void dELETEPOLICY(int whichQuery, int polid, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
switch (whichQuery) {
case 0:
sql = "DELETE FROM DIPLOM.PROGPOL" + " WHERE POLICY_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, polid);
bFlag = stmt.execute();
break;
case 1:
sql = "DELETE FROM DIPLOM.POLICY" + " WHERE POL_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, polid);
bFlag = stmt.execute();
break;
default:
sql = "SELECT PROCSCHEMA, PROCNAME FROM SYSCAT.PROCEDURES";
stmt = con.prepareStatement(sql);
}
updateCount = stmt.executeUpdate();
}
}
/**
* Хранимая процедура JDBC GETALLPOLICYINFO
* @param whichQuery
* @param polid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class GETALLPOLICYINFO {
public static void gETALLPOLICYINFO(int whichQuery, int polid,
ResultSet[] rs1) throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
boolean bFlag;
String sql;
switch (whichQuery) {
case 0:
sql = "SELECT *" + " FROM DIPLOM.PERSONS"
+ " WHERE PERSON_ID = (SELECT INSURED_ID"
+ " FROM DIPLOM.POLICY"
+ " WHERE POL_ID = ? )";
stmt = con.prepareStatement(sql);
stmt.setInt(1, polid);
break;
case 1:
sql = "SELECT *" + " FROM DIPLOM.CONTACTS"
+ " WHERE PERS_ID = (SELECT INSURED_ID"
+ " FROM DIPLOM.POLICY"
+ " WHERE POL_ID = ? )";
stmt = con.prepareStatement(sql);
stmt.setInt(1, polid);
break;
case 2:
sql = "SELECT *" + " FROM DIPLOM.PROGRAMS"
+ " WHERE PROGRAM_ID = (SELECT PROGRAM_ID"
+ " FROM DIPLOM.PROGPOL"
+ " WHERE POLICY_ID = ? )";
stmt = con.prepareStatement(sql);
stmt.setInt(1, polid);
break;
default:
sql = "SELECT PROCSCHEMA, PROCNAME FROM SYSCAT.PROCEDURES";
stmt = con.prepareStatement(sql);
}
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
}
}
/**
* Хранимая процедура JDBC UPDATEPOLICY
* @param datestart
* @param dateend
* @param summcost
* @param whichQuery
* @param progid
* @param polid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class UPDATEPOLICY {
public static void uPDATEPOLICY(java.sql.Date datestart,
java.sql.Date dateend, java.math.BigDecimal summcost,
int whichQuery, int progid, int polid, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
switch (whichQuery) {
case 0:
sql = "UPDATE DIPLOM.POLICY"
+ " SET DATESTART = ? , DATEEND = ? , SUMMCOST = ? "
+ " WHERE POL_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setDate(1, datestart);
stmt.setDate(2, dateend);
stmt.setBigDecimal(3, summcost);
stmt.setInt(4, polid);
bFlag = stmt.execute();
break;
case 1:
sql = "UPDATE DIPLOM.PROGPOL" + " SET PROGRAM_ID = ? "
+ " WHERE POLICY_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, progid);
stmt.setInt(2, polid);
bFlag = stmt.execute();
break;
default:
sql = "SELECT PROCSCHEMA, PROCNAME FROM SYSCAT.PROCEDURES";
stmt = con.prepareStatement(sql);
}
updateCount = stmt.executeUpdate();
}
}
Рисунок 75 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 76 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 77 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 78 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 79 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 80 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 81 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 82 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 83 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 84 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 85 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
Рисунок 86 – Дерево проекта трансформированной модели данных в инструменте IBM Rational Data Architect
ALTER TABLE "Diplom"."STAFFCOMPANY" DROP CONSTRAINT "STAFFCOMPANY_PERSONS_FK";
ALTER TABLE "Diplom"."CLAIMS" DROP CONSTRAINT "CLAIMS_PROGRAMS_FK";
ALTER TABLE "Diplom"."PROGOFMED" DROP CONSTRAINT "PROGOFMED_COMPANIES_FK";
ALTER TABLE "Diplom"."POSITIONS" DROP CONSTRAINT "POSITIONS_COMPANIES_FK";
ALTER TABLE "Diplom"."CONTACTS" DROP CONSTRAINT "CONTACTS_PERSONS_FK1";
ALTER TABLE "Diplom"."CLAIMS" DROP CONSTRAINT "CLAIMS_COMPANIES_FK";
ALTER TABLE "Diplom"."STAFFCOMPANY" DROP CONSTRAINT "STAFFCOMPANY_COMPANIES_FK";
ALTER TABLE "Diplom"."CONTACTS" DROP CONSTRAINT "CONTACTS_PERSONS_FK";
ALTER TABLE "Diplom"."CLAIMS" DROP CONSTRAINT "CLAIMS_POLICY_FK";
ALTER TABLE "Diplom"."CLAIMS" DROP CONSTRAINT "CLAIMS_REFERENCE_FK";
ALTER TABLE "Diplom"."CLAIMS" DROP CONSTRAINT "CLAIMS_PERSONS_FK";
ALTER TABLE "Diplom"."PROGPOL" DROP CONSTRAINT "PROGPOL_PROGRAMS_FK";
ALTER TABLE "Diplom"."PROGPOL" DROP CONSTRAINT "PROGPOL_POLICY_FK";
ALTER TABLE "Diplom"."PROGOFMED" DROP CONSTRAINT "PROGOFMED_PROGRAMS_FK";
ALTER TABLE "Diplom"."STAFFCOMPANY" DROP CONSTRAINT "STAFFCOMPANY_POSITIONS_FK";
ALTER TABLE "Diplom"."CONTACTS" DROP CONSTRAINT "CONTACTS_PK";
ALTER TABLE "Diplom"."CLAIMS" DROP CONSTRAINT "CLAIMS_PK";
ALTER TABLE "Diplom"."PERSONS" DROP CONSTRAINT "PERSONS_PK";
ALTER TABLE "Diplom"."REFERENCE" DROP CONSTRAINT "REFERENCE_PK";
ALTER TABLE "Diplom"."PROGPOL" DROP CONSTRAINT "PROGPOL_PK";
ALTER TABLE "Diplom"."COMPANIES" DROP CONSTRAINT "COMPANIES_PK";
ALTER TABLE "Diplom"."POLICY" DROP CONSTRAINT "POLICY_PK";
ALTER TABLE "Diplom"."PROGOFMED" DROP CONSTRAINT "PROGOFMED_PK";
ALTER TABLE "Diplom"."POSITIONS" DROP CONSTRAINT "POSITIONS_PK";
ALTER TABLE "Diplom"."PROGRAMS" DROP CONSTRAINT "PROGRAMS_PK";
ALTER TABLE "Diplom"."STAFFCOMPANY" DROP CONSTRAINT "STAFFCOMPANY_PK";
DROP TABLE "Diplom"."STAFFCOMPANY";
DROP TABLE "Diplom"."CONTACTS";
DROP TABLE "Diplom"."COMPANIES";
DROP TABLE "Diplom"."POLICY";
DROP TABLE "Diplom"."PROGRAMS";
DROP TABLE "Diplom"."PROGOFMED";
DROP TABLE "Diplom"."CLAIMS";
DROP TABLE "Diplom"."PROGPOL";
DROP TABLE "Diplom"."PERSONS";
DROP TABLE "Diplom"."REFERENCE";
DROP TABLE "Diplom"."POSITIONS";
DROP SCHEMA "Diplom" RESTRICT;
CREATE SCHEMA "Diplom";
CREATE TABLE "Diplom"."CLAIMS" (
"CLAIM_ID" CHAR(5) NOT NULL,
"PERSON_ID" CHAR(5),
"POLICY_ID" CHAR(5),
"MEDIC_ID" CHAR(5),
"PROGRAM_ID" CHAR(5),
"UPDATE_TIME" CHAR(5),
"CREATE_TIME" CHAR(5),
"COMMENT" CHAR(5),
"STATUS_SYSNAME" CHAR(5) NOT NULL,
"STATUS_REF_ID" CHAR(5) NOT NULL
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."PROGRAMS" (
"PERIOD" CHAR(5),
"PROGRAM_ID" CHAR(5) NOT NULL,
"NAME" CHAR(5),
"INFO" CHAR(5),
"AGE_START" CHAR(5),
"COST" CHAR(5),
"AGE_END" CHAR(5)
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."CONTACTS" (
"CONTACT_ID" CHAR(5) NOT NULL,
"TELEPHONE" CHAR(5),
"MOBILEPHONE" CHAR(5),
"EMAIL" CHAR(5),
"ADDRES_MAIN" CHAR(5),
"ADDRES_FACT" CHAR(5),
"PERSON_ID" CHAR(5) NOT NULL
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."POLICY" (
"INSURED_PERSON_ID" CHAR(5) NOT NULL,
"POLICY_ID" CHAR(5) NOT NULL,
"DATE_START" CHAR(5),
"DATE_END" CHAR(5),
"PAYER_PERSON_ID" CHAR(5) NOT NULL,
"SUMMARY_COST" CHAR(5)
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."PERSONS" (
"TYPE_SYSNAME" CHAR(5) NOT NULL,
"TYPE_REF_ID" CHAR(5) NOT NULL,
"PASSPORT" CHAR(5),
"PASSPORT_INFO" CHAR(5),
"PERSON_ID" CHAR(5) NOT NULL,
"GENDER" CHAR(5),
"DATE_OF_BIRTH" CHAR(5),
"NAME" CHAR(5)
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."REFERENCE" (
"SYSNAME" CHAR(5) NOT NULL,
"NAME" CHAR(5),
"REF_ID" CHAR(5) NOT NULL
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."COMPANIES" (
"TYPE_SYSNAME" CHAR(5) NOT NULL,
"COMPANY_ID" CHAR(5) NOT NULL,
"NAME" CHAR(5),
"TYPE_REF_ID" CHAR(5) NOT NULL,
"HEAD" CHAR(5),
"INFO" CHAR(5),
"INN" CHAR(5),
"KPP" CHAR(5),
"OGRN" CHAR(5)
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."POSITIONS" (
"COMPANY_ID" CHAR(5) NOT NULL,
"POSITION" CHAR(5) NOT NULL,
"INFO" CHAR(5)
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."PROGPOL" (
"POLICY_ID" CHAR(5) NOT NULL,
"PROGRAM_ID" CHAR(5) NOT NULL
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."PROGOFMED" (
"COMPANY_ID" CHAR(5) NOT NULL,
"PROGRAM_ID" CHAR(5) NOT NULL
)
DATA CAPTURE NONE ;
CREATE TABLE "Diplom"."STAFFCOMPANY" (
"COMPANY_ID" CHAR(5) NOT NULL,
"PERSON_ID" CHAR(5) NOT NULL,
"COMPANY_ID1" CHAR(5) NOT NULL,
"POSITION" CHAR(5) NOT NULL
)
DATA CAPTURE NONE ;
ALTER TABLE "Diplom"."CLAIMS" ADD CONSTRAINT "CLAIMS_PK" PRIMARY KEY ("CLAIM_ID");
ALTER TABLE "Diplom"."PROGRAMS" ADD CONSTRAINT "PROGRAMS_PK" PRIMARY KEY ("PROGRAM_ID");
ALTER TABLE "Diplom"."CONTACTS" ADD CONSTRAINT "CONTACTS_PK" PRIMARY KEY ("CONTACT_ID", "PERSON_ID");
ALTER TABLE "Diplom"."POLICY" ADD CONSTRAINT "POLICY_PK" PRIMARY KEY ("POLICY_ID");
ALTER TABLE "Diplom"."PERSONS" ADD CONSTRAINT "PERSONS_PK" PRIMARY KEY ("PERSON_ID");
ALTER TABLE "Diplom"."REFERENCE" ADD CONSTRAINT "REFERENCE_PK" PRIMARY KEY ("SYSNAME", "REF_ID");
ALTER TABLE "Diplom"."COMPANIES" ADD CONSTRAINT "COMPANIES_PK" PRIMARY KEY ("COMPANY_ID");
ALTER TABLE "Diplom"."POSITIONS" ADD CONSTRAINT "POSITIONS_PK" PRIMARY KEY ("COMPANY_ID", "POSITION");
ALTER TABLE "Diplom"."PROGPOL" ADD CONSTRAINT "PROGPOL_PK" PRIMARY KEY ("PROGRAM_ID", "POLICY_ID");
ALTER TABLE "Diplom"."PROGOFMED" ADD CONSTRAINT "PROGOFMED_PK" PRIMARY KEY ("PROGRAM_ID", "COMPANY_ID");
ALTER TABLE "Diplom"."STAFFCOMPANY" ADD CONSTRAINT "STAFFCOMPANY_PK" PRIMARY KEY ("PERSON_ID", "COMPANY_ID");
ALTER TABLE "Diplom"."CLAIMS" ADD CONSTRAINT "CLAIMS_PERSONS_FK" FOREIGN KEY ("PERSON_ID")
REFERENCES "Diplom"."PERSONS" ("PERSON_ID");
ALTER TABLE "Diplom"."CLAIMS" ADD CONSTRAINT "CLAIMS_POLICY_FK" FOREIGN KEY ("POLICY_ID")
REFERENCES "Diplom"."POLICY" ("POLICY_ID");
ALTER TABLE "Diplom"."CLAIMS" ADD CONSTRAINT "CLAIMS_COMPANIES_FK" FOREIGN KEY ("MEDIC_ID")
REFERENCES "Diplom"."COMPANIES" ("COMPANY_ID");
ALTER TABLE "Diplom"."CLAIMS" ADD CONSTRAINT "CLAIMS_PROGRAMS_FK" FOREIGN KEY ("PROGRAM_ID")
REFERENCES "Diplom"."PROGRAMS" ("PROGRAM_ID");
ALTER TABLE "Diplom"."CLAIMS" ADD CONSTRAINT "CLAIMS_REFERENCE_FK" FOREIGN KEY ("STATUS_SYSNAME", "STATUS_REF_ID")
REFERENCES "Diplom"."REFERENCE" ("SYSNAME", "REF_ID");
ALTER TABLE "Diplom"."CONTACTS" ADD CONSTRAINT "CONTACTS_PERSONS_FK" FOREIGN KEY ("PERSON_ID")
REFERENCES "Diplom"."PERSONS" ("PERSON_ID");
ALTER TABLE "Diplom"."CONTACTS" ADD CONSTRAINT "CONTACTS_PERSONS_FK1" FOREIGN KEY ("PERSON_ID")
REFERENCES "Diplom"."PERSONS" ("PERSON_ID");
ALTER TABLE "Diplom"."POSITIONS" ADD CONSTRAINT "POSITIONS_COMPANIES_FK" FOREIGN KEY ("COMPANY_ID")
REFERENCES "Diplom"."COMPANIES" ("COMPANY_ID");
ALTER TABLE "Diplom"."PROGPOL" ADD CONSTRAINT "PROGPOL_POLICY_FK" FOREIGN KEY ("POLICY_ID")
REFERENCES "Diplom"."POLICY" ("POLICY_ID");
ALTER TABLE "Diplom"."PROGPOL" ADD CONSTRAINT "PROGPOL_PROGRAMS_FK" FOREIGN KEY ("PROGRAM_ID")
REFERENCES "Diplom"."PROGRAMS" ("PROGRAM_ID");
ALTER TABLE "Diplom"."PROGOFMED" ADD CONSTRAINT "PROGOFMED_COMPANIES_FK" FOREIGN KEY ("COMPANY_ID")
REFERENCES "Diplom"."COMPANIES" ("COMPANY_ID");
ALTER TABLE "Diplom"."PROGOFMED" ADD CONSTRAINT "PROGOFMED_PROGRAMS_FK" FOREIGN KEY ("PROGRAM_ID")
REFERENCES "Diplom"."PROGRAMS" ("PROGRAM_ID");
ALTER TABLE "Diplom"."STAFFCOMPANY" ADD CONSTRAINT "STAFFCOMPANY_COMPANIES_FK" FOREIGN KEY ("COMPANY_ID")
REFERENCES "Diplom"."COMPANIES" ("COMPANY_ID");
ALTER TABLE "Diplom"."STAFFCOMPANY" ADD CONSTRAINT "STAFFCOMPANY_PERSONS_FK" FOREIGN KEY ("PERSON_ID")
REFERENCES "Diplom"."PERSONS" ("PERSON_ID");
ALTER TABLE "Diplom"."STAFFCOMPANY" ADD CONSTRAINT "STAFFCOMPANY_POSITIONS_FK" FOREIGN KEY ("COMPANY_ID1", "POSITION")
REFERENCES "Diplom"."POSITIONS" ("COMPANY_ID", "POSITION");