Отчет по практике: Проектирование базы данных для программы отбора и оценки научных журналов

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Таблица 7 - Атрибуты сущности «Список рейтингов»

Сущность

Атрибут

Описание

Список рейтингов

Код рейтинга

Уникальный идентификатор в базе данных

Наименование рейтинга

Название рейтинга

Минимальное значение

Минимальное значение

Максимальное значение

Максимальное значение

Направленность

Порядок сортировки лучших показателей

Год рейтинга

Год присвоения рейтинга

«Список интегральных показателей» (Таблица 8) будет содержать такие же наименования как «Список рейтингов» (Таблица 7), но другие численные значения, рассчитанные в соответствии с предлагаемой методикой.

Таблица 8 - Атрибуты сущности «Список интегральных показателей»

Сущность

Атрибут

Описание

Список интегральных показателей

Код показателя

Уникальный идентификатор в базе данных

Наименование показателя

Название показателя

Минимальное значение

Минимальное значение

Максимальное значение

Максимальное значение

Направленность

Порядок сортировки лучших показателей

Третья нормальная форма

Отношение находится в 3НФ, когда находится во 2НФ и каждый не ключевой атрибут нетранзитивно зависит от первичного ключа. Другими словами, правило приведения к 3НФ требует выносить все не ключевые поля, содержимое которых может относиться к нескольким записям таблицы, в отдельные таблицы. [1]

Для приведения модели базы данных к 3НФ все вышеуказанные сущности объединяются с помощью сущности «Рейтинги журналов» и «Специальности журналов», содержащие внешние ключи.

Таблица 9 - Атрибуты сущности «Рейтинги журналов»

Сущность

Атрибут

Описание

Список рейтингов журналов

Код рейтинга журнала

Уникальный идентификатор в базе данных

Код рейтинга

Внешний ключ к сущности «Рейтинги»

Код журнала

Внешний ключ к сущности «Журналы»

Код интегрального показателя

Внешний ключ к сущности «Интегральные показатели»

Значение рейтинга

Численное значение рейтинга

Значение интегрального показателя

Численное значение интегрального показателя

Таблица 10 - Атрибуты сущности «Специальности журналов»

Сущность

Атрибут

Описание

Список специальностей к журналам

Код специальности журнала

Уникальный идентификатор в базе данных

Код журнала

Внешний ключ к сущности «Журналы»

Код специальности

Внешний ключ к сущности «Специальности»

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

Обратной стороной данной организации базы данных является усложнение запросов, поскольку требуется выборка сразу из нескольких таблиц.

Связи между таблицами

Когда какие-то данные являются уникальными для конкретного объекта, то мы имеем дело со связью один-ко-многим. Например, для журнала такой связью может стать издательство, которое его выпустило. Для реализации данной связи нужны две таблицы.

А если есть некие данные, которые могу быть присвоены любому журналу, то имеем дело со связью многие-ко-многим. В нашем случае название рейтинга, специальность, интегральные показатели могут быть

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

Для реализации такой связи используются таблицы «Рейтинги журналов» и «Специальности журналов».

Использование связи многие-ко-многим с использованием трех таблиц и с хранением общей информации централизованно очень удобно. Ведь если общие данные меняются, то для того, чтобы информация в базе данных соответствовала действительности достаточно подправить ее только в одном месте, т.к. хранится она только в одном месте (таблице), в остальных таблицах имеются лишь ссылки на нее. Например, если изменится название специальности, достаточно поправить его в таблице «Специальности» и все связанные с данной специальностью журналы будут отображать при выборке новое название.

2.4 Создание физической моделиБД

Рисунок 5 - Физическая модель данных

Физическая модель (СУБД ориентированная модель) содержит всю информацию, необходимую для реализации конкретной БД. Эта модель связана с конкретной СУБД. На этом этапе появляются таблицы, типы данных и т.д. Данная модель БД определяет способ размещения данных в среде хранения и способы доступа к этим данным, которые поддерживаются на физическом уровне. Физическая модель будет выглядеть следующим образом (Рисунок 5 и Рисунок 6).

Рисунок 6 - Схема базы данных в MySQLWorkbench

Вывод

Проектирование базы данных это очень ответственный и важный этап в создании программы, так как база данных предопределяет дальнейшую логику работы программы и функционал. Соблюдение нормализации данных дает возможность понять какие сущности и атрибуты лишние, а какие нужно добавить. В конечном итоге была создана необходимая для программы БД, удовлетворяющая всем требованиям функционала будущей программы.

Среда разработки MySQLWorkbench показала себя с лучшей стороны для разработки базы данных.

