Рефетека.ру / Информатика и програм-ие

Курсовая работа: Графические редакторы (пакеты трехмерного моделирования)

Министерство образования и науки Российской Федерации

Курский Государственный Технический Университет


Кафедра ПО ВТ


КУРСОВАЯ РАБОТА

по дисциплине: “Базы данных”

Тема: “ Графические редакторы (пакеты трехмерного моделирования)”


Выполнил: студент гр. ПО-21 Чельцов Е. О.


Проверил: доцент Белов В. Г.


К У Р С К

2 0 0 8


СОДЕРЖАНИЕ


1 ТЕХНИЧЕСКОЕ ЗАДАНИЕ

1.1 Основание для разработки

1.2 Задание

2 ТЕХНИЧЕСКИЙ ПРОЕКТ

2.1 Описание предметной области

2.2 Словарь понятий и терминов

2.3 Первый вариант ER-диаграммы:

2.4 Построение функциональных зависимостей:

2.5 Синтез схемы базы данных на основании функциональных зависимостей

2.5.1 Построение неизбыточного покрытия

2.5.2 Построение леворедуцированного покрытия

2.5.3 Построение праворедуцированного покрытия

2.5.4 Построение классов эквивалентностей

2.5.5 Построение минимального покрытия

2.5.6 Получение минимального кольцевого редуцированного покрытия

Определение CF-зависимостей по классам эквивалентности

Минимальное кольцевое покрытие

2.6. Логическая модель предметной области

2.7 Уточненная концептуальная модель

3 ПОСТРОЕНИЕ ЗАПРОСОВ

1 ТЕХНИЧЕСКОЕ ЗАДАНИЕ


1.1 Основание для разработки


Необходимо спроектировать и разработать базу данных, обеспечивающую ввод, хранение и обработку информации о графических редакторах, а именно пакетах трехмерного моделирования. Основанием для разработки послужило задание на курсовое проектирование по дисциплине “Базы данных”.


1.2 Задание


Спроектировать базу данных, содержащую информацию о графических редакторах, а именно пакетах трехмерного моделирования. Описать предметную область, разработать словарь понятий и терминов, построить систему функциональных зависимостей, ER-диаграмму. Синтезировать схему базы данных на основании функциональных зависимостей (построение неизбыточного покрытия, построение леворедуцированного неизбыточного покрытия, построение праворедуцированного неизбыточного покрытия, построение классов эквивалентностей, построение минимального покрытия). Построить уточненную концептуальную модель в виде ER-диаграммы, запросы предметной области. Записать запросы на языке SQL.

2.ТЕХНИЧЕСКИЙ ПРОЕКТ


2.1 Описание предметной области


В настоящее время большая часть новых компьютерных технологий ориентированна на сферу развлечений. Трехмерная графика является её наиболее интересной составляющей. Она используется в киноиндустрии, в индустрии компьютерных игр, в области проектирования и т.д.

На данный момент существует довольно много средств трехмерного моделирования — начиная от простейших программ, типа “Ultimate Unwrap3D”, предназначенных для создания простейших сцен и зачастую распространяемых бесплатно, и заканчивая мощными коммерческими пакетами моделирования, типа “Maya”, предназначенных для создания реалистичных изображений и анимации.

В Интернете существуют сайты, на которых хранятся большие коллекции файлов (сцен) для такого рода программ. Каждая сцена имеет свой идентификационный номер и характеризуется следующими параметрами:

-название сцены;

-количество полигонов в сцене;

-размер файла;

-дата создания;

-количество объектов;

-количество источников света;

-количество камер;

-комментарии.

При создании сцены используется модуль просчета изображения — рендер, который характеризуется:

-поддержка материалов;

-условия распространения;

К каждой сцене прилагается пакет текстур, который характеризуется:

-количеством текстур;

-типом архива.

Сцены бывают статические и с содержанием анимации. Сцена с анимацией имеет параметры:

-наличие звука;

-количество кадров;

-описание анимации (раскадровка).

Если при создании анимации использовалась сторонняя программа или плагин, то последовательность кадров будет содержаться в отдельном файле, с параметрами:

-название файла анимации;

-тип файла;

-размер файла.

Используемый плагин характеризуется:

-тип;

-условия распространения;

-название.

Программа, используемая при создании сцены, характеризуется:

-название;

-поддерживаемые форматы;

-условия распространения.

Характеристики производителя, используемого программного продукта:

-название организации;

-адрес электронной почты;

-адрес сайта Интернет;

-страна.

Так же имеются сведение об авторе сцены:

-полное имя или псевдоним;

-адрес электронной почты;

-адрес сайта Интернет;

Каждый автор имеет свой идентификационный номер.


2.2 Словарь понятий и терминов


