outsystems에서는 자체적으로 데이터베이스가 존재한다.
다음은 여러 엔티티가 있는 데이터 모델의 예이다.
Customer이라는 Entity를 보면 이름(Name), 이메일(Email), 주소(Address)와 같은 간단한 속성들을 가지고 있다.
그리고 설명,기한 및 배송날짜가 있는 Order Entity도 존재한다.
그리고 Customer과 Order사이에 선이 존재하는데 이 선은 한명의 고객이 여러개의 주문을 할 수 있음을 의미한다. (관계형데이터베이스의 기호와 비슷)
식별자(Primary Key)
Outsystems에서 데이터 간의 관계 생성은 대부분 엔티티 식별자 속성을 기반으로 한다.
즉 관계를 허용하려면 엔티티에 식별자가 있어야 한다.
Entity Identifier는 Entity가 생성될 때 자동으로 생성되며 빨간색 줄무늬가 있는 아이콘과 이름 ID로 식별할 수 있다.
기본적으로 ID는 긴 정수로 생성되고 자동 번호로 설정되므로 데이터베이스에 추가되는 모든 새 레코드는 고유한 번호를 가지게 된다
이러한 엔터티 식별자는 기본 데이터베이스의 테이블의 기본키(Primary Key)를 나타낸다.(하나의 속성만 식별자가 될 수 있다)
참조(Foreign Key)
그리고 엔터티는 해당 식별자로 참조할 수 있다. 엔터티를 참조하려면 엔터티 식별자 유형의 속성을 생성해야 한다.
위의 주문 엔터티에는 Priority 엔터티를 참조하고 있다. 따라서 Order에는 Priority라는 속성이 존재한다.
또한 엔터티는 여러 참조를 가질 수 있다.
이러한 참조 속성은 데이터베이스 테이블의 외래키(Foreign Key)를 나타낸다. 모든 참조 속성은 기본적으로 해당 데이터 유형에 해당하는 NullIdentifier()값을 갖는다.
즉, 정수 식별자의 경우 값이 0 텍스트 식별자의 경우 값이 빈 텍스트이다.
관계
Outsystes는 일대다, 일대일 및 다대다의 3가지 유형의 데이터 관계를 지원한다.
일대다 관계(1-to-Many)
- 일대다 관계는 엔터티 중 하나의 참조 속성을 추가하여 생성
- 아래의 사진에서는 고객은 여러 주문을 할 수 있고 각 주문은 단일 고객에 속하므로 주문 엔터티에는 주문을 요청한 고객을 참조하는 Requested By 특성이 있다.
예제를 통해 살펴보겠습니다.
아래와 같은 상황에서 고객과 주문간에 일대다 관계를 생성하려면 주문 엔터티에 새 속성을 추가해야 합니다.
이 새 속성은 주문을 요청한 고객을 나타냅니다. 새 속성을 추가해보겠습니다.
Order탭의 오른쪽마우스를 눌러 Add Entity Attribute를 클릭하여 새속성을 추가해줍니다. 그리고 이름을 RequestedBy로 설정합니다. 그러면 자동으로 Outsystems에서는 새 속성의 데이터 유형을 사용자 식별자로 설정합니다.
데이터 유형을 Customer Identifier로 변경하여 Customer Entity와의 관계를 생성해 보겠습니다.
왼쪽의 다이어그램을 보면 표현된 두 엔터티 간의 관계를 볼 수 있습니다.
추가적으로 Order Entity에는 Customer에 대한 Requested By참조외에 다른 4개의 참조 속성이 더 있습니다.
일대일 관계(1-to-1)
- 일대일 관계는 식별자 중 하나의 데이터 유형을 기타 엔터티 식별자로 설정하여 생성한다.
- 아래의 예에서는 주문에는 하나의 영수증만 있을 수 있으므로 OrderReceipt엔터티에는 주문 식별자 유형의 주문 ID로 ID속성이 있다. 따라서 Order Receipt Entity가 생성되면 해당 ID를 Order Identifier 유형으로 설정하기만 하면 된다. 이렇게 되면 주문 ID도 영수증을 식별한다.
예제를 통해 살펴보겠습니다.
영수증은 하나의 주문에만 속할 수 있고 각 주문에는 최대 1개의 영수증이 있습니다. 따라서 이것은 일대일 관계의 완벽한 경우입니다. 이 관계를 만들어보겠습니다.
일대일 관계 예시를 위해 새 엔터티인 OrderReceipt를 만듭니다.
데이터베이스를 오른쪽 마우스로 클릭해 새 엔터티를 만들어주고 이름을 OrderReceipt로 설정해 줍니다.
이제 ID의 속성을 변경해줍니다.
ID의 데이터 타입을 주문식별자로 변경할 수 있습니다.
변경에 따라 ID는 자동으로 자동 번호 기능을 잃게 됩니다.
이제 OrderReceipt에 새 레코드를 추가할 때 해당 ID에 해당 주문 ID의 동일한 값을 명시적으로 할당해야 합니다.
이것은 엔터티 간의 일대일 관계를 정의합니다.
이제 엔터티를 완성하기 위해 나머지 속성을 추가해 줍니다. 속성을 2개만들어주고 각각의 이름을 Filename, FileContent로 변경해줍니다.
그리고 해당 엔터티를 다이어그램으로 드래그 해줍니다.
아래처럼 관계의 시각적 표현은 엔터티 간에 즉시 나타납니다.
요약하자면 일대일 관계를 정의하려면 확장 엔터티가 기본 엔터티와 식별자를 공유해야 합니다.
두 엔터티를 병합할 수 도 있지만 병합 한 경우 모든 주문을 나열하고 싶을 때마다 데이터베이스에서 영수증 파일을 쉽게 가져올 수 있지만 파일이 클 수 있기 때문에 잠재적으로 무거운 작업이 될 수 있습니다. 따라서 이들을 분리하면 이러한 문제를 쉽게 피할 수 있으며 영수증을 쉽게 가져올 수 있습니다.
다대다 관계(Many-to-Many)
- 다대다 관계는 자체 식별자와 두 개의 참조 식별자가 있는 세 번째 엔터티를 관계 내의 엔터티에 추가하여 생성된다.
- 아래의 예에서는 주문에는 여러 제품이 있을 수 있고 제품은 여러주문의 일부일 수 있으므로 자체 ID와 주문에 대한 참조 특성과 제품 엔터티에 대한 또 다른 참조 특성을 사용하여 새 엔터티 주문 제품이 생성된다
예제를 통해 살펴보겠습니다.
단일 주문에 여러제품이 포함될 수 있고 동일한 제품이 여러주문에 포함될 수 있습니다. 이러한 관계는 다대다 관계가 됩니다.
다대다 관계를 나타내려면 접합 엔터티라고하는 추가 엔터티가 필요합니다. 이 추가 엔터티에는 다대다 관계의 일부인 엔터티당 하나씩 고유한 ID와 두 개의 참조 속성이 있습니다.
한번 만들어 보겠습니다.
아래와 같은 주문과 제품사이에 다대다 관계를 형성하려면 새 엔터티를 생성해야 합니다.
이 새 엔터티는 주문과 제품 엔터티 간의 관계를 정의합니다. 새 Entity를 만들고 이름을 OrderProduct로 변경해줍니다.
다대다 관계를 생성하려면 관계의 각 엔터티별로 참조 속성을 추가해야 합니다.
새로만든 엔터티의 속성을 추가해보겠습니다. 이름은 OrderID로 변경해줍니다. 데이터유형은 자동으로 주문 식별자로 설정됩니다. 마찬가지로 제품에대한 참조속성을 위와 같은 과정으로 만들어 줍니다.
이제 주문과 제품 사이에 관계가 생성되었습니다. Entity를 완성하기 위해 Quantity에 대한 속성을 추가하기만 하면 됩니다.
관계를 시각적으로 보기 위해 다이어그램으로 끌어보겠습니다.
요약 : 다대다 관계는 고유한 ID와 하나의 새 엔터티에 의해 정의된다.
'로우코드(Lowcode) > outsystems' 카테고리의 다른 글
outsystems-Blocks (0) | 2023.05.12 |
---|---|
outsystems - 인덱스, 참조무결성(Integrity) (0) | 2023.05.10 |
outsystems - How to Use the List and ListItem (0) | 2023.05.05 |
outsystems - How To Fetch Data in an Aggregate and filter Data and SORT Data and Test Values (0) | 2023.05.04 |
outsystems - Aggregates란? (1) | 2023.05.04 |