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