2011-06-14 5 views
0

기본적으로 질문은 계층 적 데이터를 사용하는 모든 테이블에서 동일한 열을 사용해야하는지, 아니면 모든 데이터 유형의 계층 적 데이터를 처리하는 열이 하나의 테이블인지를 결정하는 것입니다.MySQL 아키텍처 (계층 적 데이터)

내 데이터베이스에는 다양한 유형의 계층 적 데이터가 저장됩니다 (페이지, 질문 등). 아래에는 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, templatespermissions 테이블입니다. 그 대신 하나의 테이블에 두는 것이 더 정확한지 궁금하고 데이터 형식을 나타내는 추가 열 type을 추가 하시겠습니까?

답변

1

'올바른'답변은 수행하려는 작업과 데이터가 표시되는 방식에 따라 크게 다르지만 예라고 답할 수 있습니다. 계층 구조가 데이터 조직의 핵심에 있다면 데이터를 정상화하는 것처럼 분리하십시오.

이렇게하려면보고있는 내용에 따라 올바른 질문/페이지/파일 시스템/etc 테이블에 링크되도록 코드에 논리를 추가해야합니다.

관련 문제