링크 유형과 양방향 관계
링크 유형(Link type)은 같은 온톨로지(Ontology)에 속한 두 객체 유형(Object type)의 관계를 정의합니다. 링크(Link)는 두 실제 객체(Object) 사이의 관계 한 건입니다.
가상의 Employee와 Company 사이에 Employee와 Employer 관계를 정의하면 Melissa Chang과 Acme, Inc.의 고용 관계가 링크 한 건입니다. Flight와 Aircraft의 Scheduled Flight와 Assigned Aircraft 관계에서는 JFK → SFO 24-02-2021과 Boeing 737-123의 연결이 예입니다.
Employee 안의 Direct Report와 Manager처럼 같은 객체 유형의 객체끼리 연결할 수도 있습니다. 서로 다른 온톨로지 사이의 링크는 지원하지 않습니다. 공동 관계가 필요하면 공유 온톨로지를 검토합니다.
한 정의의 두 방향
링크 유형 하나에는 정확히 두 쪽이 있습니다. 각 쪽은 그쪽 객체 유형으로 향하는 관계를 나타내며 별도 표시 이름과 API 이름을 가집니다. 같은 정의를 양쪽에서 탐색하므로 역방향을 위해 링크 유형을 하나 더 만들지 않습니다.
TypeScript v1의 객체 변수 flight에서 flight.assignedAircraft.get()을 사용하면 Aircraft 쪽으로 이동합니다. 반대쪽의 aircraft에서는 aircraft.flights.all()로 연결된 Flight들을 가져올 수 있습니다. get과 all의 구분은 해당 방향이 단일인지 다중인지에 따릅니다.
같은 두 유형 사이에 다른 링크 유형을 추가하는 것은 가능합니다. 다만 배정 항공기 관계와 정비 기록 관계처럼 별도의 업무 관계를 표현하는 경우입니다. 각 관계를 구분하도록 쪽별 API 이름을 고유하게 정합니다.
데이터와 대응
링크 유형은 두 데이터셋(Dataset)을 어떤 키로 조인할지 정하는 정의와 비슷합니다. Melissa Chang의 직원 행이 Acme, Inc.의 회사 행과 연결된 한 결과가 개별 링크에 대응합니다.
외래 키(Foreign key) 기반 관계는 양쪽 객체의 속성값으로 연결을 구성합니다. 조인 테이블(Join table) 기반 다대다 관계는 링크 자체에 별도 입력을 연결합니다. 관계에 메타데이터가 필요하면 중간 객체로 연결을 표현하는 객체 기반 링크를 사용할 수 있습니다.