- •Отчет о курсовой работе по курсу «Базы данных»
- •Оглавление
- •1. Инфологическое проектирование
- •1.1. Анализ предметной области
- •1.2. Анализ информационных задач и круга пользователей системы
- •1) Функциональные возможности:
- •2) Готовые запросы:
- •2. Определение требований к операционной обстановке
- •3. Выбор субд и других программных средств
- •4. Логическое проектирование реляционной бд
- •4.1. Преобразование er–диаграммы в схему базы данных
- •4.2. Составление реляционных отношений
- •4.3. Нормализация полученных отношений(до 4нф)
- •4.4. Определение дополнительных ограничений целостности
- •4.5. Описание групп пользователей и прав доступа
- •5 Реализация проекта базы данных
- •5.1 Создание таблиц
- •5.2. Создание представлений (готовых запросов)
- •5.3. Назначение прав доступа
- •5.4. Создание индексов
- •5.5. Разработка стратегии резервного копирования
4.4. Определение дополнительных ограничений целостности
Перечислим ограничения целостности, которые не указаны в таблицах 6-13.
Атрибут Код песни должен автоматически увеличиваться на одно значение при добавлении песни.
Атрибут Год написания имеет значение большее 1900.
Атрибут Битрейт имеет значение в промежутке от 8 до 320.
Атрибут Вид носителя может либо быть пустым, либо принимать одно из трех значений:
«флешка»,
«диск»,
«плеер».
Атрибут Качество звука может принимать одно из трех значений:
«высокое»,
«среднее»,
«низкое».
Сочетание атрибутов Название песни и Автор – уникально.
4.5. Описание групп пользователей и прав доступа
Опишем для каждой группы пользователей права доступа к каждой таблице. Права приведены в таблице 14. Используются следующие сокращения:
s – чтение данных (select);
i – добавление данных (insert);
u – модификация данных (update);
d – удаление данных(delete).
Таблица 14. Права доступа к таблицам для групп пользователей
Таблицы |
Группы пользователей (роли) | |||
Администратор |
Владелец музыкальных произведений |
Слушатель |
Владелец носителей | |
Песни |
SIUD |
SIUD |
S |
S |
Музыканты |
SIUD |
SUID |
S |
S |
Носители |
SIUD |
– |
S |
SUID |
Песни-Исполнители |
SIUD |
SUID |
S |
S |
Песни-Носители |
SIUD |
– |
S |
SUID |
Качество |
SIUD |
SUID |
S |
– |
Размер |
SIUD |
– |
– |
SUID |
Жанры |
SIUD |
SUID |
S |
S |
5 Реализация проекта базы данных
5.1 Создание таблиц
Отношение КАЧЕСТВО (QUALITY):
create table Quality
(
q_bit numeric(3) primary key,
q_quality varchar(10) not null,
check (q_bit>=8 and q_bit<=320),
check (q_quality in (‘высокое’,‘среднее’,‘низкое’))
);
Отношение МУЗЫКАНТЫ (MUSICIANS):
create table Musicians
(
m_id varchar(30) primary key,
m_name varchar(30),
m_surname varchar(30)
);
Отношение ЖАНРЫ (GENRES):
create table Genres
(
g_genre varchar(20) primary key
);
Отношение ПЕСНИ (SONGS):
create table Songs
(
s_id mediumint not null auto_increment,
s_name varchar(30) not null,
s_year numeric(4),
s_genre varchar(20) references Genres,
s_bit numeric(3) references Quality,
s_writer varchar(30) references Musicians,
check (s_year>1900),
primary key (s_id),
unique (s_name,s_writer)
);
Отношение ПЕСНИ-ИСПОЛНИТЕЛИ (A_SINGERS):
create table A_Singers
(
a_song_id numeric(4) references Songs,
a_mus_id varchar(30) references Musicians,
primary key (a_song_id, a_mus_id)
);
Отношение РАЗМЕР (SIZE):
create table Size
(
s_mem numeric(5,2) primary key,
s_time numeric(7,2),
check (s_mem<=0),
check (s_time<=0)
);
Отношение НОСИТЕЛИ (CARRIERS):
create table Carriers
(
c_id char(3) primary key,
c_type varchar(10),
c_mem numeric(5,2) default 0 references Size
);
Отношение ПЕСНИ-НОСИТЕЛИ (B_SONG_CAR):
create table B_Song_Car
(
b_song_id numeric(3) references Songs,
b_car_id char(3) default 0 references Carriers,
primary key (b_song_id, b_car_id)
);
5.2. Создание представлений (готовых запросов)
Упорядоченный список всех песен и их исполнителей:
create view songs_singers as
select s_name, a_mus_id
from songs, a_singers
where a_song_id=s_id
order by 1;
Список песен, которых нет ни на одном носителе:
create view default as
select s_name, a_mus_id
from songs, a_singers, b_song_car
where b_car_id=0 and b_song_id=s_id and s_id=a_song_id
order by s_name;
Список всех произведений автора Имя_автора:
create view author_songs as
select s_name, a_mus_id, s_year, s_genre
from songs, a_singers
where s_writer=Имя_автора and s_id=a_song_id
order by s_year, s_name;
Список всех музыкальных произведений исполнителя Имя_исполнителя:
create view singer_songs as
select s_name, s_writer, s_bit
from songs, a_singers
where a_mus_id=Имя_исполнителя and s_id=a_song_id
order by s_name;
Список всех исполнителей музыкального произведения Название_песни:
create view song_singers as
select m_id, m_name, m_surname
from songs, a_singers, musicians
where s_name=Название_песни and s_id=a_song_id
and a_mus_id=m_id
order by m_id;
Список музыкальных произведений, которые есть на двух и более носителях:
create view songs_carriers as
select count(b_car_id), b_song_id, s_name, a_mus_id
from b_song_car, songs, a_singers
where b_song_id=s_id and s_id=a_song_id
group by b_song_id
having count(b_car_id)>=2;
Список музыкальных произведений в исполнении автора Имя_автора:
create view authors_songs as
select s_name, s_year
from songs, a_singers
where s_writer=Имя_автора and s_writer=a_mus_id
and s_id=a_song_id
order by s_name;
Список музыкальных произведений, написанных пять и более лет назад:
create view year_songs as
select s_year, s_name, s_writer
from songs
where s_year<=year(now())-5
group by s_name, s_writer
order by s_year, s_name;
Список музыкальных произведений, записанных в высоком качестве:
create view high_quality as
select s_name, a_mus_id, s_bit
from songs, a_singers, quality
where q_quality=’высокое’ and s_bit=q_bit
and s_id=a_song_id
order by s_name;
Для того чтобы можно было работать с созданными представлениями, соответствующим пользователям нужно назначить права доступа к представлениям. Эти права перечислены в таблице 15.
Таблица 15. Права доступа к представлениям
Таблицы |
Группы пользователей (роли) | |||
Администратор |
Владелец музыкальных произведений |
Слушатель |
Владелец носителей | |
Песни и их исполнители |
S |
S |
S |
S |
Песни без носителей |
S |
S |
– |
S |
Все произведения 1го автора |
S |
S |
S |
S |
Все произведения 1го исполнителя |
S |
S |
S |
S |
Все исполнители 1ой песни |
S |
S |
S |
S |
Песни на 2х и более носителях |
S |
S |
- |
S |
Исполненные песни автора |
S |
S |
S |
– |
Песни, написанные более 4 лет назад |
S |
S |
S |
– |
Песни в высоком качестве |
S |
S |
S |
S |