공통 빌딩 블록 > 데이터베이스 연결 빌딩 블록 > 데이터베이스 활동 > 외래 키를 사용하여 삭제 동작 설정
외래 키를 사용하여 삭제 동작 설정
외래 키 관계의 한 쪽에 있는 엔티티가 삭제될 때 이 관계의 다른 쪽에 있는 엔티티의 동작을 지정해야 합니다. 이를 통해 참조 무결성이 유지되고 비즈니스 로직을 기반으로 한 모든 결정이 수행됩니다.
삭제 동작은 외래 키가 지정된 동일한 배열에서 데이터 셰이프에 대한 데이터베이스 정보에 지정됩니다. 삭제 동작은 각 개별 외래 키에 대해 지정됩니다. 자세한 내용은 외래 키 추가 또는 제거를 참조하십시오.
다음 설명에서 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에 아무런 변화가 발생하지 않습니다.
예를 들어, 반복되는 일정 일(PTC.Shift.CalendarDayRepeating)은 일정과 교대 근무 일정 간의 관계입니다. 이는 일정(CalendarUID) 및 교대 근무 일정(ShiftScheduleUID)의 UID를 참조하는 외래 키 필드를 사용하여 반복되는 일정 일에 정의됩니다. 다음 코드는 PTC.ShiftImpl.Manager 사물의 GetDBInfo 서비스에서 반복되는 일정 일 데이터 셰이프(PTC.Shift.CalendarDayRepeating)에 대해 지정된 데이터베이스 정보에서 가져옵니다.
foreignKeys: [{
name: "calendarUid",
referenceDataShapeName: "PTC.Shift.Calendar",
referenceFieldName: "uid",
onDelete: "CASCADE"
}, {
name: "shiftScheduleUid",
referenceDataShapeName: "PTC.Shift.ShiftSchedule",
referenceFieldName: "uid",
deleteReference: true
}, {
name: "siteUid",
referenceDataShapeName: "PTC.MfgModel.Site",
referenceFieldName: "uid"
}]
onDelete이 두 외래 키 모두에 대해 CASCADE로 설정되어 있기 때문에 참조된 작업 정의 중 하나가 삭제되면 작업 정의 링크도 함께 삭제됩니다. 이를 통해 참조 무결성이 보장됩니다. 즉, 존재하는 관계의 각 측면에 작업 정의가 없으면 작업 정의 링크가 존재할 수 없습니다.
deleteReferenceChildUID 필드에서 외래 키에 대해 true로 설정되어 있기 때문에 작업 정의 링크가 삭제되면 ChildUID 필드에서 참조하는 작업 정의도 삭제됩니다. 이 동작은 상위 작업 정의와 하위 작업 정의 간의 링크가 삭제되는 경우 하위 작업 정의도 삭제되어야 한다는 비즈니스 결정에 의해 결정됩니다.
* 
데이터베이스 스키마에 새 데이터 셰이프 또는 외래 키를 추가하기 위해 데이터베이스와 동기화하기 전에 삭제 동작을 지정할 필요는 없습니다. 외래 키 관계의 어느 한 쪽에 있는 데이터 셰이프의 인스턴스가 삭제되기 전에 삭제 동작을 지정하는 것이 가장 좋습니다.
각 외래 키에 대한 onDeletedeleteReference 설정을 충족하는 가운데 삭제를 수행하는 데 사용되는 서비스는 데이터베이스 관리 사물 형태(PTC.DBConnection.DBManagementThingShape)에서 찾을 수 있습니다. 이러한 서비스는 BatchCascadeDelete, CascadeDeleteCollectActionForCascadeDelete입니다. 모든 관리자는 이 사물 형태에서 확장되기 때문에 이러한 서비스를 상속합니다. 자세한 내용은 데이터베이스 관리 사물 형태 서비스를 참조하십시오.
개별 데이터 모델 객체에 대한 표준 삭제 작업(예: DeleteShift 또는 DeleteJobOrder)은 지정된 엔티티만 삭제합니다. 해당 엔티티만 삭제할 때 참조 무결성이 위반되는 경우 서비스가 실패합니다. 이러한 경우 계단식 삭제 서비스를 사용합니다. 이에 대한 예외는 CascadeDeleteModel 서비스를 호출하는 PTC.MfgModelImpl.Manager 사물의 DeleteSite 서비스입니다.
도움이 되셨나요?