테이블 평면화
테이블 평면화는 관련 테이블의 계층 구조를 관계형 데이터베이스에 하나의 테이블로 저장합니다.
연장 모델
시스템은 관계형 데이터베이스에 테이블 계층 구조를 저장하기 위해 이러한 확장 모델을 제공합니다.
| 연장 모델 | 테이블을 평면화합니까? |
|---|---|
| 클래스당 테이블 | 아니요 |
| 계층 구조당 테이블 | 예 |
| 파티션당 테이블 | 예 |
클래스당 테이블
클래스당 테이블 확장 모델은 계층 구조의 각 테이블을 관계형 데이터베이스의 자체 물리적 테이블에 저장합니다. 각 물리적 테이블은 소스 테이블의 테이블 프리픽스를 사용하며, 각각 다른 레코드 클래스를 저장합니다. 클래스당 테이블 확장 모델의 예로는 자산 [alm_asset] 테이블과 해당 하위 테이블인 하드웨어[alm_hardware], 소모품[alm_consumable], 시설[alm_facility] 및 소프트웨어 라이센스[alm_license]가 있습니다. 계층 구조의 상위 테이블인 Asset은 모든 기록의 복사본을 하위 테이블에 저장합니다.
클래스 확장 모델당 테이블에서 기록을 찾기 위해 시스템은 여러 테이블의 기록을 쿼리하고 결과를 조인합니다. 예를 들어, 관련 시설에서 하드웨어를 검색할 때 시스템은 하드웨어, 시설 및 자산 테이블의 결과를 결합해야 합니다.
테이블 조인은 관계형 데이터베이스에서 성능 병목 현상을 일으킵니다. 쿼리에 포함된 클래스가 많을수록 쿼리 성능이 저하됩니다. 따라서 테이블 계층 구조의 맨 위에 있는 레코드에 대한 쿼리는 모든 하위 테이블을 조인해야 하므로 성능이 가장 낮습니다.
시스템에서는 테이블을 만들 때 기본적으로 클래스당 테이블 확장 모델을 사용합니다. 또한 대부분의 시스템 테이블은 평면화해도 성능이 향상되지 않으므로 클래스당 테이블 확장 모델을 사용합니다.
계층 구조당 테이블
계층 구조당 테이블 확장 모델은 전체 테이블 계층 구조를 관계형 데이터베이스의 단일 플랫 물리적 테이블에 저장합니다. 물리적 테이블의 이름은 작업과 같은 계층 구조의 상위 테이블의 이름을 따서 지정됩니다. 실제 테이블은 테이블 계층 구조의 모든 레코드를 포함하며 계층 구조의 각 하위 테이블에 클래스 이름 열 값을 할당합니다. 시스템은 소스 테이블의 이름을 클래스 이름 값으로 사용합니다. 예를 들어, 작업 기록에는 Change, Incident 또는 Problem과 같은 클래스 이름이 있을 수 있습니다.
테이블 계층 구조에서 레코드를 찾기 위해 시스템은 실제 테이블을 쿼리하고 클래스 이름 열을 사용하여 결과를 제한합니다. 이러한 쿼리는 여러 테이블의 결과를 조인할 필요가 없기 때문에 시스템은 더 나은 검색 성능을 제공합니다.
시스템은 MySQL 데이터베이스의 작업 테이블 계층 구조에 대해 계층 구조당 테이블 확장 모델을 사용합니다. 다른 테이블은 평면화해도 성능상의 이점이 없기 때문에 클래스당 테이블 확장 모델을 사용합니다. Oracle 데이터베이스에서 계층 구조당 테이블을 사용하려면 기술 지원 부서에 문의하십시오.
파티션당 테이블
파티션당 테이블 확장 모델은 전체 테이블 계층 구조를 관계형 데이터베이스의 단일 플랫 논리 테이블에 저장합니다. 각 논리 테이블에는 이를 지원하는 파티션 이라고 하는 여러 물리적 스토리지 테이블이 있을 수 있습니다. 각 파티션은 열 수, 인덱스 수 및 행 크기와 같은 물리적 테이블에 사용할 수 있는 데이터베이스 리소스를 최적화합니다. 시스템은 논리 테이블에 추가 관계형 데이터베이스 자원이 필요할 때마다 파티션을 추가합니다.
각 논리 테이블은 계층 구조의 부모 테이블의 이름을 따서 명명되며, 지원하는 각 물리적 파티션은 논리적 이름과 파티션 이름으로 구성됩니다. 예를 들어 기본 구성 항목 [cmdb] 테이블은 파티션이 없는 논리 테이블로 시작합니다. 하드웨어 구성 항목이 충분한 데이터베이스 자원을 소비하여 시스템에서 이를 저장할 cmdb$par1 이라는 파티션을 생성한다고 가정합니다. 나중에 컴퓨터 구성 항목은 시스템에서 이러한 레코드를 저장하기 위해 cmdb$par2 라는 두 번째 파티션을 만들 수 있을 만큼 충분한 데이터베이스 리소스를 사용할 수 있습니다.
각 논리적 테이블 내에서 시스템은 계층 구조의 각 하위 테이블에 클래스 이름 열 값을 할당합니다. 예를 들어 기본 구성 항목 논리 테이블 내에는 애플리케이션, 컴퓨터, IP 라우터의 클래스 이름을 가진 기록이 있습니다. 또한 시스템은 계층 구조의 각 하위 테이블에 2자리 클래스 경로 값을 할당합니다. 클래스 경로는 계층 구조의 테이블 위치를 기반으로 합니다. 예를 들어, 상위 클래스 Hardware에는 /!! /! D 및 하위 클래스 컴퓨터에는 /!! /! D/!!.
파티션당 테이블 확장 모델에서 레코드를 찾기 위해 시스템은 논리 테이블과 해당 파티션을 쿼리하고 클래스 경로 열을 사용하여 결과를 제한합니다. 이러한 쿼리는 여러 테이블의 결과를 조인할 필요가 없기 때문에 시스템은 더 나은 검색 성능을 제공합니다. 또한 클래스 경로는 검색할 총 기록 수를 줄여 검색 성능을 더욱 향상시킵니다.
시스템은 MySQL 데이터베이스의 기본 구성 항목 [cmdb] 테이블 계층 구조에 파티션 당 테이블 확장 모델을 사용합니다. Oracle 데이터베이스에서 파티션당 테이블을 사용하려면 기술 지원 부서에 문의하십시오.