SQLD 자격증 공부하면서 정리한 내용들을 작성한 글입니다.
2. 엔터티(Entity)
(1) 엔터티란?
- 데이터 모델을 이해할 때 가장 명확하게 이해해야 하는 개념 중에 하나
- 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(Thing)
- 정보가 저장될 수 있는 사람, 장소, 물건, 사건 그리고 개념 등
- 엔터티는 그 집합에 속하는 개체들의 특성을 설명할 수 있는 속성(Attribute)을 갖는다.
- 속성 가운데에는 엔터티 인스턴스 전체가 공유할 수 있는 공통 속성도 있고, 엔터티 인스턴스 중 일부에만 해당하는 개별 속성도 있을 수 있다.
- 엔터티는 인스턴스의 집합이라고 말할 수 있다.
- 인스턴스라는 것은 엔터티의 하나의 값에 해당한다고 정의할 수 있다.(엔터티 안에 행 데이터)
(2) 엔터티의 특징
- 필요한 정보
- 유일성
- 식별자에 의해 식별이 가능해야 함(이름이 같으면 안됨)
- 영속성
- 영속적으로 존재하는 인스턴스의 집합이 되어야 함
(2개 이상의 인스턴스로 구성된 집합)
- 속성과 관계 존재
- 반드시 속성을 포함해야 함
- 다른 엔터티와 관계과 최소 1개 이상 존재해야 함
(3) 엔터티의 명명 규칙
- 유일성
- 단수 명사
- 의미 일치
- 약어 지양
- 실제 쓰는 용어
3. 속성(Attribute)
(1) 속성이란?
- 개체의 성격을 나타냄
- 개체가 관리하는 데이터의 최소 단위
- 인스턴스로 관리하고자 하는 의미상 더 이상 분리되지 않는 최소한의 단위
- 엔터티를 설명하고, 인스턴스의 구성 요소가 됨
- 속성은 관계를 표현하거나 또 다른 속성을 가질 수 없음!
(2) 속성의 분류
- 기복 속성
- 설계 속성
- 효율적인 모델링을 위해 새로 만들거나 변형된 속성
- 설계를 통해서 도출
- 파생 속성
- 다른 속성에서 영향을 받아 도출
- 예) 합계, 평균 등
- 다른 속성에 의존적이기 때문에 적게 만드는 것이 좋다.
- PK(기본키)
- FK(외래키)
- 일반
- 엔터티에 포함되어 있으며, PK도 FK도 아닌 속성
도메인(domain)
→ 각 속성(Attribute)이 가질 수 있는 범위
→ 데이터타입, 크기, 제약사항(NOT NULL, Check 조건)을 지정
→ 테이블 속성간의 FK 제약 조건 지정 X
(3) 속성의 명명 규칙
- 유일한 이름
- 서술식 금지
- 약어 지양
- 실제 쓰는 용어
4. 관계(Relation)
(1) 관계란?
- 둘 이상의 개체를 의미 있게 연결한 상태
- 엔터티의 인스턴스 사이 논리적 연관성
- 관계성, 차수(카디널리티), 선택성(옵셔널리티)로 구성
페어링
→ 엔터티 안에 인스턴스가 개별적으로 관계를 갖는 것
→ 관계 = 페어링의 집합
(2) 관계 분류
(출처) https://dataonair.or.kr/db-tech-reference/d-guide/sql/?pageid=5&mod=document&uid=328
- ERD(Entity Relationship Diagram)
- 존재에 의한 관계, 행위에 의한 관계
→ 둘이 구분 없이 단일화된 표기법 사용
- 개체와 속성, 관계를 그림으로 설명
- UML(Unified Modeling Language)
- 연관 관계, 의존 관계
→ 실선과 점선 표기법으로 구분
(3) 관계 표기법
(출처) https://dataonair.or.kr/db-tech-reference/d-guide/sql/?pageid=5&mod=document&uid=326
- IE Notation
- 개체는 각진 사각형으로 표현
- 개체명을 바깥쪽에 표기
- 속성은 별(*) 같은 표기 없이 기록
- 위쪽에 구역을 나눠 식별자를 별도로 표기
- 관계는 실선과 점선으로 표현(한 라인에 실선, 점선 하나를 선택해서 표현)
- Barker Notation
- 개체는 소프트 박스로 표현
- 개체명을 가장 상단에 표기 밑으로는 속성 표기
- 속성의 왼쪽에는 별() 또는 영문자(O)를 통해 반드시 데이터가 저장되어야 하는지(), 선택적으로 저장할 수 있는지(O)를 표현
- 관계는 점선과 실선으로 표현(한 라인에 실선, 점선을 동시에 표현 가능)
- 실선 : 반드시 존재(1)
- 점선 : 선택적(0또는 1)
- 식별자는 마크(#)으로 표현