복붙노트

[SQL] 트리 데이터 구조에 대한 데이터베이스 구조

SQL

트리 데이터 구조에 대한 데이터베이스 구조

데이터베이스에 트리 데이터 구조 (수준의 알 수없는 번호를 의미하는 트리 구조) 사용자 정의를 구현하는 가장 좋은 방법이 있을까요?

나는 자체에 대한 외래 키가있는 테이블을 사용하기 전에 한 번 이런 짓을했습니다.

당신은 어떤 다른 구현보고,이 구현 메이크업 감각을 수행 할 수?

해결법

  1. ==============================

    1.당신은 가장 일반적으로 인접성 (adjacency) 목록 인 구현을 언급 : https://blogs.msdn.microsoft.com/mvpawardprogram/2012/06/25/hierarchies-convert-adjacency-list-to-nested-sets

    당신은 가장 일반적으로 인접성 (adjacency) 목록 인 구현을 언급 : https://blogs.msdn.microsoft.com/mvpawardprogram/2012/06/25/hierarchies-convert-adjacency-list-to-nested-sets

    다른 모델이 구체화 된 경로와 중첩 된 세트를 포함,뿐만 아니라있다 : http://communities.bmc.com/communities/docs/DOC-9902

    조 셀코는 일반적인 SQL 관점 (이것은 위의 중첩 된 일련의 문서 링크에서 언급)에서 좋은 참조가이 주제에 책을 썼다.

    또한, Itzik 벤 갠는 그의 책 "T-SQL 쿼리 내부 마이크로 소프트 SQL 서버 2005 '의 가장 일반적인 옵션의 좋은 개요를 가지고있다.

    모델을 선택할 때 주요 가지 고려해야 할 :

    트리 변화의 실제 구조를 수행하는 빈도 - 구조 변화 1) 주파수. 일부 모델은 더 나은 구조 업데이트 특성을 제공한다. 다른 데이터는 그러나 변경에서 별도의 구조 변화에 중요하다. 예를 들어, 회사의 조직도를 모델링 할 수 있습니다. 어떤 사람들은 자신의 상사에 직원을 연결하는 직원 ID를 사용하여, 인접성 목록으로이 모델 것입니다. 이것은 일반적으로 하위 최적의 방법입니다. 즉, 종종 더 나은 작동하는 방법은 조직 구조가 직원들로부터 자신을 분리 모델링 및 구조의 속성과 직원을 유지하는 것입니다. 이 방법, 직원 잎 회사, 조직 구조 자체를 변경, 왼쪽 직원과 바로 연결 할 필요가없는 경우.

    2) 트리 쓰기 무겁 또는 읽기 무거운 - 일부 구조가 아주 잘 작동 구조를 읽을 때,하지만 발생 추가적인 오버 헤드 구조에 기록 할 때.

    3) 정보의 종류는 어떤 기능을 수행하면 구조에서 얻을 필요 - 일부 구조는 구조에 대한 특정 종류의 정보를 제공하는 엑셀. 예를 들면 당신은 정보가 그 것이다 가장 적합한 구조를 결정하는 구조에서 필요한 것 무엇인지 알 필요 등 특정 조건을 충족하는 노드와 모든 자식을 찾는 노드와 모든 부모를 찾는 자식 노드의 수를 찾는 포함 너의 요구.

  2. ==============================

    2.MySQL의 계층 적 데이터 관리에서보세요. 그것은 관계형 데이터베이스에서 계층 (트리 형) 데이터를 저장 및 관리하기위한 두 가지 방법에 대해 설명합니다.

    MySQL의 계층 적 데이터 관리에서보세요. 그것은 관계형 데이터베이스에서 계층 (트리 형) 데이터를 저장 및 관리하기위한 두 가지 방법에 대해 설명합니다.

    테이블 자체를 참조하는 외래 키를 갖는 첫 번째 접근 방식은 본질적으로 무엇을 설명입니다 인접리스트 모델이다. 이 방법은 간단하지만, 그것은 전체 트리 건물처럼 특정 쿼리에 대한 매우 비효율적이 될 수 있습니다.

    기사에서 설명하는 두 번째 방법은 중첩 된 세트 모델입니다. 이 방법은 훨씬 더 효율적이고 유연합니다. 자세한 설명과 예를 들어 쿼리에 대한 기사를 참조하십시오.

  3. ==============================

    3.당신이 트리 데이터 구조를 구성하는 관계형 데이터베이스를 사용해야 할 경우, PostgreSQL는 계층 트리 구조에 저장된 데이터의 레이블을 나타내는 데이터 유형을 제공하는 멋진 ltree 모듈을 가지고있다. 당신은 거기에서 아이디어를 얻을 수 있습니다. (자세한 내용은 참조하십시오 : http://www.postgresql.org/docs/9.0/static/ltree.html)

    당신이 트리 데이터 구조를 구성하는 관계형 데이터베이스를 사용해야 할 경우, PostgreSQL는 계층 트리 구조에 저장된 데이터의 레이블을 나타내는 데이터 유형을 제공하는 멋진 ltree 모듈을 가지고있다. 당신은 거기에서 아이디어를 얻을 수 있습니다. (자세한 내용은 참조하십시오 : http://www.postgresql.org/docs/9.0/static/ltree.html)

    일반적인 LDAP에서 계층 구조의 레코드를 구성하는 데 사용됩니다.

  4. ==============================

    4.자체에 대한 외래 키가있는 테이블을 갖는 것은 나에게 메이크업 감각을한다.

    자체에 대한 외래 키가있는 테이블을 갖는 것은 나에게 메이크업 감각을한다.

    그런 다음 트리를 구축하기 위해 오라클의 사전 문에서 SQL의 공통 테이블 표현식 또는 연결을 사용할 수 있습니다.

  5. ==============================

    5.준비의 환상적인 컬렉션 생활 간단하게하기 위해 인접리스트 모델에 사용할 수있는 기능을 사용할 수 있습니다.

    준비의 환상적인 컬렉션 생활 간단하게하기 위해 인접리스트 모델에 사용할 수있는 기능을 사용할 수 있습니다.

    http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html

  6. ==============================

    6.나는 SQL 서버 2005에서 다음 구현을 사용했습니다. 여기 확인

    나는 SQL 서버 2005에서 다음 구현을 사용했습니다. 여기 확인

  7. ==============================

    7.이 질문에 MS SQL Server 2008 및 높은 토지를 사용하는 모든 경우 : 2008 SQL 서버 이상이 작업을 위해 특별히 설계된 새로운 "HIERARCHYID"기능이 있습니다.

    이 질문에 MS SQL Server 2008 및 높은 토지를 사용하는 모든 경우 : 2008 SQL 서버 이상이 작업을 위해 특별히 설계된 새로운 "HIERARCHYID"기능이 있습니다.

    https://docs.microsoft.com/en-us/sql/relational-databases/hierarchical-data-sql-server에서 더 많은 정보

  8. from https://stackoverflow.com/questions/935098/database-structure-for-tree-data-structure by cc-by-sa and MIT license