В основном вопрос заключается в том, должен ли я использовать одни и те же столбцы в каждой таблице, которая использует иерархические данные, или вместо этого иметь одну таблицу с этими столбцами, которая обрабатывает иерархические данные всех типов данных.
В моей базе данных хранятся различные типы иерархических данных: страницы, вопросы и т. Д. Ниже приводится база данных 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
, указывающий тип данных?