Автоматизація оптимізаційних задач розподілу ресурсів в корпоративній інформаційній системі підприємства

Розробка та реалізація програмного рішення для автоматизації оптимального розподілу ресурсів підприємства з найменшими витратами, інформаційне і технічне забезпечення задачі. Функціональна структура та архітектура корпоративної інформаційної системи.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 17.04.2013
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Номер атрибуту

Назва атрибуту

Тип даних

Обмеження

Призначення атрибуту

1

ІD

int

NOT NULL

Первинний ключ

2

Date

Datetime

NOT NULL

Назва ресурсу

3

Quantity

int

NOT NULL

Кількість

4

CehID

Int

NOT NULL

Цех

5

ProductID

Int

NOT NULL

Продукт

По даному розділу можна підсумувати і сформувати висновки: в ході виконання сценарію спочатку створюється власна база даних, а потім таблиці. В процесі проектування кожної таблиці спочатку створюються первинні ключі, визначається їх назва і тип.

Також, у таблицях можуть відразу встановлюватися зовнішні ключі, що показують їх відношення з іншими таблицями. У кожній таблиці виконується перелік стовпців, визначення типу даних, що будуть там зберігатися, задання порожніх значень, за замовчуванням і обмежень.

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

Діаграма зв'язків між базовими таблицями, побудована на базі серверу Microsoft SQL, представлена у додатку Г.

Створення бази даних проходить з допомогою використання мови запитів Transact-SQL.

Оператор CREATE DATABASE для створення бази даних є достатньо складним оператором, що перш за все пов'язано з його синтаксисом, який дозволяє визначити велику кількість параметрів. Фрагмент коду, що дозволяє створити базу даних підприємства наведено в додатку А.

Зміст коду Transact-SQL, наведений у додатку Б наступний:

- у першому рядку вказується необхідність використання для виконання всіх наступний операцій бази даних master;

- команда GO, що знаходиться в другому рядку, використовується в тих випадках, коли необхідно виконати якийсь фрагмент коду Transact-SQL, не чекаючи на виконання всього блоку;

- рядок 3 представлений оператором мови DDL, що створює базу даних, і єдиним параметром, що передається даному оператору, є ім'я створюваної бази даних - «VeretilnykCurse»;

- у рядках 4 і 5 зазначено ім'я файлу даних, а також його місце знаходження, яке буде використовуватися MS SQL Server для звернення до файлу даних;

- рядки 6 та 7 вказують на початковий розмір створюваного основного файлу, а також параметр його приросту;

- у всіх наступних рядках, починаючи з восьмого рядку, зазначаються аналогічні параметри для журналу транзакцій, а саме його ім'я, місце знаходження, початковий розмір і крок приросту.

Після запуску на виконання приведеного й описаного коду створюється база даних підприємства під ім'ям «VeretilnykCurse» зі встановленими вихідними параметрами основного файлу та журналу транзакцій. Весь код створення бази даних з усіма таблицями наведено в додатку Б.

3.2 Опис розробленого програмного забезпечення

Після створення бази даних можна перейти безпосередньо до реалізації програмного додатку, який би при взаємодії з БД підприємства виконував всі необхідні операції. Як зазначалось вище у нашому випадку реалізовано 2 програми, а саме клієнтська та серверна частина. Такий підхід обумовлений особливостями виробничих процесів на підприємствах. Наведемо алгоритм, за яким працює клієнтська частина програми.

Рисунок 3.1 - Алгоритм роботи клієнтської частини програми

Клієнтська частина програми буде розташована безпосередньо в у відділеннях цехів і служить для здійснення замовлення, які необхідні для виготовлення певної кількості продукції. Спочатку користувач обирає продукти, які потрібно виготовити в процесі. В системі занесені значення норм витрат ресурсів для кожного продукту. Після внесення даних про продукцію, користувач вибирає цех, в який необхідно поставити певну кількість ресурсів на конкретну дату. Після цього дані заносяться в БД і на основі цих даних буде здійснюватись оптимізація замовлень уже серверною частиною програми. Тож представимо алгоритм роботи серверної частини програми (рис. 3.2).

