정보 콘텐츠 및 액세스 권한 사용자 정의 > 데이터베이스 활동 > 외래 키를 사용하여 삭제 동작 설정
외래 키를 사용하여 삭제 동작 설정
외래 키 관계의 한 쪽에 있는 엔티티가 삭제될 때 이 관계의 다른 쪽에 있는 엔티티의 동작을 지정해야 합니다. 이를 통해 참조 무결성이 유지되고 비즈니스 로직을 기반으로 한 모든 결정이 수행됩니다.
삭제 동작은 외래 키가 지정된 동일한 배열에서 데이터 셰이프에 대한 데이터베이스 정보에 지정됩니다. 삭제 동작은 각 개별 외래 키에 대해 지정됩니다. 다음 설명에서 A는 외래 키가 있는 엔티티이고 B는 외래 키가 참조하는 필드가 있는 엔티티입니다.
onDelete - B가 삭제될 때 A의 동작을 결정합니다.
CASCADE - B가 삭제되면 A도 삭제됩니다. 이를 계단식 삭제라고 합니다.
SET_NULL - B가 삭제되면 A의 외래 키 필드 값이 null로 설정됩니다.
onDelete이 지정되지 않은 경우 B가 삭제될 때 A에 아무런 변화가 발생하지 않습니다.
deleteReference - A가 삭제될 때 B의 동작을 결정합니다.
true인 경우, A가 삭제되면 B도 삭제됩니다.
false인 경우, A가 삭제될 때 B에 아무런 변화가 발생하지 않습니다.
예를 들어, 작업 정의 링크는 상위 작업 정의와 하위 작업 정의 간의 관계입니다. 이는 두 작업 정의의 UID(ParentUIDChildUID)를 참조하는 외래 키 필드로 작업 정의 링크에 정의됩니다. 다음 코드는 PTC.SCA.SCO.DefaultProductionOrderManager GetWorkDefinitionDBInfo 서비스에 있는 작업 정의 링크 데이터 셰이프(PTC.SCA.SCO.WorkDefinitionLink)에 대해 지정된 데이터베이스 정보에서 가져온 것입니다.
"foreignKeys": [{
"name": "ChildUID",
"referenceDataShapeName": "PTC.SCA.SCO.WorkDefinition",
"referenceFieldName": "UID",
"onDelete": "CASCADE",
"deleteReference": true
}, {
"name": "ParentUID",
"referenceDataShapeName": "PTC.SCA.SCO.WorkDefinition",
"referenceFieldName": "UID",
"onDelete": "CASCADE"
}]
onDelete이 두 외래 키 모두에 대해 CASCADE로 설정되어 있기 때문에 참조된 작업 정의 중 하나가 삭제되면 작업 정의 링크도 함께 삭제됩니다. 이를 통해 참조 무결성이 보장됩니다. 즉, 존재하는 관계의 각 측면에 작업 정의가 없으면 작업 정의 링크가 존재할 수 없습니다.
deleteReferenceChildUID 필드에서 외래 키에 대해 true로 설정되어 있기 때문에 작업 정의 링크가 삭제되면 ChildUID 필드에서 참조하는 작업 정의도 삭제됩니다. 이 동작은 상위 작업 정의와 하위 작업 정의 간의 링크가 삭제되는 경우 하위 작업 정의도 삭제되어야 한다는 비즈니스 결정에 의해 결정됩니다.
* 
데이터베이스 스키마에 새 데이터 셰이프 또는 외래 키를 추가하기 위해 데이터베이스와 동기화하기 전에 삭제 동작을 지정할 필요는 없습니다. 외래 키 관계의 어느 한 쪽에 있는 데이터 셰이프의 인스턴스가 삭제되기 전에 삭제 동작을 지정하는 것이 가장 좋습니다.
각 외래 키에 대한 onDeletedeleteReference 설정을 충족하는 가운데 삭제를 수행하는 데 사용되는 서비스는 데이터베이스 관리 사물 형태(PTC.SCA.SCO.DBManagementThingShape)에서 찾을 수 있습니다. 이러한 서비스는 BatchCascadeDelete, CascadeDeleteCollectActionForCascadeDelete입니다. 모든 관리자는 이 사물 형태에서 확장되기 때문에 이러한 서비스를 상속합니다. 자세한 내용은 데이터베이스 관리 사물 형태 서비스 항목을 참조하십시오.
Operator Advisor 데이터 모델의 일부 엔티티( 작업 정의 관련 문서작업 정의 일러스트레이션)는 ThingWorx 파일 저장소에 보관된 파일도 참조합니다. 작업 지시서 관리자 사물(PTC.SCA.SCO.JobOrderManagerThingTemplate)의 BatchCascadeDelete 서비스는 참조하는 엔티티가 삭제될 때 이러한 참조된 파일도 파일 저장소에서 삭제되도록 무시되었습니다.
개별 데이터 모델 객체에 대한 표준 삭제 작업(예: DeleteShift 또는 DeleteJobOrder)은 지정된 엔티티만 삭제합니다. 해당 엔티티만 삭제할 때 참조 무결성이 위반되는 경우 서비스가 실패합니다. 이러한 경우 계단식 삭제 서비스를 사용합니다.