Sun Java System Directory Server Enterprise Edition 6.3 관리 설명서

JDBC 테이블 간의 관계 정의

가장 단순한 경우 JDBC 객체 클래스는 단일(기본) 테이블만 포함합니다. 이 테이블에는 보조 테이블이 없으므로 테이블 간에 관계를 정의할 필요가 없습니다.

객체 클래스에 둘 이상의 테이블이 포함된 경우에는 해당 테이블 간의 관계를 분명하게 정의해야 합니다. 테이블 간의 관계는 항상 보조 테이블에서 정의됩니다. 보조 테이블의 다음 등록 정보를 사용하여 이러한 관계를 정의할 수 있습니다.

다음 예는 처음 두 개의 등록 정보 값을 기준으로 필터 결합 규칙을 정의하는 방법을 보여줍니다. 다음 예에서는 객체 클래스에 기본 테이블과 보조 테이블이 한 개씩 있다고 가정합니다.


예 23–1 is-single-row-table:truecontains-shared-entries:true

이 값은 해당 등록 정보의 기본값입니다. 이 경우 기본 테이블과 보조 테이블 간의 관계는 n->1입니다. 즉, 기본 테이블의 n개 행이 보조 테이블의 공유된 행 하나를 참조합니다.

관계형 데이터베이스에서 외래 키(FK)가 기본 테이블에 정의되고 보조 테이블의 열을 가리킵니다.

예를 들어 조직에서 여러 직원이 동일한 관리자를 공유할 수 있다고 가정합니다. 이 경우 다음 구조를 가진 두 개의 관계형 데이터베이스 테이블이 정의됩니다.


primary table : EMPLOYEE [ID, NAME, FK_MANAGER_ID]
secondary table : MANAGER  [ID, NAME]

다음 객체 클래스와 속성이 정의됩니다.


object-class : employee
attr : name (from primary EMPLOYEE.NAME)
attr : manager (from secondary MANAGER.NAME)

다음 필터 결합 규칙이 보조 테이블에 정의됩니다.


ID=\${EMPLOYEE.FK_MANAGER_ID}"

보조 테이블이 여러 개인 경우 각 보조 테이블에서 filter-join-rule을 구성해야 합니다. 여러 보조 테이블에 대해 filter-join-rule을 구성하는 방법에 대한 자세한 내용은 단계 11를 참조하십시오.

이 구성을 사용하면 LDAP 작업에 대해 다음 동작이 발생합니다.



예 23–2 is-single-row-table:truecontains-shared-entries:false

이 경우 기본 테이블과 보조 테이블 간의 관계는 1->1 또는 1<-1입니다. 즉, 기본 테이블의 한 행을 보조 테이블의 한 행에서 참조합니다.

관계형 데이터베이스에서 외래 키(FK)는 기본 테이블 또는 보조 테이블에 정의할 수 있습니다.

예를 들어 조직에서 직원의 UID가 하나의 테이블에 저장되고 직원의 성이 다른 테이블에 저장된다고 가정합니다. 이 경우 다음 구조를 가진 두 개의 관계형 데이터베이스 테이블이 정의됩니다.


primary table : UID [ID, VALUE, FK_SN_ID]
secondary table : SN [ID, VALUE]

다음 객체 클래스와 속성이 정의됩니다.


object-class : employee
attr : uid (from primary UID.VALUE)
attr : sn (from secondary ID.VALUE)

다음 필터 결합 규칙이 보조 테이블에 정의됩니다.


ID=\${UID.FK_SN_ID}

이 구성은 외래 키 FK_UID_ID가 보조 테이블에 저장되고 UID.ID를 가리키는 정반대 구성이 될 수 있습니다.



예 23–3 is-single-row-table:falsecontains-shared-entries:false

이 경우 기본 테이블과 보조 테이블 간의 괸계는 1->n입니다. 즉, 기본 테이블의 한 행을 보조 테이블의 n개 행에서 참조합니다. 이 예는 값이 여러 개인 속성의 경우를 보여줍니다. 값이 여러 개인 속성은 보조 테이블에서 행 집합으로 표시되며 속성 값당 한 행을 가집니다.

관계형 데이터베이스에서 외래 키는 보조 테이블에 정의되고 기본 테이블의 열을 가리킵니다.

예를 들어 조직에서 직원이 여러 전화 번호를 가질 수 있다고 가정합니다. 이 경우 다음 구조를 가진 두 개의 관계형 데이터베이스 테이블이 정의됩니다.


primary table : EMPLOYEE [ID, NAME]
secondary table : PHONE [ID, VALUE, USER_ID]

다음 객체 클래스와 속성이 정의됩니다.


object-class : employee
attr : cn (from primary EMPLOYEE.NAME)
attr : telephoneNumber (from secondary PHONE.VALUE)

다음 필터 결합 규칙이 보조 테이블에 정의됩니다.


USER_ID=\${EMPLOYEE.ID}


예 23–4 is-single-row-table:falsecontains-shared-entries:true

이 경우는 현재 디렉토리 프록시 서버에서 지원되지 않습니다.