DBMS & NoSQL DBMS 모델링/설계 Current: RDB 에서 계층적으로 데이타 처리하는 법(hierarchical-data) RDB 에서 계층적으로 데이타 처리하는 법(hierarchical-data) 관계형 데이타 베이스의 가장 취약한 점중 하나는 계층적인 데이타를 표현하기 힘들다는 점입니다.실제 환경에서는 BOM(Bill Of Materials) 이나 회사의 조직도처럼 계층 구조를 모델링할 일이 많지만 RDB 는 데이타를 계층적으로 모델링할 수 있는 기능이 있습니다.이때문에 특정 DBMS 에 의존적인 방법(예: 오라클을 사용할 경우 start with connect by 구문 사용) 을 사용하거나 LDAP 처럼 계층 데이타를 표현하기 좋은 별도의 서비스와 연계해서 사용하는 방법이 있습니다.퍼코나의 개발자가 올린 Models for hierarchical data 슬라이드를 보고 안 내용인데 RDB 에서 계층 데이타를 처리할 수 있는 여러 가지 방법이 있고 이중에 꼭 알아 두어야 할 방법은 Adjacency List와 Closure Table 입니다.아래와 같은 계층형 데이타가 있을 경우 다음과 같은 방법을 통해 계층 구조를 표현할 수 있습니다.Adjacency List가장 쉽고 빠르게 계층 구조를 모델링할 수 있는 방법으로 구현도 용이합니다. 문제는 tree 의 depth 가 깊어질 경우 처리가 무지 어려워지므로 depth 가 깊지 않은 데이타(흔히 볼수 있는 1:1 상담 게시판)를 빠르게 모델링할 때 사용하면 좋습니다.모든 레코드는 부모 데이타를 참조 키로 가지며 최상위 레코드는 null 이 됩니다.idparent_idauthorcontent1nullFran21Ollie32Fran41Kukla54Ollie단점tree depth 가 깊어지면 속도가 느려지고 처리가 어려움Nested Sethttps://en.wikipedia.org/wiki/Nested_set_modelPHPbaum 업그레이드된지 3년이 넘어서 최근 버전의 laravel 지원 안 함.사용하려면 fork 후 수정 필요 Rubyhttps://github.com/collectiveidea/awesome_nested_setClosure Table계층 구조 표현 끝판왕PHP라라벨 - https://github.com/franzose/ClosureTablePHP - https://github.com/nineinchnick/closure-table-managerJavaJava 는 JPA 에 포함되어 있는 듯(확인 필요)http://b2berry.com/2011/11/19/hierarchical-data-persistence-via-closure-table/http://members.chello.at/fritz.ritzberger/downloads/jpatreedao/JpaTreeDao.htmlRefhttp://www.slideshare.net/billkarwin/models-for-hierarchical-data - MySQL/MariaDB 엔진 및 유틸리티 개발과 기술 지원 서비스를 제공하는 퍼코나의 개발자가 올린 슬라이드http://stackoverflow.com/questions/23030755/depth-in-mysql-and-closure-table-treeshttp://stackoverflow.com/questions/10481586/creating-a-table-using-closure-toolshttp://dekajp.github.io/demos/index.htmlDB에 트리 구조를 어떻게 담을 수 있을까? – SQL AntiPatterns 3장 『순진한 트리』PDF 공개!What are the options for storing hierarchical data in a relational database? - stackoverflow ×