SyntaxHighlighter

воскресенье, 18 марта 2018 г.

001. Создание БД

Создаем базу данных (БД) предметной области.
Мне очень понравился бесплатный on-line инструмент https://dbdesigner.net/, который очень прост в использовании, хорошо визуализирован и позволяет выгружать готовый sql-скрипт создания БД.

Я создал небольшой пример с различными типами связей таблиц:

SQL-скрипт данной модели:

CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) NOT NULL UNIQUE,
`user_pass` varchar(150),
`ref_employee` INT,
PRIMARY KEY (`id`)
);
CREATE TABLE `filial` (
`id` INT NOT NULL AUTO_INCREMENT,
`filial_name_full` varchar(250) NOT NULL UNIQUE,
`filial_name_short` varchar(150) UNIQUE,
`filial_chif` INT NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `employee` (
`id` INT NOT NULL AUTO_INCREMENT,
`employee_first_name` varchar(50) NOT NULL,
`employee_middle_name` varchar(50),
`employee_last_name` varchar(50) NOT NULL,
`employee_position` varchar(150),
`employee_division` INT NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `division` (
`id` INT NOT NULL AUTO_INCREMENT,
`division_name_full` varchar(150) NOT NULL,
`division_name_short` varchar(100),
`parent_division` INT,
`division_chif` INT,
`parent_filial` INT NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `link_user_group` (
`user_id` INT,
`group_id` INT
);
CREATE TABLE `group` (
`id` INT NOT NULL AUTO_INCREMENT,
`group_name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
);
ALTER TABLE `user` ADD CONSTRAINT `user_fk0` FOREIGN KEY (`ref_employee`) REFERENCES `employee`(`id`);
ALTER TABLE `filial` ADD CONSTRAINT `filial_fk0` FOREIGN KEY (`filial_chif`) REFERENCES `employee`(`id`);
ALTER TABLE `employee` ADD CONSTRAINT `employee_fk0` FOREIGN KEY (`employee_division`) REFERENCES `division`(`id`);
ALTER TABLE `division` ADD CONSTRAINT `division_fk0` FOREIGN KEY (`parent_division`) REFERENCES `division`(`id`);
ALTER TABLE `division` ADD CONSTRAINT `division_fk1` FOREIGN KEY (`division_chif`) REFERENCES `employee`(`id`);
ALTER TABLE `division` ADD CONSTRAINT `division_fk2` FOREIGN KEY (`parent_filial`) REFERENCES `filial`(`id`);
ALTER TABLE `link_user_group` ADD CONSTRAINT `link_user_group_fk0` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`);
ALTER TABLE `link_user_group` ADD CONSTRAINT `link_user_group_fk1` FOREIGN KEY (`group_id`) REFERENCES `group`(`id`);

В двух словах описание предметной области:
Таблица user и group - соответственно, пользователи и группы пользователей самой системы (понадобятся в основном для вопросов безопасности - Security).
Связаны между собой таблицей link_user_group для реализации отношения многие-ко-многим между полями таблиц user и group.
Таблица employee - работники организации.
Таблица filial - список филиалов организации.
Таблица division - список всех подразделений (управлений, отделов и т.п.) организации.
Таблица подразделений реализует иерархию через поле-ссылку parent_division (родительское подразделение) на свой же идентификатор id.
Все подразделения имеют родительский филиал - поле parent_filial.
Подразделения и филиалы имеют руководителей, которые определены через поля-ссылки division_chif и filial_chif, соответственно, на поле-идентификатор id таблицы работников employee.
И напоследок, пользователь системы может быть связан с работником организации - поле-ссылка ref_employee таблицы user указывает на поле-идентификатор id таблицы employee.

Создаем инстанс (БД) MySQL с именем gtb_mini, указываем при создании кодировку по-умолчанию (Collation): utf8 - utf8_general_ci.
И запускаем на выполнение наш скрипт. Таблицы и отношения между ними созданы!

Комментариев нет:

Отправить комментарий

011. Добавление зависимостей Maven

Благодаря использованию Maven для построения проекта, все необходимые приложению зависимости добавляются путём редактирования pom.xml файл...