디렉토리 / 계층 / 트리 구조를 데이터베이스에 저장하는 방법은 무엇입니까?
데이터베이스에 디렉토리/계층/트리 구조를 저장하는 방법은 무엇입니까?즉, MSSQL 서버입니다.
@olavk: 당신은 제 대답을 본 것 같지 않습니다.제가 사용하는 방법은 재귀 쿼리보다 훨씬 낫습니다 :)
추신. 이게 최선의 방법입니다!
SQL 데이터베이스에 계층을 저장하는 방법은 여러 가지가 있습니다.어떤 DBMS 제품을 사용할지와 데이터가 사용되는 방법에 따라 어떤 것을 선택할지가 달라집니다.MSSQL 2005 태그를 사용했으므로 "인접 목록" 모델을 고려해야 합니다. 애플리케이션에서 성능이 좋지 않은 경우 Vadim Tropashko의 비교를 통해 여러 성능 특성에 중점을 둔 모델 간의 차이점을 확인하십시오.
SQL 서버 2008을 사용하는 것이 옵션인 경우: 새 계층 ID 데이터 유형을 확인해야 합니다.
상위 항목에 비해 몇 가지 이점이 있는 중첩 집합 트리 모델도 있습니다.ID 모델.http://www.evanpetersen.com/item/nested-sets.html 및 http://falsinsoft.blogspot.nl/2013/01/tree-in-sql-database-nested-set-model.html 을 참조하십시오.
이것은 질문이라기보다는 책갈피에 가깝지만, 당신에게도 도움이 될 수 있습니다.데이터베이스에 디렉터리/트리 구조를 저장하기 위해 이 문서의 접근 방식을 사용했습니다.
기사에는 유용한 코드 스니펫도 있습니다.
이게 도움이 되길 바랍니다.
저는 어떤 식으로든 그 웹사이트에 가입되어 있지 않습니다.
저는 제 프로젝트 중 하나에서 비슷한 문제에 직면했습니다.우리는 앞으로도 계속해서 증가할 거대한 계층 구조를 가지고 있었습니다.빠른 속도로 이동한 후 복잡한 검증을 거친 후 적합한 그룹을 찾아야 했습니다.재귀 쿼리가 유일한 실행 가능한 솔루션이라는 것을 알았을 때 SQL Server에 가서 머리를 긁적이는 대신 어떻게 효율적으로 작업을 수행할 수 있을까요?하지만 재귀 쿼리에서 최적화가 가능한지 정말로 알고 계십니까?향후 계층 구조가 증가하지 않을 것이라는 보장이 있습니까? 그리고 어느 화창한 날 당신은 재귀 쿼리가 너무 느려서 프로덕션에서 사용할 수 없다는 것을 알게 될 것입니다.
그래서 Neo4J에게 주사를 놓기로 했습니다.이것은 많은 유용한 알고리즘이 내장된 그래프 데이터베이스이며, 훌륭한 문서와 예제가 포함된 놀랍도록 빠른 트래버설입니다.계층 구조를 Neo4J에 저장하고 Sresft 서비스(또는 다른 서비스)를 사용하여 계층 구조에 액세스합니다.예, SQL 쿼리를 Neo4J와 통합할 코드를 작성해야 하지만 확장 가능하고 미래에 대비할 수 있는 솔루션을 갖게 될 것입니다.
이것이 유용하기를 바랍니다.
SQL Server 2005를 사용하고 있습니까?재귀 쿼리를 사용하면 계층 데이터를 훨씬 더 우아하게 쿼리할 수 있습니다.
편집: 저는 구체화된 경로가 약간 해킹이라고 생각합니다.경로에는 정규화되지 않은 중복 데이터가 포함되어 있으며, 이를 업데이트하려면 트리거 등을 사용해야 합니다.예를 들어 노드가 상위 노드를 변경하는 경우 전체 하위 트리의 경로를 업데이트해야 합니다.그리고 하위 트리 쿼리는 우아하고 빠른 조인보다는 추한 하위 문자열 일치를 사용해야 합니다.
문제는 종결된 이 문제와 유사합니다.저는 두 가지 질문에 대한 답이 제 연구에 매우 도움이 된다는 것을 알게 되었고, 결국 나무 구조를 모델링하는 다섯 가지 다른 방법을 제시하는 MongoDB 매뉴얼로 저를 이끌었습니다. https://docs.mongodb.com/manual/applications/data-models-tree-structures/
MongoDB는 관계형 데이터베이스가 아니지만, 제시된 모델은 관계형 데이터베이스뿐만 아니라 JSON과 같은 다른 형식에도 적용할 수 있습니다.제시된 장단점을 바탕으로 어떤 모델이 옳은지 분명히 파악해야 합니다.
이 질문의 작성자는 상위 경로 모델과 구체화된 경로 모델을 모두 결합한 솔루션을 찾았습니다.깊이와 상위를 유지하면 일부 문제(추가 논리, 성능)가 발생할 수 있지만 특정 요구에는 분명히 긍정적인 측면이 있습니다.제 프로젝트에서는 구체화된 경로가 가장 잘 작동할 것이며, 이 기사의 기술을 통해 몇 가지 문제(정렬 및 경로 길이)를 극복했습니다.
일반적인 방법은 외부 키(예: "ParentId")가 있는 테이블입니다.
언급URL : https://stackoverflow.com/questions/144344/how-to-store-directory-hierarchy-tree-structure-in-the-database
'programing' 카테고리의 다른 글
개체를 저장할 때 SpringBoot JPA@CreatedDate@LastModifiedDate가 채워지지 않음 (0) | 2023.07.07 |
---|---|
투명 이미지 버튼을 사용하는 방법:안드로이드 (0) | 2023.07.07 |
변수가 해시인지 배열인지 알 수 있는 루비의 우아한 방법은 무엇입니까? (0) | 2023.07.07 |
테이블의 모든 행 삭제 (0) | 2023.07.07 |
500.21 불량 모듈 목록의 "Managed Pipeline Handler" (0) | 2023.07.07 |