MS SQL Server에서 `hierarchyid` 데이터 형식은 계층 구조 데이터를 저장하고 검색하는 데 사용됩니다. 이 데이터 형식은 트리 구조를 표현하고 부모-자식 관계를 나타냅니다. `hierarchyid`는 계층 구조 데이터를 효율적으로 저장하고 쿼리하는 데 특히 유용합니다.
`hierarchyid` 데이터 형식은 다음과 같은 특징을 가집니다:
1. 고유한 식별자: 각 노드에는 계층 구조 내에서 고유한 식별자가 할당됩니다.
2. 트리 구조: 각 노드는 부모 노드와 자식 노드를 나타내는 계층 구조적인 관계를 가집니다.
3. 경로 정보: `hierarchyid` 값은 루트 노드에서 특정 노드까지의 경로를 나타냅니다.
4. 계층적 연산: `hierarchyid` 값 사이에서 계층적인 연산을 수행할 수 있습니다. 예를 들어, 부모-자식 관계 확인, 자식 노드 추가, 부모 노드 이동 등이 가능합니다.
예를 들어, 다음은 간단한 조직 구조를 나타내는 `EmployeeHierarchy` 테이블의 구조입니다.
EmployeeID | EmployeeName | HierarchyPath
-----------------------------------------
1 | CEO | /
2 | Manager | /1/
3 | Supervisor | /1/2/
4 | Staff | /1/2/3/
5 | Staff | /1/2/3/
여기서 `HierarchyPath` 열은 `hierarchyid` 데이터 형식을 사용하여 계층적 구조를 나타냅니다. 예를 들어, `/1/2/3/`은 CEO(1)의 하위에 있는 Manager(2), 그리고 Manager(2)의 하위에 있는 Supervisor(3)를 나타냅니다.
다음은 `EmployeeHierarchy` 테이블에 새로운 Staff(6)를 추가하는 예제입니다.
DECLARE @newEmployeeHierarchy hierarchyid;
SELECT @newEmployeeHierarchy = MAX(HierarchyPath.GetDescendant(NULL, NULL))
FROM EmployeeHierarchy
WHERE HierarchyPath.GetAncestor(1) = '/' AND HierarchyPath.GetLevel() = 1;
INSERT INTO EmployeeHierarchy (EmployeeID, EmployeeName, HierarchyPath)
VALUES (6, 'Staff', @newEmployeeHierarchy.GetDescendant(NULL, NULL));
위의 예제에서 `GetDescendant` 함수는 새로운 자식 노드의 `hierarchyid` 값을 생성합니다. 이를 통해 Staff(6)를 Supervisor(3)의 하위에 추가합니다.
`hierarchyid`를 사용하면 계층적 데이터를 쉽게 관리하고 쿼리할 수 있으며, 특히 조직도나 부서 구조와 같은 계층적 데이터를 다룰 때 매우 유용합니다.
'SQL > MSSQL' 카테고리의 다른 글
[MSSQL] GetRoot 사용 방법 및 예시 (0) | 2024.04.22 |
---|---|
[MSSQL] GetLevel 사용 방법 및 예시 (0) | 2024.04.22 |
[MSSQL] GetDescendant 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL] GetAncestor 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL] smalldatetime 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL] datetimeoffset 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL]DATE, DATETIME, TIME 날짜 시간 데이터 형식 (0) | 2024.04.09 |
[MSSQL] 데이터 암호화, 복호화 (ENCRYPTBYKEY, DECRYPTBYKEY) (0) | 2023.09.06 |