Список использованных источников

1. Атре, Ш. Структурный подход к организации баз данных / Ш. Атре. - М.: Финансы и статистика, 2010. - 317 c.

2. Селко, Дж. SQL для профессионалов. Программирование / Селко Джо. - М.: ЛОРИ, 2015. - 464 c.

3. АткинсонMySQL. Библиотека профессионала / Аткинсон, Леон. - М.: Вильямс, 2002. - 624 c.

Приложение

Листинг программы

Код создания таблиц:

CREATE TABLE `rating_base`.`rating_list` (

`id_rating` INT NOT NULL,

`rating_name` VARCHAR(200) NULL,

`rating_min` INT NULL,

`rating_max` INT NULL,

`rating_napr` INT NULL,

`rating_year` DATE NULL,

PRIMARY KEY (`id_rating`));

Создание таблицы «Список рейтингов»

CREATE TABLE `rating_base`.`select_list` (

`id_select_list` INT NOT NULL,

`select_list_name` VARCHAR(200) NULL,

`select_list_min` INT NULL,

`select_list_max` INT NULL,

`select_list_napr` INT NULL,

PRIMARY KEY (`id_select_list`));

Создание таблицы «Список критериев отбора»

CREATE TABLE `rating_base`.`magazine_list` (

`id_magazine_list` INT NOT NULL,

`magazine_list_issn` INT NULL,

`magazine_list_barcode` VARCHAR(13) NULL,

`magazine_list_name` VARCHAR(250) NULL,

`magazine_list_date` DATE NULL,

`magazine_list_number` INT NULL,

PRIMARY KEY (`id_magazine_list`));

Создание таблицы «Список журналов»

CREATE TABLE `rating_base`.`integral_list` (

`id_integral_list` INT NOT NULL,

`integral_list_name` VARCHAR(200) NULL,

`integral_list_min` INT NULL,

`integral_list_max` INT NULL,

`integral_list_napr` INT NULL,

PRIMARY KEY (`id_integral_list`));

Создание таблицы «Список интегральных показателей»

CREATE TABLE `rating_base`.`spec_list` (

`id_spec_list` INT NOT NULL,

`spec_list_code` VARCHAR(45) NULL,

`spec_list_name` VARCHAR(250) NULL,

PRIMARY KEY (`id_spec_list`));

Создание таблицы «Список специальностей»

CREATE TABLE `rating_base`.`speclist_magazine` (

`id_speclist_magazine` INT NOT NULL,

`speclist_magazine_key` INT NULL,

`speclist_speciality_key` INT NULL,

PRIMARY KEY (`id_speclist_magazine`));

Создание таблицы «Специальности журналов»

CREATE TABLE `rating_base`.`magazine_rating` (

`id_magazine_rating` INT NOT NULL,

`magazine_rating_date` DATE NULL,

`magazine_key` INT NULL,

`rating_key` INT NULL,

`integral_key` INT NULL,

`rating_value` INT NULL,

`integral_value` INT NULL,

PRIMARY KEY (`id_magazine_rating`));

Создание таблицы «Рейтинги журналов»

Таблицы базы данных в MySQLWorkbench

SQL Дампбазыданных:

CREATE DATABASE IF NOT EXISTS `rating_base` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `rating_base`;

-- MySQL dump 10.13 Distrib 8.0.16, for Win64 (x86_64)

--

-- Host: 127.0.0.1 Database: rating_base

-- ------------------------------------------------------

-- Server version 5.6.41-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

SET NAMES utf8 ;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--

-- Table structure for table `integral_list`

--

DROP TABLE IF EXISTS `integral_list`;

/*!40101 SET @saved_cs_client = @@character_set_client */;

SET character_set_client = utf8mb4 ;

