Скачиваний:
199
Добавлен:
15.03.2015
Размер:
746.46 Кб
Скачать

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

Номер каждого животного уникален в пределах БД

Номер каждого сотрудника уникален в пределах БД

Каждый сотрудник может работать с одним или несколькими животными, или не работать с животными

Каждый вид животного питается только одним типом корма в сезон

Один поставщик может поставлять один или несколько типов корма.

Клетки животных имеют индексы 1x и 2x, которые не располагаются рядом, в такие клетки рекомендуется поселять животных, которые несовместимы друг с другом (например, хищников и их добычу).

Создание логической и физической модели

База данных состоит из нескольких сущностей-таблиц:

Должность – содержит информацию о категориях сотрудников, зарплате категорий, а также о доступе конкретных категорий к клеткам животных

Сотрудники – информация о самих сотрудниках, включая номер должности

Животные – включает в себя информацию о конкретном животном, его вид, пол, возраст, вес и т.п.

Потомство – информация о потомстве пары особей

Вид животного – по аналогии с должностью, содержит информацию о категориях животных.

Корма – содержит информацию о поставщике, типе корма, его имеющемся количестве.

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

Логическая модель:

Физическая модель, с указанными типами данных:

Так как несколько сотрудников могут ухаживать за несколькими животными, необходимо реализовать связь «многие-ко-многим», для этого создается ассоциативная таблица «Раб_с_жив» средствами ERwin.

Также в таблице «Потомство» необходимо учесть, что номера животных-родителей не должны совпадать. Например, пользователь БД может по ошибке указать, что отец лисенка также является одновременно его матерью. Для этого необходимо прописать ограничение в таблице.

Проверка средствами Validator

Изначально проверка в этой программе выдала довольно много ошибок, но они были только двух типов: не определён альтернативный ключ таблицы, и отсутствует индекс в таблице.

Обе эти ошибки устраняются добавлением альтернативного ключа и индекса соответственно. В результате добиваемся отсутствия ошибок.

Доказательство решенности задач Прямое проектирование в субд Oracle

Необходимо произвести прямое проектирование в СУБД Oracle, но для этого сначала необходимо устранить ошибки проектирования

В результате добиваемся отсутствия ошибок

Также необходимо проверить работу ограничения в таблице «Потомство»

Как видно, нельзя выставить одинаковое значение в столбцы «Ном_жив» и «Ном_пары»

Работа sql-запросов

  1. Получить список и общее число служащих зоопарка, либо служащих данной

категории полностью, по стажу работы в зоопарке, по половому признаку, возрасту, размеру заработной платы.

select таб_ном, фамилия, пол, должн.зп, стаж_лет from сотр

join должн on сотр.ном_долж=должн.ном_долж;

  1. Получить перечень и общее число зоопарков, с которыми был произведен обмен животными в целом или животными только указанного вида.

select назв_зооп, животные.ном_жив, передача, дата_обм from зооп_обм

join животные on зооп_обм.ном_жив=животные.ном_жив;

  1. Получить список и общее число служащих зоопарка, имеющих доступ к указанному виду животных либо к конкретной особи.

select сотр.таб_ном, фамилия, животные.ном_жив from сотр

join раб_с_жив on сотр.таб_ном=раб_с_жив.таб_ном

join животные on животные.ном_жив=раб_с_жив.ном_жив order by таб_ном;

  1. Получить перечень и общее число всех животных в зоопарке либо животных указанного вида, живших в указанной клетке все время пребывания в зоопарке, по половому признаку, возрасту, весу, росту.

select животные.ном_жив, кличка, клетки_жив.номер_кл, пол_жив, возр_жив,

вес_жив, рост_жив, дата_поступ

from животные join клетки_жив on животные.ном_жив=клетки_жив.ном_жив

where номер_кл=11;

  1. Получить перечень и общее число нуждающихся в теплом помещении на зиму, полностью животных только указанного вида или указанного возраста.

select животные.ном_жив, кличка, вид_жив.назв_вида from животные

join вид_жив on вид_жив.ном_вида=животные.ном_вида

join тепл_пом on вид_жив.ном_вида=тепл_пом.ном_вида

where тепл_пом.тепл_пом='Да';

  1. Получить перечень и общее число животных, которым поставлена указанная прививка, либо переболевших некоторой болезнью, по длительности пребывания в зоопарке, половому признаку, возрасту, признаку наличия и количеству потомства.

select животные.ном_жив, кличка, привив.наим_пр, пол_жив, возр_жив, дата_поступ, (select count(потомство.ном_жив) from потомство where потомство.ном_жив=животные.ном_жив) as "Кол-во потомства" from животные

join привив on привив.ном_жив=животные.ном_жив where lower(привив.наим_пр) like '%бешенств%';

  1. Получить перечень всех животных, совместимых с указанным видом, либо только тех животных, которых необходимо переселить, или тех, которые нуждаются в теплом помещении.

select животные.ном_жив, кличка from животные

join тепл_пом on животные.ном_вида=тепл_пом.ном_вида

where тепл_пом.тепл_пом='Да';

  1. Получить перечень и общее число поставщиков кормов полностью, либо поставляющих только определенный корм, поставлявших в указанный период, по количеству поставляемого корма, цене, датам поставок.

select поставщики.ном_пост, назв_орг, типы_корм.назв_типа, дата_пост from поставщики

join корма on корма.ном_пост=поставщики.ном_пост

join типы_корм on типы_корм.ном_типа=корма.ном_типа where типы_корм.ном_типа=1 and

дата_пост>'19-ФЕВ-08';

  1. Получить перечень и объем кормов, производимых зоопарком полностью, либо только тех кормов, в поставках которых зоопарк не нуждается (обеспечивает себя сам).

select типы_корм.назв_типа, поставщики.назв_орг from поставщики

join корма on корма.ном_пост=поставщики.ном_пост

join типы_корм on корма.ном_типа=типы_корм.ном_типа

where поставщики.ном_пост=1;

  1. Получить перечень и общее число животных полностью, либо указанного вида, которым необходим определенный тип кормов, в указанном сезоне, возрасте или круглый год.

select животные.ном_жив, кличка from животные

join кормление on кормление.ном_вида=животные.ном_вида

join сезоны on кормление.ном_сез=сезоны.ном_сез

join типы_корм on типы_корм.ном_типа=кормление.ном_типа

where lower(назв_сез) like '%лето%' and lower(назв_типа) like '%живой%';

Соседние файлы в папке Сущенко Курсовая ИСТ-15