Користувач вибирає дату, на яку бажає переглянути замовлення (або період), поповнивши, якщо є можливість, поточні запаси ресурсів. З вибраного інтервалу часу вибирається перелік необхідних замовлень на виконання. Система ранжує замовлення за пріоритетністю цеху, тобто місцем кожного цеху у загальній структурі виробництва. Пріоритетність цеху вноситься перед початком роботи з системою. Далі відбувається перебір кожного замовлення, поки не буде виконано кожне. У процесі виконання замовлення система підраховує максимально можливу кількість виробництва того чи іншого продукту з огляду на поточні запаси необхідних ресурсів. Якщо запитувана в замовленні кількість продукції менша від максимальної, то система виконує замовлення, якщо кількість є більшою, то видається відповідний запит на зменшення кількості замовлення через неможливість вчасного виконання. Якщо запаси узгодженні з кількістю продукції то відбувається списання відповідної кількості ресурсів зі складу та відправка їх у цехи для виробництва продукції. Після виконання вище описаних дій, формується звіт по наданим у виробництво ресурсам для кожного цеху на конкретну дату.

Рисунок 3.2 - Алгоритм роботи серверної частини програми

Для створення програмного рішення була обрана мова C# з пакетного інструментарію Visual Studio. Поставлені завдання були вирішені через створення багато документного інтерфейсу користувача - MDI (Multiple Document Interface). Windows-програма типу MDI може підтримувати роботу водночас з декількома документами на відміну від іншого типу - SDI (Single Document Interface), які можуть функціонувати тільки з одним документом. Таким чином, для розробки програми використаємо багато документний інтерфейс MDI.

Отже, опишемо процедуру роботи з програмною на прикладі створення і виконання конкретного замовлення. Першим кроком у роботі з програмою є внесення умовно-постійної інформації у базу даних підприємства, тобто заповнення кількості цехів та продукції, що випускається підприємством. Розставлення пріоритетності цехів, тощо.

В серверній частині програми записуються вартість ресурсів та норми використання (рис.3.3-3.4).

Рисунок 3.3 - Норми використання та вартість ресурсів в системі

Рисунок 3.4 - Норми використання ресурсів

Додати ресурс в систему можна скориставшись кнопкою «Додати ресурс», де заноситься інформація про новий ресурс в БД (рис. 3.5).

Рисунок 3.5 - Додання нового ресурсу в систему

Крім того, якщо необхідно, то можна здійснити поповнення запасів, скориставшись кнопкою «Поповнити запаси»:

Рисунок 3.6 - Поповнення запасів на складах

Виконання запитів на замовлення, їх фільтрація та оптимізація виконується у наступному вікні програми (рис. 3.7):

Рисунок 3.7 - Вікно роботи з замовленнями

Для прикладу, нехай нам необхідно виконати замовлення на виробництво 200 одиниць зошитів та 50 штук ручок. Для виробництва ручок, спочатку додамо новий ресурс в систему:

Рисунок 3.8 - Додання нового ресурсу

Після цього здійснимо запит на виробництво продукції на певну дату (15.03.2013):

Рисунок 3.9 - Замовлення ресурсів для виробництва продукції

Далі в серверній частині програми відбувається аналіз можливості виконання запиту. Користувач, переглядає надіслані запити і, за бажанням може виконати їх вручну, для цього потрібно скористатись вкладкою виконати замовлення, що представлена на рисунку 3.8. В результаті система видасть повідомлення:

Рисунок 3.10 - Повідомлення про виконання

Дане повідомлення говорить про те, що наявних запасів ресурсів недостатньо для того, щоб виробити продукцію у бажаній кількості, тому необхідно зменшити розмір замовлення. Зменшимо його до 50 штук. В результаті система виконає поставку ресурсів на кількість зошитів у 150 одиниць:

Рисунок 3.11 - Фільтрація виконаних замовлень

Після виконання замовлень можна сформувати звіт, скориставшись кнопкою «Сформувати звіт». Звіт виглядатиме наступним чином:

Рисунок 3.12 - Звіт про надіслані ресурси

Крім ручного виконання замовлення в системі доступна автоматична оптимізація. В разі використання кнопки «Оптимізувати замовлення» система автоматично визначить скільки ресурсу і в який цех потрібно поставити на вказану дату. Нехай нам потрібно крім вище описаного замовлення виконати ще одне замовлення на більш пізню дату (16.03.2013).

Рисунок 3.13 - Додаткове замовлення

Скориставшись вкладкою «Оптимізоване виконання» система виконає замовлення наступним чином:

Рисунок 3.14 - Звіт про поставку ресурсів за оптимізованим виконанням

