Outsystems

[Integrity] Entity 인덱스(+ 참조 무결성)

기록해연 2025. 2. 21. 16:59

Entity 인덱스와 엔티티 간의 참조 무결성

https://learn.outsystems.com/ko-kr/training/journeys/web-developer-662/data-model-integrity/o11/192

 

 

Index(인덱스): DB테이블에서 데이터를 빠르게 검색하기 위해 DB에서 사용하는 데이터 구조.

=> 아웃시스템에서는 Entity에서 인덱스를 사용할 수 있다.

 

인덱스를 생성하는 이유1

인덱스 사용시 검색속도 향상, but 추가 비용 발생.

- 특성 속성 집합에 대해 인덱스가 정의되어 있으면 해당 속성을 기반으로 데이터를 선택할 때 데이터 검색 속도가 빨라짐.

=> reference attribute가 좋은 예, 이러한 인덱스가 자동으로 생성되는 이유.

- 사용자 인덱스를 따로 만들 수 있음.

- 저장공간을 차지할 뿐 아니라 데이터가 변경될 때마다 기존 데이터와 일치하도록 인덱스도 변경해야 함.

- Insert, Update 등 모든 종류의 데이터 쓰기에서 발생.

 

인덱스를 생성하는 이유2

데이터 중복을 피하기 위해서.

- 데이터에 따라 하나 이상의 속성의 데이터가 고유하도록 적용

=> e.g. 동일한 제품을 여러 번 주문하는 것 방지 가능

 


다른 엔터티에 대한 참조인 속성은 삭제 규칙(Delete Rule) 속성을 가지고 있다.

=> 이 속성은 참조된 엔티티에서 Record를 삭제할 때 적용되므로 매우 중요.

 

- 선택사항 1. Protect: 참조한 엔터티가 있으면 Record 전체에 대해 삭제를 허용하지 않음.

  e.g. 주문이 있는 고객 제거 X

 

- 선택사항 2. Delete: Record를 삭제하고 해당 Record를 참조하는 모든 레코드를 계단식으로 삭제.

=> 성능 저하 가능성 있음.

  e.g. 고객 및 해당 주문이 모두 삭제됨

 

- 선택사항 3. Ignore: 참조 무결성을 보장하지 않음.

  e.g. 고객만 제거되고 주문은 유지됨(참조 무결성 깨짐)


 

인덱스가 어떻게 작동하는지,

아웃시스템에서 고유 인덱스를 어떻게 생성하는지

https://learn.outsystems.com/ko-kr/training/journeys/web-developer-662/demo-how-to-create-a-unique-index-in-an-entity/o11/194

 

Unique Index 를 생성하려면 엔티티를 편집 해야 함.

 

1. 엔터티를 선택하고 [Indexes and more] 버튼 클릭

 

 

2. [New]를 클릭하여 원하는 인덱스 (여기선 UniqueProductPerOrder이라는 인덱스) 생성.

 

 

3. Unique 인덱스가 되므로 Unique 속성을 Yes로 변경

 

4. Attributes에 OrderId, ProductId 를 추가

 

5. UI가 포함된 모듈로 돌아가 테스트

동일한 제품을 추가하려고하면 Error 발생.

(기존에는 동일 제품 추가 되었었음)

 

Exception Handler를 이용해 사용자에게 원하는 에러문구를 보여주도록 처리해야함.

 


외래키에 삭제 규칙을 정의하는 법

https://learn.outsystems.com/ko-kr/training/journeys/web-developer-662/demo-how-to-define-delete-rules-on-foreign-keys/o11/196

 

 

주문이 있는 고객은 Delete시도시 Fail됨.

주문 엔티티를 확장해보면 고객을 참조하는 RequestBy 속성이 있음.

 

 삭제 규칙이 Protect로 설정되어 있음.

=> 주문이 있는 고객은 삭제할 수 없음.

 

Delete로 변경시 고객이 삭제될때 주문도 삭제됨.

Bradly Murray 가 제거됨.