본문 바로가기

안녕하세요!

SAP/CAP

[ CAP ] Database 제약

foreign key 생성과 Association


 

For Managed To-One Associations


 

CDS Association 모델링


 

entity Books {
    key ID : Integer;
    ...
    author : Association to Authors;
}

entity Authors {
    key ID : Integer
    ....
}

 

CDS에서는 위와 같이 외래키를 만들어서 서로 다른 개체를 연결(Association)할 수 있다.

개체  Books에서 기본키로 ID를 정수형 변수로 지정한다.
author이라는 객체는 개체 Authors와 Association으로 연결시킨다.

그리고 개체 Authors에서 개체 Books의 기본키를 외래키로 가져올 수 있도록 
ID의 데이터 타입을 일치시킨다.

Database 생성


 

CREATE TABLE Authors (
    ID INTEGER NOT NULL,			-- primary key referenced by the constraint
    ...,
    PRIMARY KEY(ID)
);

CREATE TABLE Books (
    ID INTEGER NOT NULL,
    author_ID INTEGER,				-- generated foreign key field
    ...,
    PRIMARY KEY(ID)
    CONSTRAINT Books_author
        FOREIGN KEY(author_ID)      -- link generated foreign key field author_ID ...
        REFERENCES Authors(ID)      -- ... with primary key field ID of table Authors
        ON UPDATE RESTRICT
        ON DELETE RESTRICT
        VALIDATED			        -- validate existing entries when constraint is created
        ENFORCED			        -- validate changes by insert/update/delete
        INITIALLY DEFFERRED			-- validate only at commit
)

 

그렇다면 CDS를 SQL문으로 해석하자면 이렇다.

테이블 Authors에서
ID는 INTEGER 속성을 가지며, NULL 값은 컬럼에 사용하지 못 하도록 한다.
이를 PRIMARY KEY, 즉 테이블 Books와 연결해줄 기본키를 ID로 지정한다.

테이블 Books에서는 테이블Authors와 마찬가지로
ID Attribute를 설정하고,
외래키로 사용할 author_ID라는 변수를 하나 생성한다.

이 또한 기본키를 ID로 지정해주고,
Books_author이라는 제약(CONSTRAINT) 사항 설정을 시작한다.

외래키는 앞서 생성한 author_ID를 호출하고,
이는 테이블 Authors의 기본키인 ID의 별칭으로 사용함을 명시한다. 

UPDATE(갱신), DELETE(삭제) 기능은 제한한다.

VALIDATED제약 사항이 생성될 때 존재하는 개체에 대해 유효성 검사를 해준다.
이는 insert(삽입), update(갱신), delete(삭제)로써만 변경되도록 ENFORCED(강제)한다.

INITIALLY DIFFERED로 commit 트랜잭션 단위로 제약 조건은 검사하고
제약 조건 위반 시, 자동으로 트랜잭션을 ROLLBACK 시켜준다.

반응형

For Compositions


 

CDS Association Modeling


 

entity Genres {
    key ID : Integer;
    ...
    parent : Association to Genres;
    children : Composition of many Genres on children.parent = $self;
}

 

명심해야 할 것은 PRIMARY KEY, 즉 외래키는 항상 자식 테이블에서 정의해야 한다.
따라서 개체 내에서 자체적으로 컬럼 간에 연결시키고자 할 때에는
parent와 children를 구분하여 설정하고,
children에 외래키 관련 속성을 지정해주어야 한다.

parent에서는 개체 Genres 자신을 Association 해주고,
child에서 부모 요소에 일대다로 구성되도록 Composition of many Genres로 입력한다.
그리고 children.parent의 의미는
<comp>.<assoc>, 즉 Association <assoc>가 Composition <comp>의 백링크 인 경우를 말한다.

 

Database 생성


 

CREATE TABLE Genres (
    ID INTEGER NOT NULL,                   -- primary key referenced by the constraint
    ...
    parent_ID INTEGER,                     -- generated foreign key field
    PRIMARY KEY(ID),
    CONSTRAINT Genres_parnet
        FOREIGN KEY(parent_ID)             -- link generated foreign key field parent_ID ...
        REFERENCES Genres(ID)              -- ... with primary key field ID
        ON UPDATE RESTRICT
        ON DELETE CASCADE
        VALIDATED
        ENFORCED
        INITIALLY DEFFERRED
)

 

마찬가지로 이를 SQL문으로 해석한다면,

기본키 속성을 설정하고,
외래키로 사용할 parent_ID 또한 생성한다.

Genres_parent라느 제약사항에서
외래키를 parent_ID로 선언해주고, 이는 개체 Genres의 기본키에 참조시킨다.

ON DELETE CASCADE자식 요소가 참조하고 있는 부모 요소가 삭제될 때,
자신도 함께 삭제됨을 의미한다. 

 

728x90
반응형

'SAP > CAP' 카테고리의 다른 글

[ CAP ] CDS를 Fiori UI로 표현하기  (0) 2023.04.10
[ CAP ] Temporal Data 적용시키기  (2) 2023.04.10
[ CAP ] SQL에 CDS Mapping하기  (0) 2023.04.07
[ CAP ] CSV 파일 위치와 배열 사용  (2) 2023.04.07

loading