- •Оглавление
- •Введение
- •Постановка задачи
- •Краткое описание предметной области
- •Описание таблиц базы данных
- •Описание процедур базы данных
- •Триггеры и джобы
- •Тестирование
- •Тестирование хранимых процедур и триггеров
- •Тестирование «джобов»
- •Оценка нормализации базы данных
- •Диаграмма базы данных
- •Заключение
- •Библиографический список
- •Приложение
Триггеры и джобы
Триггер AddUserTrigger для таблицы user_info, при добавлении кортежа в эту таблицу создает кортежи в таблицах user_activity и visitor_statistic для пользователя с идентификатором id_user из user_info.
Триггер AddTopicTrigger для таблицы topic, при добавлении кортежа в эту таблицу увеличивает кол-во тем в рубрике, которой принадлежит данная тема, изменяет дату последней модификации, увеличивает кол-во тем пользователя, добавившего тему.
Триггер AddMessageTrigger для таблицы message_info, при добавлении кортежа в эту таблицу увеличивает кол-во сообщений в теме и рубрике, которой принадлежит данное сообщение, изменяет дату последней модификации темы и рубрики, увеличивает кол-во сообщений пользователя, добавившего сообщение.
Джоб BackUpDatabase осуществляет резерное копирование базы данных. Выполнение джоба будет происходить каждую неделю в понедельник в 5:00.
Джоб DetermineBestUser осуществляет выбор лучшего пользователя месяца. Выполнение джоба будет происходить каждый месяц в первый день месяца в 22:00.
Джоб TopicsDelete осуществляет удаление тем, на которые нет ни одного ответа в течение двух недель. Выполнение джоба будет происходить каждую неделю в понедельник в 6:00.
Джоб UnlockUsers осуществляет разблокировка пользователя согласно сроку разблокировки в «черном списке». Выполнение джоба будет происходить каждый день в 0:00.
Тестирование
Тестирование хранимых процедур и триггеров
Тестироване процедуры AddUser:
exec AddUser
@nikname = 'Alex',
@passwd = '1234',
@name = 'Алексей',
@surname = 'В',
@email = 'alex@mail.ru',
@birthday = '11-23-1992',
@city = 'Москва',
@telephone = '+79086153456',
@sex = 0,
@time_zone = 3
exec AddUser
@nikname = 'Ivan',
@passwd = '1222',
@name = 'Иван',
@surname = 'А',
@email = 'ivan@mail.ru',
@birthday = '03-12-1985',
@city = 'Тверь',
@telephone = '+79026123436',
@sex = 0,
@time_zone = 4
exec AddUser
@nikname = 'Olga',
@passwd = '1234',
@name = 'Ольга',
@surname = 'П',
@email = 'olga@mail.ru',
@birthday = '12-05-1989',
@city = 'Санкт-Петербург',
@telephone = '+79126343496',
@sex = 1,
@time_zone = 2
Тестирование показало корректность работы процедуры AddUser (созданы логин и пользователь, и заполнена таблица user_info), а также триггера AddUserTrigger, создающего для каждого зарегистрированного пользователя запись в таблицах user_activity и visitor_statistic
Тестироване процедуры DeleteUser:
exec DeleteUser
@nikname = 'Alex'
Тестирование показало корректность работы процедуры DeleteUser (логин и пользователь удалены, из таблицы user_info удален кортеж), записи в таблицах user_activity и visitor_statistic удалены.
Тестироване процедуры ShowPrivateInfo:
Залогинимся в БД от имени пользователя user_Ivan
exec ShowPrivateInfo
Процедура ShowPrivateInfo работает верно (информация выведена для текущего пользователя).
Тестироване процедуры ChangePrivateInfo:
exec ChangePrivateInfo
@city = 'Новосибирск',
@telephone = '+79086743857'
Процедура ChangePrivateInfo работает верно (введенная информация изменена, остальная оставлена без изменений).
Тестироване процедуры AddUserToBlackList:
exec AddUserToBlackList
@nikname = 'Olga',
@reason_text = 'нарушение правил форума',
@date_end = '01-12-2013'
Тестироване процедуры CreateGroup:
exec CreateRubric
@title = 'Rubric1'
Тестироване процедуры JoinGroup:
exec JoinGroup
@groupname = 'Group1'
Тестироване процедуры CreateTopic:
exec CreateTopic
@title = 'Topic1',
@rubric = 'Rubric1'
exec CreateTopic
@title = 'Topic2',
@rubric = 'Rubric1'
Процедура CreateTopic работает верно (темы добавлены, кол-во тем в рубрике изменено триггером AddTopicTrigger).
Тестироване процедуры CreateMessage:
exec CreateMessage
@message_text = 'Привет',
@title = 'Topic1'
exec CreateMessage
@message_text = 'Привет',
@title = 'Topic1'
Процедура CreateMessage работает верно (сообщения добавлены, кол-во сообщений в теме и популярность рубрики изменены триггером AddMessageTrigger).
Тестироване процедуры CreateVote:
exec CreateVote
@question = 'Вопрос',
@group = 'Group1',
@date_end = '01-08-2013'
Тестироване процедуры AddAnswer:
exec AddAnswer
@vote = 1,
@ans_text = 'Ответ №1'
exec AddAnswer
@vote = 1,
@ans_text = 'Ответ №2'
exec AddAnswer
@vote = 1,
@ans_text = 'Ответ №3'
Процедура AddAnswer работает верно (ответы добавлены, автоматически нумируются по порядку).
Тестироване процедуры VoteCast:
exec VoteCast
@vote = 1,
@ans_number = 2
Тестироване процедуры LeaveGroup:
exec LeaveGroup
@group = 'Group1'
Процедура LeaveGroup работает верно (полдьзователь удален из группы).
Тестироване процедуры DeleteMessageFromOwnTopic:
exec DeleteMessageFromOwnTopic
@id_message = 1
Создадим тему от имени другого пользователя. Добавим в него сообщение. Попытаемся его удалить. Получаем следующее сообщение:
т.е. пользователь имеет возможность удалять сообщения только из собственной темы.
Тестироване процедуры MessagesNumberStatistic:
DECLARE @num INTEGER
exec MessagesNumberStatistic
@agrigatetype = 3, --1 - min, 2 - max, 3 - avg
@periodtype = 3, --1 - day, 2 - month, 3 - year
@number = @num OUTPUT
PRINT @num
Результат 3
DECLARE @num INTEGER
exec MessagesNumberStatistic
@agrigatetype = 3, --1 - min, 2 - max, 3 - avg
@periodtype = 2, --1 - day, 2 - month, 3 - year
@number = @num OUTPUT
PRINT @num
Результат 2
DECLARE @num INTEGER
exec MessagesNumberStatistic
@agrigatetype = 2, --1 - min, 2 - max, 3 - avg
@periodtype = 1, --1 - day, 2 - month, 3 - year
@number = @num OUTPUT
PRINT @num
Результат 4
Тестироване процедуры TimeMessageStatistic:
exec TimeMessageStatistic
@periodtype = 1
exec TimeMessageStatistic
@periodtype = 2
exec TimeMessageStatistic
@periodtype = 3
