совет MySql дизайн таблиц - PullRequest
       6

совет MySql дизайн таблиц

0 голосов
/ 16 декабря 2018

Привет, ребята, мне было интересно, есть ли лучший способ сделать какие-нибудь таблицы MySQL.Я должен оценить (в приложении php), как задача была выполнена на основе 9 атрибутов. Проблема в том, что один раз в год столбцы могут меняться (имя не количество полей оценки)

CREATE TABLE IF NOT EXISTS `grades` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `score_id` int(10) NOT NULL,
  `task_number` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `assigned_to` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `location` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL,
  `completed_at` date NOT NULL,
  `priority` tinyint(1) NOT NULL DEFAULT '0',
  `worknotes` tinyint(1) NOT NULL DEFAULT '0',
  `client_com` tinyint(1) NOT NULL DEFAULT '0',
  `closure_info` tinyint(1) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL DEFAULT '0',
  `category` tinyint(1) NOT NULL DEFAULT '0',
  `ci` tinyint(1) NOT NULL DEFAULT '0',
  `timecard` tinyint(1) NOT NULL DEFAULT '0',
  `resolution_time` tinyint(1) NOT NULL DEFAULT '0',
  `validated` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
COMMIT;

ТакМоя первая мысль состоит в том, чтобы создать еще одну таблицу с именем атрибута и иметь две такие таблицы:

  CREATE TABLE IF NOT EXISTS `grades` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `score_id` int(10) NOT NULL,
  `task_number` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `assigned_to` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `location` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL,
  `completed_at` date NOT NULL,
  `grade1` tinyint(1) NOT NULL DEFAULT '0',
  `grade2` tinyint(1) NOT NULL DEFAULT '0',
  `grade3` tinyint(1) NOT NULL DEFAULT '0',
  `grade4` tinyint(1) NOT NULL DEFAULT '0',
  `grade5` tinyint(1) NOT NULL DEFAULT '0',
  `grade6` tinyint(1) NOT NULL DEFAULT '0',
  `grade7` tinyint(1) NOT NULL DEFAULT '0',
  `grade8` tinyint(1) NOT NULL DEFAULT '0',
  `grade9` tinyint(1) NOT NULL DEFAULT '0',
  `validated` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
COMMIT;

и

   CREATE TABLE IF NOT EXISTS `evaluation_fields` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
COMMIT;

INSERT INTO `evaluation_fields` (`id`, `name`) VALUES
(1, 'Priority'),
(2, 'Worknotes'),
(3, 'Client Com'),
(4, 'Closure information'),
(5, 'Status management'),
(6, 'Category management'),
(7, 'CI identification', ),
(8, 'Timecard management'),
(9, 'Resolution Time');
COMMIT;

Как бы вы порекомендовали это сделать?Спасибо заранее за ваше время.Надеюсь, у меня есть какой-то смысл

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

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

Я предлагаю вам иметь возможность управлять этим с 3 таблицами:

атрибуты содержитвсе атрибуты, которые можно использовать для оценки задачи.В основном это ссылочная таблица, содержание которой изменяется только тогда, когда необходимо создавать новые оценочные атрибуты (например, раз в год).Например:

id        - primary key
name  - name of the evaluation attribute 

оценки предназначены для хранения результатов оценки.Существует одна строка для каждой оценки, с несколькими полями, содержащими основные данные оценки, например:

id     - primary key
score_id
task_number
assigned_to
location 
completed_at
priority 

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

id                    - primary key 
grade_id         - foreign key to column id in table grades
evaluation_id  - foreign key to column id in table attributes
0 голосов
/ 16 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...