
- •Курсовий проект
- •Анотація
- •Реферат
- •1. Дослiдження предметної областi
- •1.1. Характеристика предметної області
- •Допустимі методи нарахування амортизації
- •1.2. Опис вхідних повідомлень
- •Перелік і опис вхідних повідомлень
- •1.3 Опис вихідних повідомлень
- •Перлік і опис вихідних повідомлень
- •1.4 Опис основних процедур перетворення даних
- •2. Розробка iнфологiчної моделi
- •2.1. Логічна модель
- •2.2 Інформаційні об’єкти та їх характеристика
- •Опис складових елементів інформаційних об’єктів
- •3. Проектування даталогічної моделі
- •3.1 Вибір скбд та обґрунтування цього вибору
- •3.2. Автоматизація даталогічного проектування та її результати
- •4. Проектування та реалізація бд на фізичному рівні
- •4.1. Опис структур таблиць бд
- •Vugotovlena_produkcia (Виготовлена продукція):
- •Vugotovlena_produkcia (Виготовлена продукція):
- •4.2. Реалізація запитів
- •Висновок
- •Список літератури
3.2. Автоматизація даталогічного проектування та її результати
Erwin надає можливості для вибору різноманітних цільових СКБД, в яких би реалізовувалася створена модель бази даних. Для реалізації ми можемо обрати або SQL-подібну серверну СКБД (Oracle, Informix,InterBase та ін), або настільну СКБД (MS Access, FoxPro, Paradox тощо) та відповідні її параметри, зокрема, тип даних за замовчуванням.
Пакет Erwin використовує механізм ODBC для передачі спроектованої бази даних в середовище обраної СКБД. В моєму курсовому проекті використовується СКБД Microsoft SQL Server 2012.
Модель СКБД автоматично генерується з трансформаційної моделі. Після вибору СКБД Erwin генерує імена таблиць та індекси за шаблонами логічної моделі. Їх можна редагувати у редакторі таблиць і редакторі стовпчиків, які викликаються шляхом активізації відповідної опції у контекстному меню.
Процес перенесення моделі БД на обрану СКБД виглядає так:
Створюємо логічну модель:
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)
Результат: