Графические редакторы (пакеты трехмерного моделирования)
Графические редакторы (пакеты трехмерного моделирования)
Министерство образования и науки Российской Федерации
Курский Государственный Технический Университет
Кафедра ПО ВТ
КУРСОВАЯ РАБОТА
по дисциплине: “Базы данных”
Тема: “ Графические редакторы (пакеты трехмерного моделирования)”
Выполнил: студент гр. ПО-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 ПОСТРОЕНИЕ ЗАПРОСОВ
1. Выбрать все сцены, созданные 20.03.05
SELECT scene_id FROM 3dscene WHERE(created=”20.03.05')