Наименование Смысл Обозначение Пример
Имя призводителя Наименование производителя пакета моделирования man_name Discreet
Почта производителя Адрес электронной почты производителя man_email authcodes.neu@autodesk.com
Сайт производителя Адрес сайта производителя man_www www.discreet.com
Страна Страна производителя man_country USA
Название средства моделирования Полное название средства моделирования edit_name 3DS MAX 6.0
Условия распространения средства моделирования Условия распространения средства моделирования edit_conditions Commercial
Форматы Форматы файлов, поддерживаемые программой моделирования supp_formats *.max, *.chr
Рендер Полное название рендера render_name Mental Ray
Условия распространения рендера Условия распространения рендера ren_conditions Commercial
Материалы Поддерживает ли рендер материалы(да/нет) materials Yes
Плагин Полное название плагина или сторонней программы, использованной при создании анимации plug_name Character Studio 4.1
Условия распространения плагина Условия распространения плагина или сторонней программы, использованной при создании анимации plug_conditions Commercial
Тип плагина Программа или плагин plug_type plugin
Идентификатор сцены Идентификатор сцены scene_id 0035
Название сцены Название сцены scene_name My_scene
Количество полигонов Количество полигонов в сцене size_polys 50 564
Размер файла сцены Размер файла, содержащего сцену size_kb 3 693
Дата создания сцены Дата создания сцены created 14.03.05
Комментарии к сцене Комментарии к сцене comments Сцена анимации персонажа из игры
Пакет текстур Название архива, содержащего текстуры к сцене packname My_pack
Количество текстур в архиве Количество текстур в архиве amount 20
Тип архива Тип архива, содержащего текстуры к сцене archiver_type *.zip
Объекты Количество объектов в сцене objects 12
Свет Количество источников освещения в сцене lights 3
Камеры Количество камер в сцене cameras 1
Идентификатор анимации Идентификатор файла анимации anim_id 0013
Звук Присутствует ли звук в анимированной сцене(да/нет) sound no
Количество кадров анимации Количество кадров анимации frames 150
Раскадровка Комментарий, содержащий детальное пояснение анимации персонажа raskadrovka

1-10: ходьба

11-20: бег

21-60: падение

Тип файла анимации


Тип файла анимации type *.bip
Имя файла анимации Имя файла анимации name_anifile My_anim

Размер файла анимации


Размер файла анимации size_kb_ani 825

Идентификатор автора сцены


Идентификатор автора сцены author_id 0045
Полное имя или псевдоним автора сцены Полное имя или псевдоним автора сцены author_name Renderman
Почта автора Адрес электронной почты автора сцены author_email renderman@mail.ru
Сайт автора Адрес сайта Интернет автора сцены author_www www.renman.narod.ru

2.3 Первый вариант ER-диаграммы:


Графические редакторы (пакеты трехмерного моделирования)

2.4 Построение функциональных зависимостей:


Функциональная зависимость Описание
man_email->man_name Два и более производителя не могут иметь один и тот же адрес электронной почты
man_www->man_name Два и более производителя не могут иметь один и тот же адрес сайта Интернет
author_email->author_id Два и более автора не могут иметь один и тот же адрес электронной почты
author_www->author_id Два и более автора не могут иметь один и тот же адрес сайта Интернет
scene_id->render_name Сцена не может одновременно просчитываться двумя и более разными рендерами
render_name->man_name Рендер не может быть произведен двумя и более производителями
plug_name->man_name Плагин не может быть произведен двумя и более производителями
edit_name->man_name Программа моделирования не может быть произведена двумя и более производителями
man_name->man_email, man_www, man_country Имя производителя определяет адрес его почты, сайта и страну
edit_name->supp_formats, man_name, edit_conditions Название средства моделирования определяет поддерживаемые форматы, имя производителя, условия распространения средства моделирования
render_name->man_name, ren_conditions, materials Рендер опрнднляет имя производителя, условия распространения рендера, материалы
plug_name->man_name, plug_conditions, plug_type Плагин определяет имя производителя, условия распространения плагина, тип плагина
packname, scene_id->amount, archiver_type Пакет текстур и идентификатор сцены определяют количество текстур и тип архива
scene_id->scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments Идентификатор сцены определяет имя сцены, рамер файла сцены, идентификатор автора, рендер, количество полигонов, дату создания, комментарии
scene_id->objects, lights, cameras Идентификатор сцены определяет количество объектов, количество источников света, количество камер
scene_id, anim_id->sound Идентификатор сцены и идентификатор анимации определяют наличие звука
scene_id, anim_id->frames Идентификатор сцены и идентификатор анимации определяют количество адров
scene_id, anim_id->raskadrovka Идентификатор сцены и идентификатор анимации определяют раскадровку
author_id->author_name, author_email, author_www Идентификатор автора определяет его имя, почту и сайт Интернет
scene_id, anim_id, plug_name, type->name_anifile, size_kb_ani Идентификатор сцены, идентификатор анимации, плагин, тип плагина определяют имя файла анимации и размер файла анимации

Исходное множество функциональных зависимостей


Графические редакторы (пакеты трехмерного моделирования)

Полное множество атрибутов предметной области


Z={man_name, man_email, man_www, man_country, edit_name, supp_formats, edit_conditions, render_name, materials, ren_conditions, plug_name, plug_conditions, plug_type, scene_id, scene_name, size_polys, size_kb, created, comments, packname, amount, archoiver_type, objects, lights, cameras, anim_id, sound, frames, raskadrovka, type, name_anifile, size_kb_ani, author_id, author_name, author_email, author_www}


2.5 Синтез схемы базы данных на основании функциональных зависимостей


2.5.1 Построение неизбыточного покрытия

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

scene_id -> render_name

render_name -> man_name

plug_name -> man_name

edit_name -> man_name

1. f=g \ man_name -> man_email, man_www, man_country

Проверяем: f |= man_name -> man_email, man_www, man_country

[man_name]+f = man_name

Нет => Множество ФЗ не изменяется

2. f=g \ edit_name -> supp_formats, man_name, edit_conditions

Проверяем: f |= edit_name -> supp_formats, man_name, edit_conditions

[edit_name]+f = edit_name, man_name, man_email, man_www, man_country

Нет => Множество ФЗ не изменяется

3. f=g \ render_name -> man_name, ren_conditions, materials

Проверяем: f |= render_name -> man_name, ren_conditions, materials

[render_name]+f = render_name, man_name, man_email, man_www, man_country

Нет => Множество ФЗ не изменяется

4. f=g \ plug_name -> man_name, plug_conditions, plug_type

Проверяем: f |= plug_name -> man_name, plug_conditions, plug_type

[plug_name]+f = plug_name, man_name, man_email, man_www, man_country

Нет => Множество ФЗ не изменяется

5. f=g \ packname, scene_id -> amount, archiver_type

Проверяем: f |= packname, scene_id -> amount, archiver_type

[packname, scene_id]+f = packname, scene_id, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, supp_formats, man_name, edit_conditions, man_email, man_www, man_country, ren_conditions, materials, objects, lights, cameras, author_name, author_email, author_www

Нет => Множество ФЗ не изменяется

6. f=g \ scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

Проверяем: f |= scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

[scene_id]+f = scene_id, objects, lights, cameras, render_name, man_name, ren_conditions, materials, man_email, man_www, man_country

Нет => Множество ФЗ не изменяется

7. f=g \ scene_id -> objects, lights, cameras

Проверяем: f |= scene_id -> objects, lights, cameras

[scene_id]+f = scene_id, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, supp_formats, man_name, edit_conditions, man_email, man_www, man_country, ren_conditions, materials, author_name, author_email, author_www

Нет => Множество ФЗ не изменяется

8. f=g \ scene_id, anim_id -> sound

Проверяем: f |= scene_id, anim_id -> sound

[scene_id, anim_id]+f = scene_id, anim_id, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, supp_formats, man_name, edit_conditions, man_email, man_www, man_country, ren_conditions, materials, objects, lights, cameras, frames, raskadrovka, author_name, author_email, author_www

Нет => Множество ФЗ не изменяется

9. f=g \ scene_id, anim_id -> frames

Проверяем: f |= scene_id, anim_id -> frames

[scene_id, anim_id]+f = scene_id, anim_id, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, supp_formats, man_name, edit_conditions, man_email, man_www, man_country, ren_conditions, materials, objects, lights, cameras, sound, raskadrovka, author_name, author_email, author_www

Нет => Множество ФЗ не изменяется

10. f=g \ scene_id, anim_id -> raskadrovka

Проверяем: f |= scene_id, anim_id -> raskadrovka

[scene_id, anim_id]+f = scene_id, anim_id, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, supp_formats, man_name, edit_conditions, man_email, man_www, man_country, ren_conditions, materials, objects, lights, cameras, sound, frames, author_name, author_email, author_www

Нет => Множество ФЗ не изменяется

11. f=g \ author_id -> author_name, author_email, author_www

Проверяем: f |= author_id -> author_name, author_email, author_www

[author_id]+f = author_id

Нет => Множество ФЗ не изменяется

12. f=g \ scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

Проверяем: f |= scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

[scene_id, anim_id, plug_name, type]+f = scene_id, anim_id, plug_name, type, man_name, plug_conditions, plug_type, man_email, man_www, man_country, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, supp_formats, edit_conditions, ren_conditions, materials, objects, lights, cameras, sound, frames, raskadrovka, author_name, author_email, author_www

Нет => Множество ФЗ не изменяется

13. f=g \ man_email -> man_name

Проверяем: f |= man_email -> man_name

[man_email]+f = man_email

Нет => Множество ФЗ не изменяется

14. f=g \ man_www -> man_name

Проверяем: f |= man_www -> man_name

[man_www]+f = man_www

Нет => Множество ФЗ не изменяется

15. f=g \ author_email -> author_id

Проверяем: f |= author_email -> author_id

[author_email]+f = author_email

Нет => Множество ФЗ не изменяется

16. f=g \ author_www -> author_id

Проверяем: f |= author_www -> author_id

[author_www]+f = author_www

Нет => Множество ФЗ не изменяется

17. f=g \ scene_id -> render_name

Проверяем: f |= scene_id -> render_name

[scene_id]+f = scene_id, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, supp_formats, man_name, edit_conditions, man_email, man_www, man_country, ren_conditions, materials, objects, lights, cameras, author_name, author_email, author_www

Да => g=f

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

render_name -> man_name

plug_name -> man_name

edit_name -> man_name

18. f=g \ render_name -> man_name

Проверяем: f |= render_name -> man_name

[render_name]+f = render_name, man_name, ren_conditions, materials, man_email, man_www, man_country

Да => g=f

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

plug_name -> man_name

edit_name -> man_name

19. f=g \ plug_name -> man_name

Проверяем: f |= plug_name -> man_name

[plug_name]+f = plug_name, man_name, plug_conditions, plug_type, man_email, man_www, man_country

Да => g=f

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

edit_name -> man_name

20. f=g \ edit_name -> man_name

Проверяем: f |= edit_name -> man_name

[edit_name]+f = edit_name, supp_formats, man_name, edit_conditions, man_email, man_www, man_country

Да => g=f

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

Неизбыточное покрытие

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

scene_id -> render_name

render_name -> man_name

plug_name -> man_name

edit_name -> man_name


2.5.2 Построение леворедуцированного покрытия

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

1. packname, scene_id -> amount, archiver_type

1.1. packname, scene_id -> amount, archiver_type

Проверяем: g |= scene_id -> amount, archiver_type

Нет => множество ФЗ не изменяется.

1.2. packname, scene_id -> amount, archiver_type

Проверяем: g |= packname -> amount, archiver_type

Нет => множество ФЗ не изменяется.

2. scene_id, anim_id -> sound

2.1. scene_id, anim_id -> sound

Проверяем: g |= anim_id -> sound

Нет => множество ФЗ не изменяется.

2.2. scene_id, anim_id -> sound

Проверяем: g |= scene_id -> sound

Нет => множество ФЗ не изменяется.

3. scene_id, anim_id -> frames

3.1. scene_id, anim_id -> frames

Проверяем: g |= anim_id -> frames

Нет => множество ФЗ не изменяется.

3.2. scene_id, anim_id -> frames

Проверяем: g |= scene_id -> frames

Нет => множество ФЗ не изменяется.

4. scene_id, anim_id -> raskadrovka

4.1. scene_id, anim_id -> raskadrovka

Проверяем: g |= anim_id -> raskadrovka

Нет => множество ФЗ не изменяется.

4.2. scene_id, anim_id -> raskadrovka

Проверяем: g |= scene_id -> raskadrovka

Нет => множество ФЗ не изменяется.

5. scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

5.1. scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

Проверяем: g |= anim_id, plug_name, type -> name_anifile, size_kb_ani

Нет => множество ФЗ не изменяется.

5.2. scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

Проверяем: g |= scene_id, plug_name, type -> name_anifile, size_kb_ani

Нет => множество ФЗ не изменяется.

5.3. scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

Проверяем: g |= scene_id, anim_id, type -> name_anifile, size_kb_ani

Нет => множество ФЗ не изменяется.

5.4. scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

Проверяем: g |= scene_id, anim_id, plug_name -> name_anifile, size_kb_ani

Нет => множество ФЗ не изменяется.

Леворедуцированное покрытие

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id


2.5.3 Построение праворедуцированного покрытия

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

1. man_name -> man_email, man_www, man_country

1.1. Если удаляем man_email

Проверяем: f |= man_name -> man_email

Нет => множество ФЗ не изменяется.

1.2. Если удаляем man_www

Проверяем: f |= man_name -> man_www

Нет => множество ФЗ не изменяется.

1.3. Если удаляем man_country

Проверяем: f |= man_name -> man_country

Нет => множество ФЗ не изменяется.

2. edit_name -> supp_formats, man_name, edit_conditions

2.1. Если удаляем supp_formats

Проверяем: f |= edit_name -> supp_formats

Нет => множество ФЗ не изменяется.

2.2. Если удаляем man_name

Проверяем: f |= edit_name -> man_name

Нет => множество ФЗ не изменяется.

2.3. Если удаляем edit_conditions

Проверяем: f |= edit_name -> edit_conditions

Нет => множество ФЗ не изменяется.

3. render_name -> man_name, ren_conditions, materials

3.1. Если удаляем man_name

Проверяем: f |= render_name -> man_name

Нет => множество ФЗ не изменяется.

3.2. Если удаляем ren_conditions

Проверяем: f |= render_name -> ren_conditions

Нет => множество ФЗ не изменяется.

3.3. Если удаляем materials

Проверяем: f |= render_name -> materials

Нет => множество ФЗ не изменяется.

4. plug_name -> man_name, plug_conditions, plug_type

4.1. Если удаляем man_name

Проверяем: f |= plug_name -> man_name

Нет => множество ФЗ не изменяется.

4.2. Если удаляем plug_conditions

Проверяем: f |= plug_name -> plug_conditions

Нет => множество ФЗ не изменяется.

4.3. Если удаляем plug_type

Проверяем: f |= plug_name -> plug_type

Нет => множество ФЗ не изменяется.

5. packname, scene_id -> amount, archiver_type

5.1. Если удаляем amount

Проверяем: f |= packname, scene_id -> amount

Нет => множество ФЗ не изменяется.

5.2. Если удаляем archiver_type

Проверяем: f |= packname, scene_id -> archiver_type

Нет => множество ФЗ не изменяется.

6. scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

6.1. Если удаляем scene_name

Проверяем: f |= scene_id -> scene_name

Нет => множество ФЗ не изменяется.

6.2. Если удаляем size_polys

Проверяем: f |= scene_id -> size_polys

Нет => множество ФЗ не изменяется.

6.3. Если удаляем edit_name

Проверяем: f |= scene_id -> edit_name

Нет => множество ФЗ не изменяется.

6.4. Если удаляем author_id

Проверяем: f |= scene_id -> author_id

Нет => множество ФЗ не изменяется.

6.5. Если удаляем render_name

Проверяем: f |= scene_id -> render_name

Нет => множество ФЗ не изменяется.

6.6. Если удаляем size_kb

Проверяем: f |= scene_id -> size_kb

Нет => множество ФЗ не изменяется.

6.7. Если удаляем created

Проверяем: f |= scene_id -> created

Нет => множество ФЗ не изменяется.

6.8. Если удаляем comments

Проверяем: f |= scene_id -> comments

Нет => множество ФЗ не изменяется.

7. scene_id -> objects, lights, cameras

7.1. Если удаляем objects

Проверяем: f |= scene_id -> objects

Нет => множество ФЗ не изменяется.

7.2. Если удаляем lights

Проверяем: f |= scene_id -> lights

Нет => множество ФЗ не изменяется.

7.3. Если удаляем cameras

Проверяем: f |= scene_id -> cameras

Нет => множество ФЗ не изменяется.

8. scene_id, anim_id -> sound

8.1. Если удаляем sound

Проверяем: f |= scene_id, anim_id -> sound

Нет => множество ФЗ не изменяется.

9. scene_id, anim_id -> frames

9.1. Если удаляем frames

Проверяем: f |= scene_id, anim_id -> frames

Нет => множество ФЗ не изменяется.

10. scene_id, anim_id -> raskadrovka

10.1. Если удаляем raskadrovka

Проверяем: f |= scene_id, anim_id -> raskadrovka

Нет => множество ФЗ не изменяется.

11. author_id -> author_name, author_email, author_www

11.1. Если удаляем author_name

Проверяем: f |= author_id -> author_name

Нет => множество ФЗ не изменяется.

11.2. Если удаляем author_email

Проверяем: f |= author_id -> author_email

Нет => множество ФЗ не изменяется.

11.3. Если удаляем author_www

Проверяем: f |= author_id -> author_www

Нет => множество ФЗ не изменяется.

12. scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

12.1. Если удаляем name_anifile

Проверяем: f |= scene_id, anim_id, plug_name, type -> name_anifile

Нет => множество ФЗ не изменяется.

12.2. Если удаляем size_kb_ani

Проверяем: f |= scene_id, anim_id, plug_name, type -> size_kb_ani

Нет => множество ФЗ не изменяется.

13. man_email -> man_name

13.1. Если удаляем man_name

Проверяем: f |= man_email -> man_name

Нет => множество ФЗ не изменяется.

14. man_www -> man_name

14.1. Если удаляем man_name

Проверяем: f |= man_www -> man_name

Нет => множество ФЗ не изменяется.

15. author_email -> author_id

15.1. Если удаляем author_id

Проверяем: f |= author_email -> author_id

Нет => множество ФЗ не изменяется.

16. author_www -> author_id

16.1. Если удаляем author_id

Проверяем: f |= author_www -> author_id

Нет => множество ФЗ не изменяется.

Удаление зависимостей вида X->

Праворедуцированное покрытие

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id


2.5.4 Построение классов эквивалентностей

1. Ef( man_name ):

man_name -> man_email, man_www, man_country

man_email -> man_name

man_www -> man_name

2. Ef( edit_name ):

edit_name -> supp_formats, man_name, edit_conditions

3. Ef( render_name ):

render_name -> man_name, ren_conditions, materials

4. Ef( plug_name ):

plug_name -> man_name, plug_conditions, plug_type

5. Ef( packname, scene_id ):

packname, scene_id -> amount, archiver_type

6. Ef( scene_id ):

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments

scene_id -> objects, lights, cameras

7. Ef( scene_id, anim_id ):

scene_id, anim_id -> sound

scene_id, anim_id -> frames

scene_id, anim_id -> raskadrovka

8. Ef( author_id ):

author_id -> author_name, author_email, author_www

author_email -> author_id

author_www -> author_id

9. Ef( scene_id, anim_id, plug_name, type ):

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani


2.5.5 Построение минимального покрытия

1. Проверка: f \ Ef(man_name) |= man_name -> man_email?

Нет => множество ФЗ не изменяется.

2. Проверка: f \ Ef(man_name) |= man_name -> man_www?

Нет => множество ФЗ не изменяется.

3. Проверка: f \ Ef(man_name) |= man_email -> man_www?

Нет => множество ФЗ не изменяется.

4. Проверка: f \ Ef(scene_id) |= scene_id -> scene_id?

Да => заменяем scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments и scene_id -> objects, lights, cameras на scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras.

5. Проверка: f \ Ef(scene_id, anim_id) |= scene_id, anim_id -> scene_id, anim_id?

Да => заменяем scene_id, anim_id -> sound и scene_id, anim_id -> frames на scene_id, anim_id -> sound, frames.

6. Проверка: f \ Ef(scene_id, anim_id) |= scene_id, anim_id -> scene_id, anim_id?

Да => заменяем scene_id, anim_id -> sound, frames и scene_id, anim_id -> raskadrovka на scene_id, anim_id -> sound, frames, raskadrovka.

7. Проверка: f \ Ef(author_id) |= author_id -> author_email?

Нет => множество ФЗ не изменяется.

8. Проверка: f \ Ef(author_id) |= author_id -> author_www?

Нет => множество ФЗ не изменяется.

9. Проверка: f \ Ef(author_id) |= author_email -> author_www?

Нет => множество ФЗ не изменяется.

Редуцированное минимальное покрытие

g:

man_name -> man_email, man_www, man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

author_id -> author_name, author_email, author_www

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

man_email -> man_name

man_www -> man_name

author_email -> author_id

author_www -> author_id

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

scene_id, anim_id -> sound, frames, raskadrovka


2.5.6 Получение минимального кольцевого редуцированного покрытия

Определение CF-зависимостей по классам эквивалентности

Минимальное кольцевое покрытие

( man_name; man_email; man_www; ) -> man_country

( edit_name; ) -> supp_formats, man_name, edit_conditions

( render_name; ) -> man_name, ren_conditions, materials

( plug_name; ) -> man_name, plug_conditions, plug_type

( packname, scene_id; ) -> amount, archiver_type

( author_id; author_email; author_www; ) -> author_name

( scene_id, anim_id, plug_name, type; ) -> name_anifile, size_kb_ani

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

( scene_id, anim_id; ) -> sound, frames, raskadrovka

Получение кольцевого минимального

редуцированного покрытия

Естественное характеристическое множество

для кольцевого покрытия

f(C):

man_name -> man_email

man_email -> man_www

man_www -> man_name

man_www -> man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

author_id -> author_email

author_email -> author_www

author_www -> author_id

author_www -> author_name

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

scene_id, anim_id -> sound, frames, raskadrovka

Левая редукция или перенос в правую часть

1. Проверка CF-зависимости:

( man_name; man_email; man_www; ) -> man_country

1.1. Сформированная CF-зависимость:

( man_email; man_www; ) -> man_country, man_name

Характеристические множества не эквивалентны

1.2. Сформированная CF-зависимость:

( man_name; man_www; ) -> man_country, man_email

Характеристические множества не эквивалентны

1.3. Сформированная CF-зависимость:

( man_name; man_email; ) -> man_country, man_www

Характеристические множества не эквивалентны

2. Проверка CF-зависимости:

( edit_name; ) -> supp_formats, man_name, edit_conditions

2.1. Сформированная CF-зависимость:

( ) -> supp_formats, man_name, edit_conditions, edit_name

Характеристические множества не эквивалентны

3. Проверка CF-зависимости:

( render_name; ) -> man_name, ren_conditions, materials

3.1. Сформированная CF-зависимость:

( ) -> man_name, ren_conditions, materials, render_name

Характеристические множества не эквивалентны

4. Проверка CF-зависимости:

( plug_name; ) -> man_name, plug_conditions, plug_type

