brunch

You can make anything
by writing

C.S.Lewis

by 일단고고 Aug 17. 2024

D-7. SQLD 1과목  이론 정리(2)

큰일이 있어 공부를 못하고 시험7일이 남았지만...

7일을 알차게 채워보겠습니다



속성의 개념(인스턴스)

- 컬럼으로 표현할 수 있는 단위

- 더 이상 분리되지 않는 최소의 데이터 단위

- 예) 학생이라는 엔터티 = 이름, 학번, 학과번호가 속성이 됨


속성의 특징

- 업무에 필요하고 관리하는 데이터여야함

- 정해진 주식별자에 함수적 종속성을 가지기

> 예) 학번이 달라지면 - 이름이 달라지는 것

- 하나의 속성에 하나의 값이 어야 한다 (=원자성)


함수적 종속성

- 한 속성의 값이 다른 값에 영향을 주는(1:1로 영향을 주는 관계)

1) 완전 함수적 종속

- PK의 전체가 종속 관계가 되는 것

- 예)

1번 사람/ 과일 주문 / 5개

2번 사람/ 음료 주문/ 3개

3번 사람/ 과일 주문/ 4개

 -->  과일주문 또는 1번/ 3번 이라는 PK값이 주문 수량과 연관되지 않음

주문사람과 주문상품이 무조건 수량과 연관성이 있음


2) 부분 함수적 종속

- PK의 일부만으로도 종속 관계를 확인 할 수 있는 것

- 예)

1번 학생/ 영어/ A쌤

2번 학생/ 영어/ A썜

3번 학생/ 수학/ B쌤

--> 영어 또는 수학이라는 과목으로도 선생님이 누구인지 확인 가능



[속성의 분류]

1. 속성의 특징에 따른 분류

- 기본 속성 : 기본적인 것(상품명)

- 설계 속성 : 설계를 위해 규칙화하는 새로운 것을 만드는 것(상품코드1)

- 파생 속성 : 일반적으로 계산된 값들(상품1의 평균 판매수)


2. 엔터티 구성방식에 따른 분류

- PK(Primary key, 기본키) : 인스턴스를 식별하는 속성

    > 예) 사원코드

- FK(Foreign Key, 외래키) : 다른 엔터티와의 관계에서 포함된 속성(참조 속성)

    > 예) 부서코드

- 일반 속성 : 엔터티에 포함되고 있고 위의 두개 포함 안되는 속성을 지칭


3. 분해 여부에 따른 속성

- 단일 속성 : 하나의 의미로 구성된 경우

    > 예) 이름

- 복합 속성 : 여러개의 의미로 구성된 경우

    > 예) 주소 (시, 구, 동 등으로 나누기 가능)

- 다중값 속성 : 여러개의 값을 가질 수 있는 경우

    > 예) 한사람이 전화번호 여러개 가질수 있음


[속성의 명명 규칙]

- 업무에서 사용하는 이름을 사용해야함

- 서술식 사용하지 않기

- 약어 사용하지 않기

- 전체 데이터 모델에서 유일하게 사용해야함


[도메인(Domain)]

- 각 속성이 가질 수 있는 값이 범위를 의미

- 데이터 타입과 크기, 제약사항 등


[관계의 개념]

- 인스턴스끼리 가지고 있는 연결고리를 잘 이해하고 정의하기

- 엔터티의 정의에 따라서 관계가 바뀌기도 함


[관계의 종류]

1. 존재적 관계

- 하나의 엔터티가 다른 엔터티에 존재 영향을 주는 경우

> 사원 - 부서

   부서의 엔터티 사라지면, 사원의 존재 자체에 영향을 줌


2. 행위적 관계

- 엔터티간의 행위적 영향이 있는것

> 고객 엔터티

   고객이 주문함 / 주문 데이터가 쌓임(주문 데이터는 바뀜)


단, ERD에서는 존재/ 행위 관계를 별도로 구분하지 않음


[관계의 구성]

1. 관계명

    > 학생 - 수업

2. 차수

    > 학생과 수업이 1:1의 관계인지/ 1: 다수의 관계인지를 정의하는

3. 선택성

    > 이것이 선택적인 것인지 그렇지 않은 것인지의 차이


[관계의 차수]

- 관계가 어떤식으로 정의되는 것인지를 의미함


1. 1대1관계

1.1) 완전 1대1의 관계

- 하나의 엔터티에 관계되는 엔터티가 반드시 하나로 존재하는 경우


1.2) 선택적 1대1의 관계

- 하나의 엔터티에 관계되는 엔터티가 하나이거나 없을 수도 있는 경우


2. 1:다의 관계

> 예)  사원이 부서 코드를 바라볼수도 있지만

  부서 코드가 사원을(다수로) 바라볼 수도 있음


3. 다:다의 관계

- 두개의 테이블을 조인할 때 [카테시안 곱이 발생]하기 때문에 조인의 성능이 좋지 않음

> 따라서 다대다의 관계는 해소해주는게 중요함

*카테시안 곱 : 조인했을 경우, 모든 데이터가 다 추출되는 것


[관계 페어링]

- 엔터티안에 행(인스턴스)의 관계에 초점을 맞춘 것


*관계 & 차수 & 페어링의 차이

- [관계] 학생과 강의 엔터티는 : 관계를 가짐

- [차수] 학생 : 여러 강의 수강할 수 있음/ 강의도 여러 학생의 관계 : 다대다

    > 즉, 하나의 엔터티와 다른 엔터티 간의 레코드 연결 방식

- [페어링] 학생A가 강의B를 23년 1학기에 수강했고 성적은 A를 받았다

    > 즉, 두 엔터티 간의 특정 연결 설명과 추가 정보를 제공하는 용도


[식별자 개념]

- 엔터티를 대표할 수 있는 속성

- 인스턴스를 구분하는 구분자

- *식별자 : 논리 모델링에서 사용 = 키 : 물리 모델링


[주식별자의 특징]

- 유일성 : 유일해야함

- 최소성 : 최소의 속성으로 구성

- 불변성 : 고유값으로 항상 존재해야함

- 존재성 : 반드시 존재해야함(NULL 허용하지 않는다)


[식별자 분류]

1) 대표성 여부에 따른 식별자의 종류

- 주식별자

    : 유일성과 최소성 만족하며 엔터티를 대표

    : 인스턴스를 유일하게 구분

    : 타 엔터티와 참조관계를 연결할 수 있는 식별자

- 보조식별자 : 

    : 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자이지만, 대표성 가지지 못함

    : 유일성과 최소성 만족하지만, 대표성을 가지지 못하는

    : 예) 주민등록번호 - 식별자이지만, 보안 등의 이수로 조회시 사용 불가


2) 생성 여부에 따른 식별자의 종류

- 내부식별자

    : 다른 엔터티 참조 없이 엔터티 내부에서 스스로 생성되는 식별자

- 외부 식별자

    : 다른 엔터티와 관계로 인하여 만들어지는 식별자(외래키)

    : 예) 우편번호 - 주소에 대한 정보 기반으로 우편번호 연결되기 때문


3) 속성 수에 따른 식별자 종류

- 단일 식별자 : 하나의 속성으로 구성

- 복합 식별자 : 2개 이상의 속성으로 구성


4) 대체 여부에 따른 식별자 종류

- 본질 식별자 : 비즈니스 프로세스에서 만들어지는 식별자

    > 부서코드 : 부서식별에 필요하여 만들어짐

- 인조식별자 : 인위적으로 만들어지는 식별자/ 자동으로 증가하는 일련번호

    > 주문번호 : 주문일자 + 주문순서+상품코드 대산 만든 인조식별자


[표기 방법]

IE : 주 식별자는 가장 상단에

Barker : 주식별자는 #으로 표기


[주식별자 도출 기준]

1. 자주 이용되는 속성을 주식별자로 지정하기

2. 명칭/ 내역 자체는 피하기 (예, 부서명보다는 부서코드를)

3. 속성의 수는 최소로 하기


[관계간 엔터티 구분]

1. 강한 개체 : 독립적으로 존재 가능한 것

2. 약한 개체 : 독립적으로 존재 불가능한 것

    > 고객 - 계좌 : 고객이 있어야 계좌가 존재하기 때문에 고객이 강한 개체


[식별 관계와 비식별관계]

1. 식별 관계

- 하나의 엔터티의 기본키를 / 다른 엔터티가 기본키의 하나로 공유

- ERD에서 실선 표기


2. 비식별 관계

- 강한 개체의 기본키를 다른 엔터티의 기본키가 아닌 일반 속성으로 관계를 가지는 것

- ERD : 점선으로 표기


[정규화]

- 엔터티를 분해하는 과정/ 테이블을 분해하는

- *분해하는 이유 : 엔터티의 정의를 내리기 위함(학생정보를 어디까지 볼것인지 정하는 것)

    > 일관성, 최소성, 유연성을 가지기 위함

    > 중복 제거, 데이터 모델의 독립성 확보

    > 데이터 이상현상을 줄이기 위한 데이터 베이스 설계 기법

- 엔터티를 상세화 하는 과정(논리 데이터 모델링 수행 시점에서 고려됨)

- 제1~5정규화까지 존재(하지만, 보통 3정규화까지만 함)


[이상현상 : Abnormality)]

- 정규화를 하지 않아서 발생하는 모든 현상을 지칭

    > 너무 많은 정보를 엔터티에 담아버리지 말기


[정규화 단계]

*1, 2, 3정규화는 예제까지 확실히 알기/ 4, 5는 개념만 이해하기

