Главная страница
Навигация по странице:

  • Введение

  • Среда разработки

  • Этапы работы

  • Отчет по курсу технологии баз данных. Отчет по курсу технологии баз данных


    Скачать 358.87 Kb.
    НазваниеОтчет по курсу технологии баз данных
    Дата21.09.2022
    Размер358.87 Kb.
    Формат файлаdocx
    Имя файлаОтчет по курсу технологии баз данных.docx
    ТипОтчет
    #688154

    Отчет по курсу технологии баз данных

    Студент гр.**

    2020/21 учебный год
    Введение

    Разработана информационная система, в которой хранится информация о статьях, категориях, пользователях и об их комментариях. Данную систему можно использовать на сайте-блоге, она позволит хранить, получать и использовать информацию о статьях на сайте, категориях, пользователях, комментариев к статьям.

    Среда разработки

    В качестве средств разработки (программного обеспечения) был выбран сервер: MariaDB (версии 10.3.22). Этот бесплатный сервер баз данных устанавливается и конфигурируется вместе с ПО «Open Server». В качестве оболочки для работы с SQL сервером был использован программный пакет MySQL Workbench 8.0 (Рисунок 1) – это свободное программное обеспечение, которое содержит средства моделирования, администрирования сервера и визуальной работы с базами данных.



    Рисунок 1. Программный пакет MySQL Workbench



    Этапы работы

    • Для решения поставленной задачи принята схема базы данных, представленная на рисунок. 2.




    Рисунок. 2. Модель таблиц базы данных «БЛОГ» с указанием связей.


    • Заполним таблицы данными:











    • Запросы и представления к базе данных

    Стандартные запросы:

    • Количество статей: "SELECT COUNT(*) FROM article"

    • Количество пользователей: "SELECT COUNT(*) FROM user"

    • Количество категорий: "SELECT COUNT(*) FROM category"

    • Количество комментариев: "SELECT COUNT(*) FROM comment"

    • Получить статью под категорией с ID 0: "SELECT * FROM article WHERE 'id' = 0"

    • Получить все статьи автора по ID 0: "SELECT * FROM article WHERE 'user_id' = 0"

    • Получить все комментарии пользователя под ID 0: "SELECT * FROM comment WHERE 'user_id' = 0"

    • Получить все комментарии статьи под ID 0: "SELECT * FROM comment WHERE 'article_id' = 0"

    • Получить все статьи по убыванию даты создания: "SELECT * FROM article ORDER BY 'created_at' DESC"

    • Получить все статьи в порядке убывания просмотров: "SELECT * FROM article ORDER BY 'views' DESC"

    • Получить всех администраторов: "SELECT * user WHERE 'admin' = 1"

    • Получить всех обычных пользователей: "SELECT * user WHERE ‘admin’ = 0"

    • Получить три последние измененные статьи: "SELECT * FROM article ORDER BY 'updated_at' DESC LIMIT 3"


    Представления:

    1) Вывести каталог статей, указав заголовок, содержание, имя категории, имя автора и дату создания. Так как на блоге отображаются сначала свежие статьи, дополнительно отсортируем записи от новым к старым по дате создания.
    VIEW `catalog` AS

    SELECT

    `a`.`header` AS `Заголовок`,

    `a`.`content` AS `Содержание`,

    `u`.`name` AS `Имя автора`,

    `a`.`created_at` AS `Дата публикации`

    FROM

    (`article` `a`

    JOIN `user` `u` ON (`u`.`id` = `a`.`user_id`))

    ORDER BY `a`.`created_at` DESC
    Результат запроса:

    2) Вывести всех администраторов блога, указав их идентификатор, имя и количество написанных статей.
    VIEW `admins_view` AS

    SELECT

    `u`.`id` AS `#`,

    `u`.`name` AS `Имя`,

    COUNT(`a`.`id`) AS `Статей`

    FROM

    (`user` `u`

    JOIN `article` `a` ON (`u`.`id` = `a`.`user_id`))

    GROUP BY `u`.`id`
    Результат запроса:


    3) Вывести всех обычных пользователей блога, указав их идентификатор, имя и количество написанных комментариев.
    VIEW `admins_view` AS

    SELECT

    `u`.`id` AS `#`,

    `u`.`name` AS `Имя`,

    COUNT(`a`.`id`) AS `Статей`

    FROM

    (`user` `u`

    JOIN `article` `a` ON (`u`.`id` = `a`.`user_id`))

    GROUP BY `u`.`id`
    Результат запроса:


    4) Вывести категории, указав их идентификатор, имя и количество написанных статей под данной категорией.
    VIEW `categories_view` AS

    SELECT

    `c`.`id` AS `#`,

    `c`.`name` AS `Имя`,

    COUNT(`a`.`id`) AS `Количество статей`

    FROM

    (`category` `c`

    JOIN `article` `a` ON (`c`.`id` = `a`.`category_id`))

    GROUP BY `c`.`id`
    Результат запроса:


    5) Вывести категории, указав их идентификатор, имя и суммарное количество просмотров у статей под ней. (начиная от самой популярной)
    VIEW `category_views_view` AS

    SELECT

    `c`.`id` AS `#`,

    `c`.`name` AS `Имя`,

    SUM(`a`.`views`) AS `Суммарные просмотры`

    FROM

    (`category` `c`

    JOIN `article` `a` ON (`c`.`id` = `a`.`category_id`))

    GROUP BY `c`.`id`
    Результат запроса:




    • Хранимые процедуры и триггеры


    Триггеры:
    1) Поставить текущее время в столбец «обновлено в» статьи, после обновления информации в ней.
    TRIGGER `danilblog`.`article_BEFORE_UPDATE` BEFORE UPDATE ON `article`

    FOR EACH ROW

    BEGIN
    SET NEW.updated_at = NOW();
    END
    2) После удаления пользователя, удалить все написанные им статьи и комментарии если они есть.
    ENDTRIGGER `danilblog`.`user_AFTER_DELETE` AFTER DELETE ON `user`

    FOR EACH ROW

    BEGIN
    DELETE FROM article WHERE article.user_id = OLD.id;

    DELETE FROM comment WHERE comment.user_id = OLD.id;
    END
    3) После удаления категории, удалить все статьи, написанные в данной категории.
    TRIGGER `danilblog`.`user_AFTER_DELETE` AFTER DELETE ON `user`

    FOR EACH ROW

    BEGIN
    DELETE FROM article WHERE article.user_id = OLD.id;

    DELETE FROM comment WHERE comment.user_id = OLD.id;
    END
    4) После удаления статьи, удалить все комментарии написанные пользователями для данной статьи.
    TRIGGER `danilblog`.`user_AFTER_DELETE` AFTER DELETE ON `user`

    FOR EACH ROW

    BEGIN
    DELETE FROM article WHERE article.user_id = OLD.id;

    DELETE FROM comment WHERE comment.user_id = OLD.id;
    END
    5) После удаления комментария, удалить все дочерние комментарии. (комментарии, которые являются ответом на данный комментарий).
    TRIGGER `danilblog`.`comment_AFTER_DELETE` AFTER DELETE ON `comment`

    FOR EACH ROW

    BEGIN
    DELETE FROM comment WHERE comment.parent_id = OLD.id;
    END
    Хранимые процедуры:


    • Получить лучшего автора по количеству просмотров у статей.

    PROCEDURE `best_author`()

    BEGIN
    SELECT name, SUM(`a`.`views`) AS `Суммарные просмотры`

    FROM user u

    JOIN `article` a ON `u`.`id` = `a`.`user_id`

    GROUP BY name

    ORDER BY SUM(`a`.`views`) DESC

    LIMIT 1;



    END
    Пример результата:


    • Получить суммарные просмотры на блоге за период между двумя датами.

    PROCEDURE `views_between`(d1 DATE, d2 DATE)

    BEGIN
    SELECT SUM(views) AS "Суммарные просмотры"

    FROM article WHERE created_at BETWEEN d1 and d2;



    END
    Пример результата:


    написать администратору сайта