4.1. Сформированная CF-зависимость:

( ) -> man_name, plug_conditions, plug_type, plug_name

Характеристические множества не эквивалентны

5. Проверка CF-зависимости:

( packname, scene_id; ) -> amount, archiver_type

5.1. Сформированная CF-зависимость:

( scene_id; ) -> amount, archiver_type, packname

Характеристические множества не эквивалентны

5.2. Сформированная CF-зависимость:

( packname; ) -> amount, archiver_type, scene_id

Характеристические множества не эквивалентны

6. Проверка CF-зависимости:

( author_id; author_email; author_www; ) -> author_name

6.1. Сформированная CF-зависимость:

( author_email; author_www; ) -> author_name, author_id

Характеристические множества не эквивалентны

6.2. Сформированная CF-зависимость:

( author_id; author_www; ) -> author_name, author_email

Характеристические множества не эквивалентны

6.3. Сформированная CF-зависимость:

( author_id; author_email; ) -> author_name, author_www

Характеристические множества не эквивалентны

7. Проверка CF-зависимости:

( scene_id, anim_id, plug_name, type; ) -> name_anifile, size_kb_ani

7.1. Сформированная CF-зависимость:

( anim_id, plug_name, type; ) -> name_anifile, size_kb_ani, scene_id

Характеристические множества не эквивалентны

7.2. Сформированная CF-зависимость:

( scene_id, plug_name, type; ) -> name_anifile, size_kb_ani, anim_id

Характеристические множества не эквивалентны

7.3. Сформированная CF-зависимость:

( scene_id, anim_id, type; ) -> name_anifile, size_kb_ani, plug_name

Характеристические множества не эквивалентны

7.4. Сформированная CF-зависимость:

( scene_id, anim_id, plug_name; ) -> name_anifile, size_kb_ani, type

Характеристические множества не эквивалентны

8. Проверка CF-зависимости:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

8.1. Сформированная CF-зависимость:

( ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras, scene_id

Характеристические множества не эквивалентны

9. Проверка CF-зависимости:

( scene_id, anim_id; ) -> sound, frames, raskadrovka

9.1. Сформированная CF-зависимость:

( anim_id; ) -> sound, frames, raskadrovka, scene_id

Характеристические множества не эквивалентны

9.2. Сформированная CF-зависимость:

( scene_id; ) -> sound, frames, raskadrovka, anim_id

Характеристические множества не эквивалентны

Проверка покрытия на праворедуцированность

1. Проверка CF-зависимости:

( man_name; man_email; man_www; ) -> man_country

2.1. Сформированная CF-зависимость:

( man_name; man_email; man_www; )

Характеристические множества не эквивалентны

2. Проверка CF-зависимости:

( edit_name; ) -> supp_formats, man_name, edit_conditions

3.1. Сформированная CF-зависимость:

( edit_name; ) -> man_name, edit_conditions

Характеристические множества не эквивалентны

3.2. Сформированная CF-зависимость:

( edit_name; ) -> supp_formats, edit_conditions

Характеристические множества не эквивалентны

3.3. Сформированная CF-зависимость:

( edit_name; ) -> supp_formats, man_name

Характеристические множества не эквивалентны

3. Проверка CF-зависимости:

( render_name; ) -> man_name, ren_conditions, materials

4.1. Сформированная CF-зависимость:

( render_name; ) -> ren_conditions, materials

Характеристические множества не эквивалентны

4.2. Сформированная CF-зависимость:

( render_name; ) -> man_name, materials

Характеристические множества не эквивалентны

4.3. Сформированная CF-зависимость:

( render_name; ) -> man_name, ren_conditions

Характеристические множества не эквивалентны

4. Проверка CF-зависимости:

( plug_name; ) -> man_name, plug_conditions, plug_type

5.1. Сформированная CF-зависимость:

( plug_name; ) -> plug_conditions, plug_type

Характеристические множества не эквивалентны

5.2. Сформированная CF-зависимость:

( plug_name; ) -> man_name, plug_type

Характеристические множества не эквивалентны

5.3. Сформированная CF-зависимость:

( plug_name; ) -> man_name, plug_conditions

Характеристические множества не эквивалентны

5. Проверка CF-зависимости:

( packname, scene_id; ) -> amount, archiver_type

6.1. Сформированная CF-зависимость:

( packname, scene_id; ) -> archiver_type

Характеристические множества не эквивалентны

6.2. Сформированная CF-зависимость:

( packname, scene_id; ) -> amount

Характеристические множества не эквивалентны

6. Проверка CF-зависимости:

( author_id; author_email; author_www; ) -> author_name

7.1. Сформированная CF-зависимость:

( author_id; author_email; author_www; )

Характеристические множества не эквивалентны

7. Проверка CF-зависимости:

( scene_id, anim_id, plug_name, type; ) -> name_anifile, size_kb_ani

8.1. Сформированная CF-зависимость:

( scene_id, anim_id, plug_name, type; ) -> size_kb_ani

Характеристические множества не эквивалентны

8.2. Сформированная CF-зависимость:

( scene_id, anim_id, plug_name, type; ) -> name_anifile

Характеристические множества не эквивалентны

8. Проверка CF-зависимости:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

9.1. Сформированная CF-зависимость:

( scene_id; ) -> size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

Характеристические множества не эквивалентны

9.2. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

Характеристические множества не эквивалентны

9.3. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, author_id, render_name, size_kb, created, comments, objects, lights, cameras

Характеристические множества не эквивалентны

9.4. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, render_name, size_kb, created, comments, objects, lights, cameras

Характеристические множества не эквивалентны

9.5. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, size_kb, created, comments, objects, lights, cameras

Характеристические множества не эквивалентны

9.6. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, created, comments, objects, lights, cameras

Характеристические множества не эквивалентны

9.7. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, comments, objects, lights, cameras

Характеристические множества не эквивалентны

9.8. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, objects, lights, cameras

Характеристические множества не эквивалентны

9.9. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, lights, cameras

Характеристические множества не эквивалентны

9.10. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, cameras

Характеристические множества не эквивалентны

9.11. Сформированная CF-зависимость:

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights

Характеристические множества не эквивалентны

9. Проверка CF-зависимости:

( scene_id, anim_id; ) -> sound, frames, raskadrovka

10.1. Сформированная CF-зависимость:

( scene_id, anim_id; ) -> frames, raskadrovka

Характеристические множества не эквивалентны

10.2. Сформированная CF-зависимость:

( scene_id, anim_id; ) -> sound, raskadrovka

Характеристические множества не эквивалентны

10.3. Сформированная CF-зависимость:

( scene_id, anim_id; ) -> sound, frames

Характеристические множества не эквивалентны

Минимальное редуцированное кольцевое покрытие

C

( man_name; man_email; man_www; ) -> man_country

( edit_name; ) -> supp_formats, man_name, edit_conditions

( render_name; ) -> man_name, ren_conditions, materials

( plug_name; ) -> man_name, plug_conditions, plug_type

( packname, scene_id; ) -> amount, archiver_type

( author_id; author_email; author_www; ) -> author_name

( scene_id, anim_id, plug_name, type; ) -> name_anifile, size_kb_ani

( scene_id; ) -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

( scene_id, anim_id; ) -> sound, frames, raskadrovka

Естественное характеристическое множество

f(C):

man_name -> man_email

man_email -> man_www

man_www -> man_name

man_www -> man_country

edit_name -> supp_formats, man_name, edit_conditions

render_name -> man_name, ren_conditions, materials

plug_name -> man_name, plug_conditions, plug_type

packname, scene_id -> amount, archiver_type

author_id -> author_email

author_email -> author_www

author_www -> author_id

author_www -> author_name

scene_id, anim_id, plug_name, type -> name_anifile, size_kb_ani

scene_id -> scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras

scene_id, anim_id -> sound, frames, raskadrovka


2.6 Логическая модель предметной области


R0 = ( man_name, man_email, man_www, man_country ) K0 = { man_name, man_email, man_www }

R1 = ( edit_name, supp_formats, man_name, edit_conditions ) K1 = { edit_name }

R2 = ( render_name, man_name, ren_conditions, materials ) K2 = { render_name }

R3 = ( plug_name, man_name, plug_conditions, plug_type ) K3 = { plug_name }

R4 = ( packname, scene_id, amount, archiver_type ) K4 = { packname, scene_id }

R5 = ( author_id, author_email, author_www, author_name ) K5 = { author_id, author_email, author_www }

R6 = ( scene_id, anim_id, plug_name, type, name_anifile, size_kb_ani ) K6 = { scene_id, anim_id, plug_name, type }

R7 = ( scene_id, scene_name, size_polys, edit_name, author_id, render_name, size_kb, created, comments, objects, lights, cameras ) K7 = { scene_id }

R8 = ( scene_id, anim_id, sound, frames, raskadrovka ) K8 = { scene_id, anim_id }

2.7 Уточненная концептуальная модель


Графические редакторы (пакеты трехмерного моделирования)

3 ПОСТРОЕНИЕ ЗАПРОСОВ


Выбрать все сцены, созданные 20.03.05


SELECT scene_id FROM 3dscene WHERE(created=”20.03.05’)

Графические редакторы (пакеты трехмерного моделирования)Графические редакторы (пакеты трехмерного моделирования)Графические редакторы (пакеты трехмерного моделирования)Графические редакторы (пакеты трехмерного моделирования)Графические редакторы (пакеты трехмерного моделирования)

Рефетека ру refoteka@gmail.com