Архитектура MySQL (иерархические данные) - PullRequest
0 голосов
/ 14 июня 2011

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

В моей базе данных хранятся различные типы иерархических данных: страницы, вопросы и т. Д. Ниже приводится база данных questions.

CREATE TABLE `hp_questions` (
  `client_id` int(4) unsigned NOT NULL,
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT,
  `root_id` int(4) unsigned NOT NULL,
  `parent_id` int(4) unsigned NOT NULL,
  `depth` int(4) unsigned NOT NULL DEFAULT '0',
  `position` int(4) unsigned NOT NULL DEFAULT '0',
  `absolute_position` int(4) unsigned NOT NULL DEFAULT '0',
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `uri` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `body` longtext COLLATE utf8_unicode_ci,
  `last_modified_by_id` int(4) unsigned DEFAULT NULL,
  `last_modified_on` int(4) unsigned DEFAULT NULL,
  `language` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `client_id` (`client_id`)
) ENGINE=InnoDB AUTO_INCREMENT=738 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Теперь root_id, parent_id, depth, position, absolute_position используются только для иерархических данных. В этих же столбцах есть таблицы pages, filesystem, templates и permissions. Мне было интересно, будет ли правильнее вместо этого поместить их в одну таблицу и добавить дополнительный столбец type, указывающий тип данных?

1 Ответ

1 голос
/ 15 июня 2011

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

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

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