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

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

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

Кафедра ПО ВТ

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

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

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

Выполнил: студент гр. ПО-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’)

Pr (scene_id)

Sel (created=”20.03.05’)

3dscene