외래 키를 사용하여 삭제 동작 설정
외래 키 관계의 한 쪽에 있는 엔티티가 삭제될 때 이 관계의 다른 쪽에 있는 엔티티의 동작을 지정해야 합니다. 이를 통해 참조 무결성이 유지되고 비즈니스 로직을 기반으로 한 모든 결정이 수행됩니다.
삭제 동작은
외래 키가 지정된 동일한 배열에서 데이터 셰이프에 대한 데이터베이스 정보에 지정됩니다. 삭제 동작은 각 개별 외래 키에 대해 지정됩니다. 다음 설명에서 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(
ParentUID 및
ChildUID)를 참조하는 외래 키 필드로 작업 정의 링크에 정의됩니다. 다음 코드는
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로 설정되어 있기 때문에 참조된 작업 정의 중 하나가 삭제되면 작업 정의 링크도 함께 삭제됩니다. 이를 통해 참조 무결성이 보장됩니다. 즉, 존재하는 관계의 각 측면에 작업 정의가 없으면 작업 정의 링크가 존재할 수 없습니다.
deleteReference가 ChildUID 필드에서 외래 키에 대해 true로 설정되어 있기 때문에 작업 정의 링크가 삭제되면 ChildUID 필드에서 참조하는 작업 정의도 삭제됩니다. 이 동작은 상위 작업 정의와 하위 작업 정의 간의 링크가 삭제되는 경우 하위 작업 정의도 삭제되어야 한다는 비즈니스 결정에 의해 결정됩니다.
|
데이터베이스 스키마에 새 데이터 셰이프 또는 외래 키를 추가하기 위해
데이터베이스와 동기화하기 전에 삭제 동작을 지정할 필요는 없습니다. 외래 키 관계의 어느 한 쪽에 있는 데이터 셰이프의 인스턴스가 삭제되기 전에 삭제 동작을 지정하는 것이 가장 좋습니다.
|
각 외래 키에 대한
onDelete 및
deleteReference 설정을 충족하는 가운데 삭제를 수행하는 데 사용되는 서비스는 데이터베이스 관리 사물 형태(
PTC.SCA.SCO.DBManagementThingShape)에서 찾을 수 있습니다. 이러한 서비스는
BatchCascadeDelete,
CascadeDelete 및
CollectActionForCascadeDelete입니다. 모든 관리자는 이 사물 형태에서 확장되기 때문에 이러한 서비스를 상속합니다. 자세한 내용은
데이터베이스 관리 사물 형태 서비스 항목을 참조하십시오.
Operator Advisor 데이터 모델의 일부 엔티티(
작업 정의 관련 문서 및
작업 정의 일러스트레이션)는 ThingWorx 파일 저장소에 보관된 파일도 참조합니다. 작업 지시서 관리자 사물(
PTC.SCA.SCO.JobOrderManagerThingTemplate)의
BatchCascadeDelete 서비스는 참조하는 엔티티가 삭제될 때 이러한 참조된 파일도 파일 저장소에서 삭제되도록 무시되었습니다.
개별 데이터 모델 객체에 대한 표준 삭제 작업(예: DeleteShift 또는 DeleteJobOrder)은 지정된 엔티티만 삭제합니다. 해당 엔티티만 삭제할 때 참조 무결성이 위반되는 경우 서비스가 실패합니다. 이러한 경우 계단식 삭제 서비스를 사용합니다.