SQL (DB) 복습 #1

김태준·2023년 11월 16일
0

DB STUDY

목록 보기
17/17

오늘 깊게 알아볼 주제는 Entity다.

💡 Entity

독립체라는 뜻으로 데이터 모델링에서 사용되는 객체로, 간단히 설명하면 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 어떤 것이라고 말할 수 있다.
즉, 추상적인 의미를 가지며 현실 세계에서 눈에 보이는 개념일수도 있고 주문이나, 결제와 같은 행위처럼 눈에 보이지 않는 개념일 수도 있다.

  • Entity : DB의 테이블
  • Instance : DB에 저장된 데이터 내용의 전체 집합 (Row)
  • Attribute : 인스턴스의 구성요소로써 더 이상 분리되지 않는 단위 (Column)

적절한 엔티티의 특징
1. 업무에서 필요로 하는 정보여야 한다.
2. 유일한 식별자가 있어야 한다. (인스턴스가 식별자에 의해 한 개씩만 존재하는지 검증해 보아야 함.)
3. 2개 이상의 인스턴스의 집합이어야 한다.
4. 속성을 반드시 포함하며 업무 프로세스에 이용해야 한다.
5. 타 엔티티과의 연관성이 존재해야 한다. (관계 설정이 이루어져야 함.)

엔티티 분류.

  1. 유/무형에 따른 분류
    1-1. 유형 엔티티 : 업무에서 도출되어 지속적으로 사용되는 엔티티 (고객, 강사, 사원 등)
    1-2. 개념 엔티티 : 물리적 형태가 없으며 개념적으로 사용되는 엔티티 (채널, 거래소 종목 등)
    1-3. 사건 엔티티 : 비즈니스 프로세스를 실행하며 생성되는 엔티티 (주문, 체결, 취소, 가입 등)
  1. 발생 시점에 따른 엔티티 종류
    2-1. 기본 엔티티 : Key 엔티티로 타 엔티티의 영향을 받지 않고 독립적으로 생성 (고객, 상품, 부서 등)
    2-2. 중심 엔티티 : 기본 엔티티로부터 발생해 행위 엔티티를 생성하는 것 (주문, 계좌, 취소, 가입 등)
    2-3. 행위 엔티티 : 2개 이상 엔티티로부터 발생하는 엔티티 (주문 이력, 체결 이력, 가입 이력)

엔티티 이름은 다음과 같은 원칙을 지켜야 한다.

  • 현업 업무에서 사용하는 용어 사용
  • 단수 명사 사용 / 가능하면 약어 사용 X
  • 모든 엔티티를 통틀어 유일한 이름 갖기
  • 엔티티 생성 의미대로 이름 부여

✍️ Attribute

속성의 경우 다음 기준을 가지고 분류할 수 있다.

  • 속성 특성에 따른 분류
    (기본 :일반적인 속성으로 코드성 데이터, 유니크한 식별번호 제외) /
    설계 :업무 규칙화위해 생성 ex. 일련번호) /
    파생 :타 속성 영향 받아 발생하는 속성, ex. 계산된 값들) )
  • 엔티티 구성방식에 따른 분류
    PK :엔티티 구별) /
    FK :타 엔티티와의 관계 /
    일반 :엔티티에 포함되나 PK, FK 아닌 속성)
  • 세부 의미 유/무에 따른 분류
    단순 : 더 이상 분해 X) /
    복합 : 주소와 같이 여러 세부 속성들로 구성

도메인 : attribute 값이 가질 수 있는 범위를 속성의 도메인이라 칭함.

+) 상식
튜플의 개수 (엔티티 내 Row 수 : Cardinality)
속성의 개수 (엔티티 내 Col 수 : Degree)

🧨 ERD 관계선.

실선의 경우, 부모 테이블의 PK를 자식 또한 가지고 있고 부모의 PK를 자식도 PK로 사용함을 의미
점선의 경우, 부모 테이블의 PK를 자식 또한 가지고는 있으나 이를 PK로 사용하지 않을 때를 의미 , 결국 FK이면 점선임.

  • Type1의 경우 1:1 관계를 의미한다.
  • Type2의 경우 1:N으로 하나의 A는 여러 개의 B로 구성
  • Type3의 경우 하나의 A는 하나 이상의 B로 구성됨을 의미
  • Type4의 경우 하나의 A는 하나 이하의 B로 구성됨을 의미
  • Type5의 경우 하나의 A는 0개 이상의 B로 구성됨을 의미.

❗ 누적 매출 금액 문제 풀이

다음과 같이 누적매출 속성을 추가해 쿼리 결과를 출력하시오

// Window Function 없이 풀이
SELECT A.지점, A.판매월, MIN(A.매출) AS 매출, SUM(B.매출) AS 누적매출
FROM 월별지점매출 A, 월별지점매출 B
WHERE A.지점 = B.지점 AND A.판매월 >= B.판매월
GROUP BY A.지점, A.판매월, A.매출
ORDER BY A.지점, A.판매월

// Window Function 사용하기.
SELECT 지점, 판매월, 매출, SUM(매출) OVER(PARTITION BY 지점) AS 누적매출
FROM 월별지점매출
ORDER BY 판매월

✍️ 정규화

DB의 데이터들을 최대한 중복을 제거하여 Anomaly (이상현상)를 방지하려는 기술.
이상현상은 크게 3가지가 있다.

    1. 갱신 이상 : 중복된 데이터 중 일부를 갱신할 때 의도치 않은 데이터가 갱신되어 불일치
    1. 삽입 이상 : 새로운 데이터 삽입 시 의도치 않은 데이터가 삽입되어 불일치
    1. 삭제 이상 : 데이터 삭제 시 의도치 않은 데이터가 삭제되어 불일치

정규화는 장점만 존재하는 것은 아니다. 다음과 같은 단점들도 있다.

  • 릴레이션 분해로 인해 릴레이션 간 JOIN 연산량 많아짐.
  • 쿼리 응답 시간이 느려질 수도 있지만 데이터 용량은 최소화할 수 있는 효과 존재.
  • JOIN 너무 많으면 반정규화 적용 가능

🎈 1차 정규형

  • 한 속성은 하나의 속성값만을 가져야 한다.
  • 한 컬럼은 같은 타입을 가져야 하며 컬럼 순서는 상관이 없어야 한다.
  • 각 컬럼이 ㅇ니크한 이름을 가져야 한다.
    ex) 과목 속성에 한 인스턴스가 과학, 수학 2개의 값을 가진다면 이는 위배되고 2개의 인스턴스로 나뉘어야 한다.

🎈 2차 정규형

  • 1NF를 만족해야 하며 모든 컬럼이 완전 함수 종속을 만족해야 한다. 즉 기본키의 부분집합이 특정 컬럼에 종속되는 경우가 없는 경우를 의미한다.
    EX) 예시로 특정 과목의 지도교수는 과목명만 알면 지도교수를 알 수 있기에 이는 부분적으로 종속되므로 정규화해주어야만 한다.
profile
To be a DataScientist

0개의 댓글