Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шило_А_В Курсова.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.69 Mб
Скачать

3.2. Автоматизація даталогічного проектування та її результати

Erwin надає можливості для вибору різноманітних цільових СКБД, в яких би реалізовувалася створена модель бази даних. Для реалізації ми можемо обрати або SQL-подібну серверну СКБД (Oracle, Informix,InterBase та ін), або настільну СКБД (MS Access, FoxPro, Paradox тощо) та відповідні її параметри, зокрема, тип даних за замовчуванням.

Пакет Erwin використовує механізм ODBC для передачі спроектованої бази даних в середовище обраної СКБД. В моєму курсовому проекті використовується СКБД Microsoft SQL Server 2012.

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

Процес перенесення моделі БД на обрану СКБД виглядає так:

  1. Створюємо логічну модель:

2. Відображаємо її на фізичному рівні:

3. Встановлюємо з’єднання з обраною СКБД та базою даних “KURSOVA_BD”:

4. Виконуємо генерацію таблиць:

5. Перевіряємо фізичну модель і діаграму в СКБД:

Порівнюючи фізичну модель і схему даних можна зробити висновки , що генерація пройшла коректно. Як у фізичній моделі у діаграмі 5 таблиць. Переглядаючи кожну таблицю робимо висновок, що жоден з атрибутів не пропав , а також не з’явилося нових. Структурні зв’язки також були передані правильно.

4. Проектування та реалізація бд на фізичному рівні

4.1. Опис структур таблиць бд

При проектуванні та реалізації БД на фізичному рівні у середовищі Microsoft SQL Server 2012 створена база даних «KURSOVA_BD», яка складається з файлу KURSOVA_BD.mdf та включає в себе наступні 5 таблиць:

Перегляд таблиць в режимі конструктора:

Grupa_OZ (Група основних засобів):

Metodi_narahuvannia (Методи нарахування):

Narahovaniy_znos (Нарахований знос):

Osnovni_zasobi (Основні засоби):

Vugotovlena_produkcia (Виготовлена продукція):

Перегляд даних в таблицях:

Grupa_OZ (Група основних засобів):

Metodi_narahuvannia (Методи нарахування):

Osnovni_zasobi (Основні засоби):

Vugotovlena_produkcia (Виготовлена продукція):

4.2. Реалізація запитів

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

INSERT INTO Narahovaniy_znos (Inv_nomer, Date_narah, Suma_znosu)

SELECT Vugotovlena_produkcia.Inv_nomer, EOMONTH(Date_prod), SUM((Kilkist_prod)*

(Osnovni_zasobi.Pervisna_vartist-Osnovni_zasobi.Likvid_Vartist)/Osnovni_zasobi.Kilkist_zapl)

FROM Vugotovlena_produkcia INNER JOIN Osnovni_zasobi ON Osnovni_zasobi.Inv_nomer=Vugotovlena_produkcia.Inv_nomer

AND NOT EXISTS (SELECT Narahovaniy_znos.Inv_nomer, Date_narah

FROM Narahovaniy_znos INNER JOIN Osnovni_zasobi ON Narahovaniy_znos.Inv_nomer=Osnovni_zasobi.Inv_nomer

WHERE Osnovni_zasobi.Kod_metodu=5)

GROUP BY Vugotovlena_produkcia.Inv_nomer, EOMONTH(Date_prod)

Результат:

Результат зберігається в таблиці бази даних Narahovaniy_znos.

Нарахування амортизації прямолінійним методом виконується за допомогою виклику процедури для вказаного інвентарного номеру основного засобу. Створення процедури відбувається за допомогою запиту:

CREATE PROCEDURE NarLinMet (@n int)

AS

DECLARE @i int

SET @i = 1

DECLARE @k int

SELECT @k = (Osnovni_zasobi.Ochik_termin*12) FROM Osnovni_zasobi WHERE Inv_nomer=@n

DECLARE @d date

SELECT @d= Date_vved FROM Osnovni_zasobi WHERE Inv_nomer=@n

print @d

WHILE (@i<=@k AND @d<=GETDATE())

BEGIN

INSERT INTO Narahovaniy_znos(Inv_nomer, Date_narah, Suma_znosu)

SELECT Osnovni_zasobi.Inv_nomer, EOMONTH(DATEADD(MONTH,@i,Osnovni_zasobi.Date_vved)),

(Osnovni_zasobi.Pervisna_vartist-Osnovni_zasobi.Likvid_Vartist)/(Osnovni_zasobi.Ochik_termin*12)

FROM Osnovni_zasobi

WHERE Osnovni_zasobi.Kod_metodu=1 AND Osnovni_zasobi.Inv_nomer=@n

SET @i = @i+1

SELECT @d= MAX(Date_narah) FROM Narahovaniy_znos WHERE Inv_nomer=@n

END

Виклик процедури має вигляд:

execute NarLinMet 100101

Результат:

Результат зберігається в таблиці бази даних Narahovaniy_znos.

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

SELECT SUM(Suma_znosu)

FROM Narahovaniy_znos

Результат:

Запит про загальну суму нарахованого зносу з початку існування підприємства по сьогоднійній день у розрізі груп основних засобів.

SELECT

Grupa_OZ.Name_grupi,

SUM(Narahovaniy_znos.Suma_znosu)

FROM Narahovaniy_znos INNER JOIN Osnovni_zasobi ON

Narahovaniy_znos.Inv_nomer=Osnovni_zasobi.Inv_nomer

INNER JOIN Grupa_OZ ON

Osnovni_zasobi.Kod_grupi=Grupa_OZ.Kod_grupi

GROUP BY Grupa_OZ.Name_grupi

Результат:

Запит про загальну суму нарахованого зносу у поточному місяці:

SELECT SUM(Suma_znosu)

FROM Narahovaniy_znos

WHERE Date_narah=EOMONTH(GETDATE())

GROUP BY Date_narah

Результат:

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

SELECT

Grupa_OZ.Name_grupi,

SUM(Suma_znosu)

FROM Narahovaniy_znos INNER JOIN Osnovni_zasobi ON

Narahovaniy_znos.Inv_nomer=Osnovni_zasobi.Inv_nomer

INNER JOIN Grupa_OZ ON

Osnovni_zasobi.Kod_grupi=Grupa_OZ.Kod_grupi

WHERE Date_narah=EOMONTH(GETDATE())

GROUP BY Grupa_OZ.Name_grupi

Результат:

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

SELECT YEAR(Narahovaniy_znos.Date_narah) as 'Year',

MONTH(Narahovaniy_znos.Date_narah) as 'Month',

Grupa_OZ.Name_grupi,

SUM(Narahovaniy_znos.Suma_znosu) as 'Suma'

FROM Narahovaniy_znos INNER JOIN Osnovni_zasobi ON

Narahovaniy_znos.Inv_nomer=Osnovni_zasobi.Inv_nomer

INNER JOIN Grupa_OZ ON

Osnovni_zasobi.Kod_grupi=Grupa_OZ.Kod_grupi

GROUP BY Grupa_OZ.Name_grupi, YEAR(Narahovaniy_znos.Date_narah),

MONTH(Narahovaniy_znos.Date_narah)

Результат: