[멘딕스] Association-Ownership, 나만 이해 못했어?!?

Martin the dog·2023년 7월 12일

멘딕스

목록 보기
1/2

개요

멘딕스에서는 객체를 엔터티라 하여 테이블의 역할을 한다.

위 사진은 Mendix Domain model에 정의되어 있는 Entity들의 모습이다.

이때 Entity를 기존 DB에서 Table이라 이해하면 쉽다.
사진에서 두 Entity를 이어주는 화살표를 Association이라 한다.

Association

Association이란?

Association은 엔터티간의 관계를 나타내는 것으로 기존 DB에서 Relation에 해당한다. DB에서 Relation을 맺기 위해서는 Foreign key를 정의해줘야 했지만 멘딕스에서는 정의할 필요 없이 드래그 앤 드랍으로 각 Entity의 Association을 정의해줄 수 있다.

Association의 종류

Association의 종류에는 1:1, 1:N, N:N으로 기존 DB의 Relation과 동일하다 할 수 있다.

여기서는 1:N 관계로 하나의 Task에 여러개의 image가 있다는 뜻이다.

Association으로는 무엇을 할 수 있나요?

Association은 두 Entity간의 관계를 나타내고 있기 때문에 한 엔터티에서 관련있는 다른 엔터티들을 불러올 수 있다.
예를 들어 Task에 할당되어 있는 image들을 불러오는 Microflow를 작성하고자 한다면 다음과 같이 작성할 수 있다.

화면에 보이는 내용을 설명하면 먼저 외부로 부터 Image를 조회하고자 하는 Task를 받아온다. 그후 Data Source를 By association으로 한뒤 Select를 눌러주면 목록에 Task의 Association이 보인다. 이때 우리가 원하는 Attached_Image Association을 선택하면 현재 Task Entity와 관련되어 있는 Image들이 List 형태로 반환된다. Image도 By Association을 통해 조회할 수 있다.

또한 Mendix에서는 Association을 통해 Cascading설정을 별다른 코드작성 없이 설정할 수 있다.

화면에 보이는 On delete of '엔터티명' Object가 그 설정인데 하나하나 설명하자면

대상설명
Keep 'image' ObjectTask 오브젝트가 삭제시 image는 그냥 냅둔다.
Delete 'image' Object(s) as wellimage 오브젝트들도 다 삭제한다.
Delete 'Task' object only if it is not associated with 'image' objects(s)Task 오브젝트에 연관되어 있는 Image 오브젝트가 있다면 Task 오브젝트는 삭제하지 않는다.
추가적으로 삭제시 유저한테 보일 오류 메시지를 수정할 수 있다.

Ownership

Association의 소유자, Ownership이란?

이쯤 되면 하나 궁금한게 생길거다. Association에 있는 화살표는 뭘까?

여기서 화살표는 Association의 Ownership, 즉 소유권을 나타낸다. 시작점이 소유권을 가지고 있는 부모 화살표 끝 부분이 자식이다.
Ownership은 어디에 사용되는 걸까? Ownership은 두가지 역할을 수행한다.

  1. Cardinality(1:N,1:1,N:N) 기준점
  2. 관계를 맺고 있는 Entity 변경 권한

1에대해 자세히 설명하자면 현재 두개 이상의 오브젝트들이 관계를 가지고 있을 때 A오브젝트 하나에 B오브젝트 여러개/한개 처럼 특정 기준이 필요하다. 그 기준을 Ownership을 가진 Entity가 수행하는 것이다.

2는 예시를 들어 설명하겠다. 현재 TaskA,TaskB,TaskC라는 Task Object가 있다고 하자 TaskA오브젝트에는 imageA라는 Image Object가 속해 있다. 이때 imageA는 자신과 관계를 맺고 있는 Task Object를 자유롭게 변경할 수 있다! 하지만 Task Object들은 할당되어 있는 image 오브젝트들을 자유롭게 변경할 수 없다. Task가 다른 image들로 부터 선택은 받을 수 있어도 Task가 직접 image들을 선택하지 못하는 것이다.

화면에 보이는 것은 Microflow에 있는 Change Object를 통해 Task의 멤버변수들에게 값을 할당하는 창이다. 사진에서 보이는 것 처럼 Task는 image를 선택할 수 없다.


하지만 Image는 자유롭게 Task를 선택할 수 있다.

Ownership 설정법


Association을 설정할 때 드래그 앤 드랍으로 연결시 처음 시작한 쪽이 부모가 되고 끝점이 자식이 된다.
Entity 속성중 하나인 Associations에서 Owner을 설정하는 설정값이 있는데 Default는 기존 부모가 Ownership을 가지는 설정이고 Both는 둘다 가지게 하는 설정이다.

주의 사항

Non-persistant Entity와 Persistant Entity의 Association에서는 언제나 Non-persistant Entity가 Ownership을 가져야한다.

정리

Association은 두 엔터티사이의 관계를 나타내며 조회시 서로를 호출하는데 사용된다.
Ownership은 그 관계를 소유하는 개념으로 Ownership을 가진 오브젝트가 소유하지 못한 자식 오브젝트를 바꿀 수 있다.

profile
Happy Developer

0개의 댓글