Отже в системі реалізовано функціонал, що дозволяє виконувати замовлення як в ручному так і в автоматизованому режимі. Після реалізації системи можна перейти безпосередньо до підрахунку очікуваних ефектів від впровадження системи.

3.3 Ефективність впровадження задачі

Система автоматизації оптимізаційних задач розподілу покликана вирішити 3 найсуттєвіших завдання:

- мінімізація витрат на постачання і перерозподіл ресурсів;

- максимізація прибутку від даного процесу;

- мінімізація ризиків простоїв та втрат під час виконання виробничих операцій;

Застосування даної системи покращить діяльність підприємства чи організації у наступних напрямках:

- скорочення ручного обліку інформації;

- пришвидшення процесів обслуговування клієнтів;

- оптимізація розподілу замовлень;

- зменшення ймовірності збоїв та помилок у роботі;

- зменшення часу простоїв устаткування.

Як відомо продуктивність та ефективність від провадження автоматизованої системи визначають порівнянням результатів її роботи і затрат всіх видів ресурсів, необхідних для її створення і розвитку.

Вкладення ресурсів у створення програмного продукту розраховуються за формулою:

, (6.1)

де - витрати на устаткування, грн.;

- витрати на ліцензійні програмні продукти, грн.;

- витрати на створення програмного продукту, грн.

Приймаємо К1 = 0, оскільки всі підприємства використовують комп'ютери для своєї роботи,К2 = 7000, оскільки необхідні ліцензійні програмні продукти потрібно закупити, а саме (MSSQL).

Витрати на створення програмного продуктуК3 розраховуємо по формулі:

, (6.2)

де - витрати праці програмістів-розробників, грн.;

- витрати комп'ютерного часу, грн.;

- непрямі (накладні) витрати, грн.

Витрати праці програмістів-розробників:

, (6.3)

де - кількість розробників к-й професії, чол.;

- годинна зарплати розробника к-й професії, грн.;

- трудомісткість розробки для к-го розробника (кількість витраченого розробником часу), ч.;

Kзар = 1,3685- коефіцієнт відрахувань до фонду заробітної плати.

Візьмемо, що Nk= 1, оскільки в розробці програмного продукту приймала участь лише 1 людина.

Годинну заробітну плату працівника розрахуємо за формулою:

,(6.4)

де - місячна зарплата к-го розробника, грн.;

Fkмес - місячний фонд часу його роботи, година.

Приймаємо місячну заробітну плату програміста-розробника по Сумській області рівну 4200 грн., тоді маємо, що кількість календарних днів на 2013 рік = 365, кількість святкових днів = 10, кількість вихідних днів = 104, кількість днів, робота в які не проводиться = 114, кількість робочих днів = 251, кількість днів, що передують святковим, в які робочий день коротший на 1 годину в день = 4. Всього робочих годин за рік, при 40 годинному робочому тижні = 2004 години. Всього робочих годин за місяць = 2004/12=167 год.

Тоді, годинна зарплата розробника, враховуючи це, буде обчислена як:

rk=25,15 грн. / год.

Трудомісткість розробки Тк включає час виконання робіт і в даному випадку є рівним 167годин.

Тепер розрахуємо витрати праці програміста-розробника:

З1=1·25,15·167·1,3685= 5747,7 грн.

Витрати комп'ютерного часу розрахуємо за формулою:

,(6.5)

де - вартість комп'ютерної години, грн.;

F0 - витрати комп'ютерного часу на розробку програми, годин.

Вартість комп'ютерної години обчислюється по формулі:

,(6.6)

де - амортизаційні відрахування, грн.;

- енерговитрати, грн.;

- витрати на техобслуговування, грн.

Амортизаційні відрахування знайдемо за формулою:

,(6.7)

де Сі= 6200 грн. - балансова вартість i-го устаткування, яке використовувалося для створення , грн.;

- річна норма амортизації i-го устаткування, долі;

- річний фонд часу роботи i-го устаткування, година

Відповідно до чинного законодавства квартальна норма амортизації основних фондів 4 групи, які були задіяні у розробці складає 15%, тоді річна норма амортизації буде дорівнювати N4=0,6.

Fгод=2004 год.

СА= 6200·0,6/2004 = 1,86 грн.

Енерговитрати розрахуємо за формулою:

.(6.8)

Комп'ютер сучасної моделі в середньому затрачає 800 Вт за годину, тоді Ре = 0,08 кВт/год.

