ERD (Entity Relationship Diagram)
- 테이블 간 서로의 상관관계를 그림으로 도식화 한것을 E-R 다이어그램이라 하며, 간략히 ERD라 함
- ERD의 구성요소는 객체(Entity), 관계(Relationship), 속성(Attribute) 3가지 (현실 세계의 데이터는 이 3가지 구성요소로 모두 표현 가능)
- ex) 팀과 선수 간의 ERD
논리 모델과 물리 모델
데이터 관계
- 관계란 두 개의 엔터티 사이의 논리적인 연결, 즉 엔터티와 엔터티가 존재의 형태나 행위로서 서로에게 영향을 주는 형태를 말함
- 비즈니스에서 중요한 어떤 것(동사)을 표현
- 일반적으로 두 엔터티 사이에 존재하나, 한 엔터티 스스로 관계를 가질 수도 있음(자기참조: Recursive / Reflexive reltaionship)
- 하나의 관계는 두 가지 관점을 가짐 (Relationship membership, Parallel relationship)
- 양쪽 측면에서 역할 명을 지정할 수 있음
데이터 관계의 종류
1) 존재에 의한 관계
-> 사원은 부서에 속해 있다. (구조상 그냥 그렇게 존재)
2) 행위에 의한 관계
-> 주문이라는 activity를 할 때 새로운 관계 발생
데이터 관계의 요소
1) 멤버쉽 (Membership)
: 엔터티 간의 관계에 대한 구체적인 서술 (서로 연관성이 있다 -> 멤버쉽이 있다)
멤버쉽은 엔터티가 참여하는 관계에 대한 자신으로부터의 관점임.
하나의 부서엔 여러 명의 사원을 포함하는 멤버쉽이 있음 (부서 입장)
한 명의 사원은 하나의 부서에 소속된다는 멤버쉽이 있음 (사원 입장)
2) 카디널리티 (Cardinality)
- 1:1은 그냥 한 개씩 참여하는거 (읽을 때 기준은 항상 한 개)
-> 한 개의 구매신청서에 대해 한 개의 구매주문을 작성하고,
한 개의 구매주문에는 한 개의 구매신청내용이 작성됨.
- 1:M은 가장 많이 발생하는 관계 형태. 하나에 대해 여러 개가 참여
한 부서는 여러 사원을 포함하고 한 명의 사원은 한 부서에 소속됨.
- M:M은 여러 개와 여러 개
하나의 주문은 여러 개의 제품을 주문할 수 있고
하나의 제품은 여러 개의 주문에 의해 주문될 수 있음 (읽을 때 기준은 하나니까 시작은 하나로)
3) 관계의 참여도 (Optionality)
부서 입장에서, 한 부서에 사원이 없을 수도 있으니까 선택 참여 (포함할 수도 있고 안할수도 있고~)
하지만, 사원 입장에선 한 명의 사원은 반드시 한 부서에 항상 속하니까 필수 참여
예제 테이블과 칼럼 정보
- 한 테이블 안에서 컬럼 이름은 달라야 하지만, 다른 테이블의 컬럼 이름과는 같을 수 있음
- 같은 이름을 가진 컬럼들은 기본키와 외래키의 관계를 가지는 경우가 많으며, 향후 테이블 간의 조인 조건으로 주로 사용되는 중요한 연결고리 컬럼들임
테이블 관계도 (ERD)
- 엔터티 명 = 테이블 명
- 각 엔터티 위 쪽 -> PK(Primary Key)
- 밑에 칼럼들 -> 속성
- FK(Foreign Key) -> 다른 테이블의 PK에서 가져오는 경우가 많음 (고객-계좌에서, 계좌를 개설하려면 고객이 꼭 필요함 -> 고객 번호가 계좌 테이블의 FK로 존재)
- 상위조직코드(FK) -> 자기참조관계 (상-하 부서들이 연속적으로 있으니까. 하나의 상위조직은 하나의 하위조직이고..)
- 사원-조직 관계를 보면 하나의 조직에는 사원이 여러명 있고, 조직에 따라선 사원이 없을 수도 있다. (동그라미 표시) 사원 입장에선 반드시 하나의 조직에만 속하는데, 어떤 사원은 아직 조직에 할당 받지 못한 사원이 있을 수 있다. (동그라미 표시)
- 사원-계좌 : 한 사원은 여러 개의 계좌 가질 수 있고, 계좌가 없는 사원도 있을 수 있음. 한 계좌는 한 사원에만 할당되어 있어야 함
- 계좌-거래내역 : 하나의 계좌에는 여러번의 거래내역이 있을수도 없을수도 있고, 거래내역은 반드시 계좌번호를 가지고 있어야함.(FK)
'SQL' 카테고리의 다른 글
정규화 (0) | 2024.02.05 |
---|---|
[프로그래머스 SQL] 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2024.01.29 |
[SQL] 서브쿼리는 언제 쓰는 걸까 (0) | 2024.01.14 |
[데이터 분석을 위한 SQL 레시피] 20강 - 여러 개의 데이터셋 비교하기 (1) | 2023.12.28 |
[데이터 분석을 위한 SQL 레시피] 19강 - 데이터 중복 검출하기 (0) | 2023.12.28 |