CREATE TABLE `integral_list` (

`id_integral_list` int(11) NOT NULL,

`integral_list_name` varchar(200) DEFAULT NULL,

`integral_list_min` int(11) DEFAULT NULL,

`integral_list_max` int(11) DEFAULT NULL,

`integral_list_napr` int(11) DEFAULT NULL,

PRIMARY KEY (`id_integral_list`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `integral_list`

--

LOCK TABLES `integral_list` WRITE;

/*!40000 ALTER TABLE `integral_list` DISABLE KEYS */;

/*!40000 ALTER TABLE `integral_list` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `magazine_list`

--

DROP TABLE IF EXISTS `magazine_list`;

/*!40101 SET @saved_cs_client = @@character_set_client */;

SET character_set_client = utf8mb4 ;

CREATE TABLE `magazine_list` (

`id_magazine_list` int(11) NOT NULL,

`magazine_list_issn` int(11) DEFAULT NULL,

`magazine_list_barcode` varchar(13) DEFAULT NULL,

`magazine_list_name` varchar(250) DEFAULT NULL,

`magazine_list_date` date DEFAULT NULL,

`magazine_list_number` int(11) DEFAULT NULL,

PRIMARY KEY (`id_magazine_list`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `magazine_list`

--

LOCK TABLES `magazine_list` WRITE;

/*!40000 ALTER TABLE `magazine_list` DISABLE KEYS */;

/*!40000 ALTER TABLE `magazine_list` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `magazine_rating`

--

DROP TABLE IF EXISTS `magazine_rating`;

/*!40101 SET @saved_cs_client = @@character_set_client */;

SET character_set_client = utf8mb4 ;

CREATE TABLE `magazine_rating` (

`id_magazine_rating` int(11) NOT NULL,

`magazine_rating_date` date DEFAULT NULL,

`magazine_key` int(11) DEFAULT NULL,

`rating_key` int(11) DEFAULT NULL,

`integral_key` int(11) DEFAULT NULL,

`rating_value` int(11) DEFAULT NULL,

`integral_value` int(11) DEFAULT NULL,

PRIMARY KEY (`id_magazine_rating`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `magazine_rating`

--

LOCK TABLES `magazine_rating` WRITE;

/*!40000 ALTER TABLE `magazine_rating` DISABLE KEYS */;

/*!40000 ALTER TABLE `magazine_rating` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `rating_list`

--

DROP TABLE IF EXISTS `rating_list`;

/*!40101 SET @saved_cs_client = @@character_set_client */;

SET character_set_client = utf8mb4 ;

CREATE TABLE `rating_list` (

`id_rating` int(11) NOT NULL,

`rating_name` varchar(200) DEFAULT NULL,

`rating_min` int(11) DEFAULT NULL,

`rating_max` int(11) DEFAULT NULL,

`rating_napr` int(11) DEFAULT NULL,

`rating_year` date DEFAULT NULL,

PRIMARY KEY (`id_rating`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `rating_list`

--

LOCK TABLES `rating_list` WRITE;

/*!40000 ALTER TABLE `rating_list` DISABLE KEYS */;

/*!40000 ALTER TABLE `rating_list` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `select_list`

--

DROP TABLE IF EXISTS `select_list`;

/*!40101 SET @saved_cs_client = @@character_set_client */;

SET character_set_client = utf8mb4 ;

CREATE TABLE `select_list` (

`id_select_list` int(11) NOT NULL,

`select_list_name` varchar(200) DEFAULT NULL,

`select_list_min` int(11) DEFAULT NULL,

`select_list_max` int(11) DEFAULT NULL,

`select_list_napr` int(11) DEFAULT NULL,

PRIMARY KEY (`id_select_list`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `select_list`

--

LOCK TABLES `select_list` WRITE;

/*!40000 ALTER TABLE `select_list` DISABLE KEYS */;

/*!40000 ALTER TABLE `select_list` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `spec_list`

--

DROP TABLE IF EXISTS `spec_list`;

/*!40101 SET @saved_cs_client = @@character_set_client */;

SET character_set_client = utf8mb4 ;

CREATE TABLE `spec_list` (

`id_spec_list` int(11) NOT NULL,

`spec_list_code` varchar(45) DEFAULT NULL,

`spec_list_name` varchar(250) DEFAULT NULL,

PRIMARY KEY (`id_spec_list`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `spec_list`

--

LOCK TABLES `spec_list` WRITE;

/*!40000 ALTER TABLE `spec_list` DISABLE KEYS */;

/*!40000 ALTER TABLE `spec_list` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `speclist_magazine`

--

DROP TABLE IF EXISTS `speclist_magazine`;

/*!40101 SET @saved_cs_client = @@character_set_client */;

SET character_set_client = utf8mb4 ;

CREATE TABLE `speclist_magazine` (

`id_speclist_magazine` int(11) NOT NULL,

`speclist_magazine_key` int(11) DEFAULT NULL,

`speclist_speciality_key` int(11) DEFAULT NULL,

PRIMARY KEY (`id_speclist_magazine`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `speclist_magazine`

--

LOCK TABLES `speclist_magazine` WRITE;

/*!40000 ALTER TABLE `speclist_magazine` DISABLE KEYS */;

/*!40000 ALTER TABLE `speclist_magazine` ENABLE KEYS */;

UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2020-05-19 10:49:23