Вартість 1 кВт/год. для споживачів другого класу (не промислові підприємства) становлять

= 93,46 коп. за кВт/год.

= 0,08·0,9346 = 0,0747 грн./год.

Витрати на техобслуговування розраховуємо за формулою:

, (6.9)

де rТО - годинна зарплата працівника обслуговуючого устаткування, грн.; приймаємо rТО= 2500/167 = 14,97 грн. /година;

- періодичність обслуговування:

, (6.10)

де NТО - кількість обслуговувань устаткування в місяць, приймаємо . Місячний фонд часу роботи устаткування 167 годин.

= 1/167=0,006.

Витрати на техобслуговування складуть:

СТО =11,97·0,006 = 0,09 грн.

Звідси вартість комп'ютерної години:

Сk = 1,86 + 0,0744 + 0,09 = 2,02 грн.

Отже витрати комп'ютерного часу складуть:

З2 = 1,99·167 = 333,46 грн.

Непрямі витрати приймемо: З3 = 150 грн./міс. Звідси

К3 = 150 + 333,46+5747,7 = 5682,64 грн.

Витрати на створення системи складають:

К = 0 + 7000 + 6235,16 = 13235,16 грн.

Тепер можна розрахувати річний ефект від впровадження автоматизованої системи та термін окупності системи.

Річна економія від зниження витрат на розробку проекту визначається за формулою:

Eр = Едв - Епв, (6.11)

де Eр- сума річної економії, грн.;

Едв- річні витрати на обробку інформації до впровадження системи, грн.;

Епв- річні витрати на обробку інформації після впровадження системи, грн.

Відомо, що на середньому підприємстві, які ведуть журнальний облік реєструють замовлення за 15 хв. З допомогою програми реєстрація заявки проходить в середньому за 5 хв. Тоді можна розрахувати економію часу, яка дорівнює 66,67%, тобто вивільнення робочого часу за рік складе 66,67 %.

Керівник підрозділу, який здійснює реєстрацію заявок на підприємстві, нехай, мінімально отримує заробітну плату у розмірі 3600 грн. в місяць за рік. Тоді фонд оплати праці одного працівника складає в середньому 43200.

Звідси річна економія складатиме, згідно до формули:

Eр= (43200- 43200*0,6667) = 14398,56 грн./рік.

Розрахуємо термін окупності капіталовкладень - період часу, протягом якого окупаються витрати на автоматизовану систему визначаються по формулі:

Тр=К/ Eр.(6.12)

Тр = 13235,16 /14398,56 = 0,9 років.

При ефективному використанні капіталовкладень розрахунковий термін окупності повинен бути менше нормативного , у нашому випадку Трн . так як 0,9 <2,4.

Отже, як бачимо розробка і використання програмного продукту є економічно доцільною, так як річна економія складе 14398,56 грн. за рік, а термін окупності капіталовкладень складає 0,9, тобто проект окупиться менш ніж за рік.

ВИСНОВКИ

В результаті написання даної роботи був створений прототип модуля КІС, який відповідає за оптимізацію розподілу ресурсів в КІС підприємства. Для покращення взаємодії між клієнтом і сервером був створений додаток, що реалізує клієнтський інтерфейс. Програма складається з клієнтської та серверної частини, що здійснює розподіл функцій у системі.

У процесі виконання роботи було сформовано вимоги до інформаційної системи, визначене необхідне програмне, апаратне та інше забезпечення. Створений модуль є частиною системи, яка повинна використовуватись в малих та середніх підприємствах. В програмі реалізовані всі функції, що потребували автоматизації і були зазначені в роботі.

Слід зазначити, що дана системи є прототипом і є далекою від виходу на ринок, тому потребує подальших вдосконалень, щоб бути повністю конкурентоздатною. В подальшому в систему можна включити можливість вибору постачальників, оптимізацію транспортних витрат на постачання ресурсів, тощо.

При оцінці ефективності провадження системи було з'ясовано, що дана система зменшить витрати та збільшить економію коштів, що використовуються на підприємствах для виконання замовлень. Тим самим можна зробити висновок про корисність даної системи.

ПЕРЕЛІК ПОСИЛАНЬ

1. Татарчук М.І. Корпоративні інформаційні системи [Текст]: навч. Посібник / М.І. Татарчук. - К. : КНЕУ, 2005. - 291 с. - ISBN 966-574-717-7.

