基本上问题是我是否应该在每个使用分层数据的表中使用相同的列,或者使用一个表来处理那些处理所有类型数据的分层数据的列。
我的数据库存储不同类型的分层数据:页面,问题等。下面给出了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
?
答案 0 :(得分:1)
“正确”的答案很大程度上取决于您要做的事情以及数据的呈现方式,但我会说是的,您的建议是有道理的。如果层次结构是数据组织的核心,那么在将数据规范化时,将其分离是有意义的。
这样做会要求您在代码中添加其他逻辑,以确保您根据所查看的内容链接到正确的问题/页面/文件系统/ etc表。