MySQL架构(分层数据)

时间:2011-06-14 19:48:44

标签: mysql sql

基本上问题是我是否应该在每个使用分层数据的表中使用相同的列,或者使用一个表来处理那些处理所有类型数据的分层数据的列。

我的数据库存储不同类型的分层数据:页面,问题等。下面给出了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仅用于分层数据。相同的列包含pagesfilesystemtemplatespermissions表。我想知道将它们放入一个表中是否更正确,并添加指示数据类型的附加列type

1 个答案:

答案 0 :(得分:1)

“正确”的答案很大程度上取决于您要做的事情以及数据的呈现方式,但我会说是的,您的建议是有道理的。如果层次结构是数据组织的核心,那么在将数据规范化时,将其分离是有意义的。

这样做会要求您在代码中添加其他逻辑,以确保您根据所查看的内容链接到正确的问题/页面/文件系统/ etc表。