2. ERP - системи: материал из Википедии - свободной энциклопедии [Электронный ресурс]

3. Планування ресурсів підприємства: матеріал із Вікіпедії - вільної енциклопедії [Електронний ресурс]

4. SAP ERP [Електронний ресурс] /

5. Microsoft Dynamics [Електронний ресурс]

6. Oracle E-Business Suite [Електронний ресурс]

7. Архітектура клієнт-сервер [Електронний ресурс] / Дизайн систем

8. Карпенко, С.Г., Попов, В.В. Інформаційні системи та технології [Текст] / Навчальний посібник: С.Г. Карпенко. - К.: МАУП, 2004. - 192с. - ISBN 966-608-340-X.

ДОДАТОК А

Лістинг створення бази даних

USE master

GO

CREATEDATABASEVeretilnykCurse

ONPRIMARY

(

NAME='VeretilnykCurse ',

FILENAME='C:\Program Files (x86)\Microsoft SQL

Server\MSSQL.1\MSSQL\DATA\VeretilnykCurse.mdf',

SIZE=5MB,

FILEGROWTH=10%

)

LOGON

(

NAME='VeretilnykCurse ',

FILENAME='C:\Program Files (x86)\Microsoft SQL

Server\MSSQL.1\MSSQL\DATA\VeretilnykCurse_log.ldf,

SIZE= 5MB,

FILEGROWTH= 10%

)

GO

ДОДАТОК Б

Лістинг бази даних підприємства

USE [master]

GO

IFNOTEXISTS(SELECTnameFROMsys.databasesWHEREname=

N'VeretilnykCurse')

BEGIN

CREATEDATABASE [VeretilnykCurse] ONPRIMARY

(NAME= N'VeretilnykCurse',FILENAME= N'C:\Program Files

(x86)\Microsoft SQL

Server\MSSQL.1\MSSQL\DATA\VeretilnykCurse.mdf',SIZE= 3072KB

,MAXSIZE= UNLIMITED,FILEGROWTH= 1024KB )

LOGON

(NAME= N'VeretilnykCurse_log',FILENAME= N'C:\Program Files

(x86)\Microsoft SQL

Server\MSSQL.1\MSSQL\DATA\VeretilnykCurse_log.ldf',SIZE= 1024KB

,MAXSIZE= 2048GB ,FILEGROWTH= 10%)

END

GO

EXEC dbo.sp_dbcmptlevel @dbname=N'VeretilnykCurse',

@new_cmptlevel=90

GO

IF(1 =FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))

begin

EXEC [VeretilnykCurse].[dbo].[sp_fulltext_database] @action ='enable'

end

GO

ALTERDATABASE [VeretilnykCurse] SET ANSI_NULL_DEFAULT

OFF

GO

ALTERDATABASE [VeretilnykCurse] SETANSI_NULLSOFF

GO

ALTERDATABASE [VeretilnykCurse] SETANSI_PADDINGOFF

GO

ALTERDATABASE [VeretilnykCurse] SETANSI_WARNINGSOFF

GO

ALTERDATABASE [VeretilnykCurse] SETARITHABORTOFF

GO

ALTERDATABASE [VeretilnykCurse] SET AUTO_CLOSE OFF

GO

ALTERDATABASE [VeretilnykCurse] SET

AUTO_CREATE_STATISTICS ON

GO

ALTERDATABASE [VeretilnykCurse] SET AUTO_SHRINK OFF

GO

ALTERDATABASE [VeretilnykCurse] SET

AUTO_UPDATE_STATISTICS ON

GO

ALTERDATABASE [VeretilnykCurse]

SETCURSOR_CLOSE_ON_COMMITOFF

GO

ALTERDATABASE [VeretilnykCurse] SET CURSOR_DEFAULT

GLOBAL

GO

ALTERDATABASE [VeretilnykCurse]

SETCONCAT_NULL_YIELDS_NULLOFF

GO

ALTERDATABASE [VeretilnykCurse]

SETNUMERIC_ROUNDABORTOFF

GO

ALTERDATABASE [VeretilnykCurse] SETQUOTED_IDENTIFIEROFF

GO

ALTERDATABASE [VeretilnykCurse] SET RECURSIVE_TRIGGERS

OFF

GO

ALTERDATABASE [VeretilnykCurse] SET DISABLE_BROKER

GO

ALTERDATABASE [VeretilnykCurse] SET

