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. 고객만 제거되고 주문은 유지됨(참조 무결성 깨짐)
인덱스가 어떻게 작동하는지,
아웃시스템에서 고유 인덱스를 어떻게 생성하는지
Unique Index 를 생성하려면 엔티티를 편집 해야 함.
1. 엔터티를 선택하고 [Indexes and more] 버튼 클릭
2. [New]를 클릭하여 원하는 인덱스 (여기선 UniqueProductPerOrder이라는 인덱스) 생성.
3. Unique 인덱스가 되므로 Unique 속성을 Yes로 변경
4. Attributes에 OrderId, ProductId 를 추가
5. UI가 포함된 모듈로 돌아가 테스트
동일한 제품을 추가하려고하면 Error 발생.
(기존에는 동일 제품 추가 되었었음)
Exception Handler를 이용해 사용자에게 원하는 에러문구를 보여주도록 처리해야함.
외래키에 삭제 규칙을 정의하는 법
주문이 있는 고객은 Delete시도시 Fail됨.
주문 엔티티를 확장해보면 고객을 참조하는 RequestBy 속성이 있음.
삭제 규칙이 Protect로 설정되어 있음.
=> 주문이 있는 고객은 삭제할 수 없음.
Delete로 변경시 고객이 삭제될때 주문도 삭제됨.
'Outsystems' 카테고리의 다른 글
[Screen Widget] if 위젯 사용하기 (0) | 2025.02.24 |
---|---|
[Screen Widget] Link와 Button 사용하기 (0) | 2025.02.24 |
[Entity] Static Entity(정적 엔터티) 만들기 (0) | 2025.02.20 |
[Entity] 데이터베이스 엔티티 만들기(+ excel로 부트스트랩) (0) | 2025.02.20 |
[Aggregates] Aggregates에 여러 Entity의 데이터 가져오기(+속성, 함수) (0) | 2025.02.19 |