Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД Кристина Kursovaya_rabota.doc
Скачиваний:
28
Добавлен:
08.02.2015
Размер:
384.51 Кб
Скачать

4.4. Определение дополнительных ограничений целостности

Перечислим ограничения целостности, которые не указаны в таблицах 6-13.

  1. Атрибут Код песни должен автоматически увеличиваться на одно значение при добавлении песни.

  2. Атрибут Год написания имеет значение большее 1900.

  3. Атрибут Битрейт имеет значение в промежутке от 8 до 320.

  4. Атрибут Вид носителя может либо быть пустым, либо принимать одно из трех значений:

  • «флешка»,

  • «диск»,

  • «плеер».

  1. Атрибут Качество звука может принимать одно из трех значений:

  • «высокое»,

  • «среднее»,

  • «низкое».

  1. Сочетание атрибутов Название песни и Автор – уникально.

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 Создание таблиц

  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 (‘высокое’,‘среднее’,‘низкое’))

);

  1. Отношение МУЗЫКАНТЫ (MUSICIANS):

create table Musicians

(

m_id varchar(30) primary key,

m_name varchar(30),

m_surname varchar(30)

);

  1. Отношение ЖАНРЫ (GENRES):

create table Genres

(

g_genre varchar(20) primary key

);

  1. Отношение ПЕСНИ (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)

);

  1. Отношение ПЕСНИ-ИСПОЛНИТЕЛИ (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)

);

  1. Отношение РАЗМЕР (SIZE):

create table Size

(

s_mem numeric(5,2) primary key,

s_time numeric(7,2),

check (s_mem<=0),

check (s_time<=0)

);

  1. Отношение НОСИТЕЛИ (CARRIERS):

create table Carriers

(

c_id char(3) primary key,

c_type varchar(10),

c_mem numeric(5,2) default 0 references Size

);

  1. Отношение ПЕСНИ-НОСИТЕЛИ (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. Создание представлений (готовых запросов)

  1. Упорядоченный список всех песен и их исполнителей:

create view songs_singers as

select s_name, a_mus_id

from songs, a_singers

where a_song_id=s_id

order by 1;

  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;

  1. Список всех произведений автора Имя_автора:

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;

  1. Список всех музыкальных произведений исполнителя Имя_исполнителя:

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;

  1. Список всех исполнителей музыкального произведения Название_песни:

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;

  1. Список музыкальных произведений, которые есть на двух и более носителях:

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;

  1. Список музыкальных произведений в исполнении автора Имя_автора:

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;

  1. Список музыкальных произведений, написанных пять и более лет назад:

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;

  1. Список музыкальных произведений, записанных в высоком качестве:

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