AUTO_UPDATE_STATISTICS_ASYNC OFF

GO

ALTERDATABASE [VeretilnykCurse] SET

DATE_CORRELATION_OPTIMIZATION OFF

GO

ALTERDATABASE [VeretilnykCurse] SET TRUSTWORTHY OFF

GO

ALTERDATABASE [VeretilnykCurse] SET

ALLOW_SNAPSHOT_ISOLATION OFF

GO

ALTERDATABASE [VeretilnykCurse] SET PARAMETERIZATION

SIMPLE

GO

ALTERDATABASE [VeretilnykCurse] SET READ_WRITE

GO

ALTERDATABASE [VeretilnykCurse] SET RECOVERY FULL

GO

ALTERDATABASE [VeretilnykCurse] SET MULTI_USER

GO

ALTERDATABASE [VeretilnykCurse] SET PAGE_VERIFY

CHECKSUM

GO

ALTERDATABASE [VeretilnykCurse] SET DB_CHAINING OFF

USE [VeretilnykCurse]

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

IFNOTEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_I

D(N'[dbo].[Products]')ANDtypein(N'U'))

BEGIN

CREATETABLE [dbo].[Products](

[ID] [int] IDENTITY(1,1)NOTNULL,

[Name] [nvarchar](max)NOTNULL,

CONSTRAINT [PK_Products] PRIMARYKEYCLUSTERED

(

[ID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

)ON [PRIMARY]

END

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

IFNOTEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_I

D(N'[dbo].[Cehs]')ANDtypein(N'U'))

BEGIN

CREATETABLE [dbo].[Cehs](

[ID] [int] IDENTITY(1,1)NOTNULL,

[Name] [nvarchar](max)NOTNULL,

[Adres] [nvarchar](max)NOTNULL,

[Priority] [int] NOTNULL,

CONSTRAINT [PK_Cehs] PRIMARYKEYCLUSTERED

(

[ID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

)ON [PRIMARY]

END

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

IFNOTEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_I

D(N'[dbo].[Measurements]')ANDtypein(N'U'))

BEGIN

CREATETABLE [dbo].[Measurements](

[ID] [int] IDENTITY(1,1)NOTNULL,

[Name] [nvarchar](max)NOTNULL,

CONSTRAINT [PK_Measurements] PRIMARYKEYCLUSTERED

(

[ID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

)ON [PRIMARY]

END

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

IFNOTEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_I

D(N'[dbo].[Expenditures]')ANDtypein(N'U'))

BEGIN

CREATETABLE [dbo].[Expenditures](

[ID] [int] IDENTITY(1,1)NOTNULL,

[Value] [int] NOTNULL,

[ResourceID] [int] NOTNULL,

[ProductID] [int] NOTNULL,

CONSTRAINT [PK_Expenditures] PRIMARYKEYCLUSTERED

(

[ID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

)ON [PRIMARY]

END

GO

IFNOTEXISTS(SELECT*FROMsys.indexesWHEREobject_id=OBJECT_I

D(N'[dbo].[Expenditures]')ANDname= N'IX_FK_ProductExpenditure')

CREATENONCLUSTEREDINDEX [IX_FK_ProductExpenditure] ON

[dbo].[Expenditures]

(

[ProductID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

GO

IFNOTEXISTS(SELECT*FROMsys.indexesWHEREobject_id=OBJECT_I

D(N'[dbo].[Expenditures]')ANDname= N'IX_FK_ResourceExpenditure')

CREATENONCLUSTEREDINDEX [IX_FK_ResourceExpenditure] ON

[dbo].[Expenditures]

(

[ResourceID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

IFNOTEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_I

D(N'[dbo].[Orders]')ANDtypein(N'U'))

BEGIN

CREATETABLE [dbo].[Orders](

[ID] [int] IDENTITY(1,1)NOTNULL,

[Date] [datetime] NOTNULL,

[Quantity] [int] NOTNULL,

[CehID] [int] NOTNULL,

[ProductID] [int] NOTNULL,

CONSTRAINT [PK_Orders] PRIMARYKEYCLUSTERED

(

[ID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

)ON [PRIMARY]

END

GO

IFNOTEXISTS(SELECT*FROMsys.indexesWHEREobject_id=OBJECT_I

D(N'[dbo].[Orders]')ANDname= N'IX_FK_CehOrder')

CREATENONCLUSTEREDINDEX [IX_FK_CehOrder] ON

[dbo].[Orders]

(

[CehID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

GO

IFNOTEXISTS(SELECT*FROMsys.indexesWHEREobject_id=OBJECT_I

D(N'[dbo].[Orders]')ANDname= N'IX_FK_ProductOrder')

CREATENONCLUSTEREDINDEX [IX_FK_ProductOrder] ON

[dbo].[Orders]

(

[ProductID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

IFNOTEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_I

D(N'[dbo].[Resources]')ANDtypein(N'U'))

BEGIN

CREATETABLE [dbo].[Resources](

[ID] [int] IDENTITY(1,1)NOTNULL,

[Name] [nvarchar](max)NOTNULL,

[Quantity] [int] NOTNULL,

[CostPerUnit] [decimal](18, 0)NOTNULL,

[MeasurementID] [int] NOTNULL,

CONSTRAINT [PK_Resources] PRIMARYKEYCLUSTERED

(

[ID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

)ON [PRIMARY]

END

GO

IFNOTEXISTS(SELECT*FROMsys.indexesWHEREobject_id=OBJECT_I

D(N'[dbo].[Resources]')ANDname= N'IX_FK_MeasurementResource')

CREATENONCLUSTEREDINDEX [IX_FK_MeasurementResource] ON

[dbo].[Resources]

(

[MeasurementID] ASC

)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]

GO

IFNOTEXISTS(SELECT*FROMsys.foreign_keysWHEREobject_id=OBJE

CT_ID(N'[dbo].[FK_ProductExpenditure]')AND parent_object_id

=OBJECT_ID(N'[dbo].[Expenditures]'))

ALTERTABLE [dbo].[Expenditures] WITHCHECKADDCONSTRAINT

[FK_ProductExpenditure] FOREIGNKEY([ProductID])

REFERENCES [dbo].[Products] ([ID])

GO

ALTERTABLE [dbo].[Expenditures] CHECKCONSTRAINT

[FK_ProductExpenditure]

GO

IFNOTEXISTS(SELECT*FROMsys.foreign_keysWHEREobject_id=OBJE

CT_ID(N'[dbo].[FK_ResourceExpenditure]')AND parent_object_id

=OBJECT_ID(N'[dbo].[Expenditures]'))

ALTERTABLE [dbo].[Expenditures] WITHCHECKADDCONSTRAINT

[FK_ResourceExpenditure] FOREIGNKEY([ResourceID])

REFERENCES [dbo].[Resources] ([ID])

GO

ALTERTABLE [dbo].[Expenditures] CHECKCONSTRAINT

[FK_ResourceExpenditure]

GO

IFNOTEXISTS(SELECT*FROMsys.foreign_keysWHEREobject_id=OBJE

CT_ID(N'[dbo].[FK_CehOrder]')AND parent_object_id

=OBJECT_ID(N'[dbo].[Orders]'))

ALTERTABLE [dbo].[Orders] WITHCHECKADDCONSTRAINT

[FK_CehOrder] FOREIGNKEY([CehID])

REFERENCES [dbo].[Cehs] ([ID])

GO

ALTERTABLE [dbo].[Orders] CHECKCONSTRAINT [FK_CehOrder]

GO

IFNOTEXISTS(SELECT*FROMsys.foreign_keysWHEREobject_id=OBJE

CT_ID(N'[dbo].[FK_ProductOrder]')AND parent_object_id

=OBJECT_ID(N'[dbo].[Orders]'))

ALTERTABLE [dbo].[Orders] WITHCHECKADDCONSTRAINT

[FK_ProductOrder] FOREIGNKEY([ProductID])

REFERENCES [dbo].[Products] ([ID])

GO

ALTERTABLE [dbo].[Orders] CHECKCONSTRAINT [FK_ProductOrder]

GO

IFNOTEXISTS(SELECT*FROMsys.foreign_keysWHEREobject_id=OBJE

CT_ID(N'[dbo].[FK_MeasurementResource]')AND parent_object_id

=OBJECT_ID(N'[dbo].[Resources]'))

ALTERTABLE [dbo].[Resources] WITHCHECKADDCONSTRAINT

[FK_MeasurementResource] FOREIGNKEY([MeasurementID])

REFERENCES [dbo].[Measurements] ([ID])

GO

ALTERTABLE [dbo].[Resources] CHECKCONSTRAINT

[FK_MeasurementResource]

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.