외래 키 추가 또는 제거
외래 키는 하나의 데이터베이스 테이블에서 다른 테이블의 기본 키를 참조하는 필드입니다. 외래 키는 데이터베이스 테이블의 관련 열에 대한 제약 조건으로 정의됩니다.
외래 키 제약 조건이 있으면 이 필드가 비어 있거나 해당 값이 참조된 테이블의 기본 키에 대한 기존 값을 가리켜야 합니다. 예를 들어, 교대 근무의 SiteUID 필드는 사이트의 UID를 참조하는 외래 키입니다. 따라서 교대 근무에서 SiteUID에 대한 값은 비어 있거나 사이트의 기존 UID 값과 일치해야 합니다.
외래 키 제약 조건을 통해 외래 키 필드에서 참조되는 데이터베이스 테이블의 행이 삭제되지 않도록 할 수도 있습니다. 예를 들어, 교대 근무의 SiteUID 값이 5이면 사이트의 UID를 참조하는 SiteUID 필드의 외래 키 제약 조건 때문에 UID 값이 5인 사이트를 삭제할 수 없습니다.
외래 키 추가
기존 데이터베이스 테이블에 외래 키를 추가하려면 다음을 수행합니다.
1. 데이터베이스 테이블과 관련된 엔티티에 대한 관리자가 포함된 PTC 빌딩 블록에서 확장되는 새 빌딩 블록을 작성합니다. 이러한 관리자는 PTC.Base.Manager구성 페이지에 있는 DefaultGlobalManagerConfiguration 테이블에 지정되어 있습니다. 예를 들어, 작업 지시서에 외래 키를 추가하려면 PTC.JobOrderImpl.Manager 사물로 이동합니다.
자세한 내용은 새 빌딩 블록 작성 항목을 참조하십시오.
2. 새 빌딩 블록에 대한 관리자 사물로 이동합니다.
3. 서비스에서 외래 키를 추가할 엔티티에 대한 GetDBInfo 서비스를 재정의합니다. 예를 들어, 작업 지시서를 위해 데이터베이스 테이블에 외래 키를 추가하려면 PTC.JobOrderImpl.Manager 사물에서 GetDBInfo 서비스를 재정의합니다.
4. 스크립트 편집기에서 외래 키를 추가하려는 데이터 셰이프의 엔트리로 스크롤합니다.
5. 다음 속성을 사용하여 데이터 셰이프에 대한 foreignKeys 배열을 추가합니다.
identifier - 데이터베이스의 엔티티 이름입니다. 지정하지 않으면 <table_name>_<column_name>_fk 형식으로 값이 자동으로 생성됩니다. 지정한 경우 값이 지정된 값과 자동으로 생성된 값 모두에 대해 고유해야 합니다. 값의 최대 길이는 데이터베이스에서 식별자에 허용하는 최대 길이입니다.
name - 외래 키가 될 현재 데이터 셰이프의 필드 이름입니다. 외래 키 필드의 기본 유형은 참조된 필드의 기본 유형과 일치해야 합니다. 예를 들어, 참조된 필드에 STRING 기본 유형이 있는 경우 외래 키 필드에도 STRING 기본 유형이 있어야 합니다.
referenceDataShapeName - 참조된 데이터베이스 테이블의 데이터 셰이프입니다.
referenceFieldName - 참조되는 값을 포함하는 필드 이름입니다.
onDelete - 참조된 데이터 셰이프의 인스턴스가 삭제될 때 현재 데이터 셰이프의 인스턴스에 미치는 영향입니다.
deleteReference - 현재 데이터 셰이프의 인스턴스가 삭제될 때 참조된 데이터 셰이프의 인스턴스에 미치는 영향입니다.
삭제 동작에 대한 자세한 내용은 외래 키를 사용하여 삭제 동작 설정 항목을 참조하십시오.
6. 저장을 클릭하여 변경 내용을 서비스에 저장합니다.
7. PTC.DBConnection.Manager 사물로 이동합니다.
8. 데이터베이스 정보를 데이터베이스 스키마와 동기화합니다. 자세한 내용은 데이터베이스 정보 및 데이터베이스 스키마 동기화 항목을 참조하십시오.
외래 키 제거
외래 키를 제거하려면 다음을 수행합니다.
* 
기본으로 정의된 외래 키는 제거하지 마십시오. 이전에 추가한 외래 키만 제거합니다(예: 데이터 모델 엔티티에 사용자 정의 속성 추가 또는 데이터 모델에 사용자 정의 엔티티 추가).
1. 데이터베이스 테이블과 관련된 엔티티에 대한 관리자가 포함된 PTC 빌딩 블록에서 확장되는 새 빌딩 블록을 작성합니다. 이러한 관리자는 PTC.Base.Manager구성 페이지에 있는 DefaultGlobalManagerConfiguration 테이블에 지정되어 있습니다. 예를 들어, 작업 지시서에서 외래 키를 제거하려면 PTC.JobOrderImpl.Manager 사물로 이동합니다.
자세한 내용은 새 빌딩 블록 작성 항목을 참조하십시오.
2. 시스템에 대해 구성된 데이터베이스 사물(예: PTC.DBConnection.MSSQLDatabase)로 이동합니다.
3. 서비스에서 다음 입력을 사용하여 RemoveForeignKey 서비스를 실행합니다.
dataShapeName - 외래 키 제약 조건을 제거할 데이터베이스 테이블에 대한 데이터 셰이프입니다.
fieldName - 외래 키 제약 조건을 제거할 데이터 셰이프의 필드입니다.
dbInfo - 제거할 외래 키에 대한 JSON 설명입니다. 외래 키가 정의된 GetDBInfo 서비스에서 지정된 동일한 identifier(있는 경우), name, referenceDataShapeNamerefereceFieldName 정보를 제공해야 합니다. onDelete 또는 deleteReference 값이 포함된 경우 서비스에서 무시됩니다.
4. 실행을 클릭합니다.
5. 1단계에서 작성한 빌딩 블록의 관리자 사물에서 외래 키가 정의된 GetDBInfo 서비스로 이동하고 서비스에서 외래 키 정의를 제거합니다. 이 외래 키를 제거하지 않을 경우 다음에 동기화 서비스를 실행할때 외래 키가 데이터베이스에 다시 추가됩니다.
예를 들어, MyObject 데이터 셰이프의 WorkDefinitionUID란 이름의 필드에서 identifier가 지정되지 않은 외래 키 제약 조건을 제거하려면 입력 매개 변수에 대해 다음을 지정합니다.
dataShapeName - MyObject
fieldName - WorkDefinitionUID
dbInfo -
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}
도움이 되셨나요?