1. 제 1정규화 (1NF)

- 테이블에 컬럼이 원자성을 가지도록 분해하는 것

- 하나의 행과 컬럼의 값이 하나만!


2. 제 2정규화(2NF)

- 제 1정규화 진행한 테이블 & 완전 함수 종속을 가지도록함

**완전 함수 종속 : PK가 2개라면, 2개가 온전한 영향을 주는 것들만 하나의 테이블에

> 학생번호/ 강의명/ 강의실/ 성적 : 하나의 테이블

> BUT, 강의실 : 강의명에 따라 달라짐(==부분 함수 종속)

> 참고) 성적 : 학생번호 & 강의명에 따라 달라짐 (== 완전 함수 종속)


3. 제 3정규화(3NF)

- 제 2정규화에서 이행적 종속 없애기

- **이행적 종속 : A-> B, B->C, A->C

    > (A, B), (B,C)로 분리 필요함

>예) 계좌번호/ 예수금/ 관리점코드/ 관리점

> 계좌 : 계좌번호/ 예수금/ 관리점 코드(A, B)

> 관리점 : 관리점 코드/ 관리점(B,C)

   

 4. 제 4정규화 

- 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 중속성을 제거


5. 제 5정규화

- 조인에 의해서 종석성이 발생되는 경우 분해



[반정규화 = 역정규화의 개념(De-Normalization] *24년은 빠지김함

- 정규화해서 조깨다보니까 생기는 문제도 있음 (조인을 해서 데이터 추출하는 경우 성능 떨어짐)

- 데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능향상 방법

- 시스템의 성능 향상, 개발 및 운영의 단순화를 위해 정규화된 데이터 모델을 중복, 통합, 분리하는 기법

- 조회(SELECT) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아짐

*비정규화는 정규화를 수행하지 않음을 의미


반정규화 수행 케이스

- 정규화에 충실하여 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우

- 다량의 범위를 자주 처리해아하는 경우

- 특정 범위의 데이터만 자주 처리하는 경우

- 요약/집계 정보가 자주 요구되는 경우



[관계의 개념]

- 부모 식별자와 자식 식별자에 상속하는 것

- 상속된 속성을 매핑키(조인키)로 활용


관계의 분류

1. 존재적 관계 : 존재의 영향을 주는 것

2. 행위적 관계 : 행위적인 것에 생성되는 것(=고객 주문)


조인의 의미

- 정규화를 통해서 분리를 했지만, 업무적으로 다시 합쳐서 봐야하는(출력) 경우 



계층형 데이터 모델

- 인스턴스 안에 속성값에서 동일한 값이 있는 것(셀프 조인이 필요함)

> 예) 사원 1 : 상위 관리자 사원 10

        사원 10 : 상위 관리자 사원 20

>> 사원 10 : 겹쳐짐


상호배타적 관계

- 두 테이블 중 하나만 가능한 관계

>> 개인 고객 - 고객번호를

    법인 고객 - 법인번호를

    >> 단, 두개 동시 입력 불가능


트랜젝션

- 하나의 연속적인 업무를 의미함

- 필수적인 관계 형태를 가짐

> 예) 계좌이체를 할 경우. 계좌 잔액 확인 - 계좌 이체 실행 - 본 계좌에서 잔액 마이너스 처리 (*연속적)


트랙젝션의 주의 사항

- 서로 독립적으로 발생하면 안됨

>> 부문 커밋하면 안되고, 동시에 커밋 / 롤백해야함


ERD 표기법 (필수적, 선택적 관계)

1) IE표기법 : 원을 사용

- 필수적 관계 - 원없음

- 선택적 관계 - 관계선 끝에 원을 그림


2) 바커표기법 : 실/점선 사용

- 필수적 관계 - 실선

- 선택적 관계 - 점선


NULL

- 아직 정해지지 않은 값

- 0 아님!!!

- 컬럼별로 허용할지 말지도 정해야함


NULL의 특징

1. NULL을 포함한 연산 결과는 항상 NULL!

>> 따라서, 연산을 할때 NULL의 값은 치환해서 사용하기

  > NUL:L = 0으로 치환하기

 

2. 집계함수는 NULL을 제외한 연산 결과 리턴

- sum, avg, min, max 등의 함수는 null을 무시하고 연산함

- 숫자를 셀때도 빼고함

- *count* : null도 세줌


ERD에서 null표기법

- IE : null 허용 여부를 알 수 없음

- 바커 : 속성 앞에 동기라미 표현을 함 (동그라미 있으면 null 허용속성)



참고자료1) 홍샘의 데이터랩 / 유튜브채널/ 강의 https://www.youtube.com/watch?v=QB_GYdHUHmA



 

매거진의 이전글 D-25. SQLD 1과목  이론 정리(1)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari