1. 관계의 의미
우리가 많이 사용하는 RDBMS 의 'R' 은 Relational 이라는 관계형을 의미한다.
데이터를 테이블형태로 구조화 하여 사용하는 것이 특징이고, 테이블과 테이블에는 관계라는 것을 설정할수있다
관계라는 것은 내가 어디에서 왔는가를 의미한다. 조인과는 다른 개념이다.
나와 1촌인 부모-자식 에만 관심이 있고, 할아버지-손자 의 관계는 관심이 없다.
부모없는 자식, 아버지와 할아버지가 같은 모델은 잘못된 모델이다.
2. 관계의 구현
데이터모델링에서 관계라는 것은 논리적인 표현이고, 결국 관계란 자식의 컬럼으로 표현되며,
물리적으로 이를 구현한 형태가 외래키 (FK) 이다.
요즘은 참조 제약조건을 DBMS 단의 FK 로 구현하지 않는 추세인데, 이유는 아래정도가 있다.
- 개발 편의성
이관작업시 데이터 선후 관계를 고려해야함.
ogg는 데이터간의 관계를 따지지 않기때문에 일시적 오류 가능성
- lock 의 전이, 데드락 발생 가능성
정말 필수적인 테이블에만 일부 FK를 생성해서 운영하곤 한다.
dbms 단에서 제약조건을 처리하지 않는것이지, 아예 참조제약조건을 무시하는 것이 아니다.
application 레벨에서 참조 제약조건을 수행하는 로직을 추가해야 한다.
논리모델에서는 관계를 표현해야 하지만 물리모델에서 FK 를 생성하는 가는 전략적 문제이다.
다만 FK 를 생성하지 않으니 논리모델에서 관계를 생략하는 것은 덜 완성된 모델이다.
* 관계가 생략될수 있는 경우
- 기준엔터티
환율엔터티의 경우,
- 가공엔터티
- 외부엔터티
외부의 시스템의 참조하는 경우
3. 속성과 관계 누락
속성은 있지만 관계가 안그려진것 -> 속성을 보고 관계가 누락된것을 발견할수 있으니 불행 중 다행
속성표현X, 관계는 그려진 경우 -> 존재하지 않음
관계없는데 관계가 그려진 경우
4. 식별/비식별 관계
관계는 부모의 식별자를 물려받는 것.
이때 부모의 식별자가 자식의 식별자에 포함이 되면 식별관계가 되고, 부모-자식 간 강한 종속성이 나타남. (부모없는 자식x)
반면, 부모의 식별자가 자식의 일반속성으로 가게되면 부모-자식간의 약한 종속성이 나타나고 부모와 독립적으로 존재할수 있다.
* 유의 사항
- 부모의 일부만 물려받지 않는다.
- 부모의 속성을 물려받지 않는다.
6. 관계의 단절 필요성
조상이 많은 경우 계속해서 식별관계로 그릴경우 식별자가 비대해진다.
이런 모델에서 조인을 걸 경우 SQL 이 복잡해지는 단점이 있다.
이때 인조식별자를 만들어 비식별 관계로 만드는 것을 고려한다.
자식이 많을 경우에도 고려할수 있다.
'생계 > DA' 카테고리의 다른 글
데이터 모델링 식별자 선정 (0) | 2024.10.09 |
---|---|
모델링에 대한 생각 (0) | 2023.12.27 |
이력 모델 (0) | 2023.12.09 |
엔터티 통합과 분리 (0) | 2023.12.09 |
엔터티 유형 분류 (0) | 2023.11.29 |