Таблица 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