가장 단순한 경우 JDBC 객체 클래스는 단일(기본) 테이블만 포함합니다. 이 테이블에는 보조 테이블이 없으므로 테이블 간에 관계를 정의할 필요가 없습니다.
객체 클래스에 둘 이상의 테이블이 포함된 경우에는 해당 테이블 간의 관계를 분명하게 정의해야 합니다. 테이블 간의 관계는 항상 보조 테이블에서 정의됩니다. 보조 테이블의 다음 등록 정보를 사용하여 이러한 관계를 정의할 수 있습니다.
is-single-row-table은 테이블에서 LDAP 항목과 일치하는 행이 한 개만 있도록 지정합니다.
contains-shared-entries는 보조 테이블의 행이 기본 테이블의 둘 이상의 행에 사용되도록 지정합니다.
filter-join-rule은 기본 테이블의 항목을 기준으로 보조 테이블에서 항목을 검색하는 방법을 나타냅니다.
다음 예는 처음 두 개의 등록 정보 값을 기준으로 필터 결합 규칙을 정의하는 방법을 보여줍니다. 다음 예에서는 객체 클래스에 기본 테이블과 보조 테이블이 한 개씩 있다고 가정합니다.
이 값은 해당 등록 정보의 기본값입니다. 이 경우 기본 테이블과 보조 테이블 간의 관계는 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}" |
이 구성을 사용하면 LDAP 작업에 대해 다음 동작이 발생합니다.
직원 항목 추가.직원 항목의 관리자가 테이블에 없는 경우 새 행이 만들어집니다. 관리자가 있는 경우 기존 행이 사용됩니다.
항목에서 "manager" 속성 값 바꾸기.MANAGER.NAME 행의 값이 변경됩니다.
직원 항목 삭제.관리자 항목이 공유되므로 보조 테이블의 행이 삭제되지 않습니다.
항목에서 "manager" 속성 삭제.보조 테이블의 행이 삭제되고 외래 키(EMPLOYEE.FK_MANAGER_ID)가 NULL로 설정됩니다.
이 경우 기본 테이블과 보조 테이블 간의 관계는 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를 가리키는 정반대 구성이 될 수 있습니다.
이 경우 기본 테이블과 보조 테이블 간의 괸계는 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}" |
이 경우는 현재 디렉토리 프록시 서버에서 지원되지 않습니다.