※ 관계형 데이터베이스 개요

        1. 데이터베이스란? - 용도와 목적에 맞는 데이터들끼리 모아서 저장하는 공간으로 여러 개의 테이블로 구성된다.

 

        2. 관계형 데이터베이스(Relational Database, RDB)란? - 관계형 데이터 모델에 기초를 둔 데이터베이스로 설계 시 모든 데이터를                       2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의한다. RDB을 관리 · 감독하기 위해 RDBMS을 사용하며 MySQL,                             MariaDB 등이 이에 속한다.

 

        3. 테이블 - 관계형 데이터베이스의 기본 단위. 데이터 모델에서 엔터티에 해당하며 세로 열(Column)은 인스턴스를 나타내고                               가로 행(Row)은 속성을 나타낸다.

 

        4. SQL(Structured Query Language) - 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어

 

※ SELECT문

        1. SELECT - 저장되어 있는 데이터를 조회할 때 사용하는 명령어

             Ex) SELECT 컬럼1, 컬럼 2, ... FROM 테이블 WHERE 컬럼1 = '아무개';

             

             1-1) 컬럼을 명시하지 않고 *를 사용하면 전체 컬럼이 조회되며 조회되는 컬럼의 순서는 테이블의 컬럼 순서와 동일하다.                                     또한 별도의 WHERE절이 없으면 테이블의 전체 Row가 조회된다.

                      Ex) SELECT * FROM 테이블;

 

             1-2) 테이블명이나 컬럼명에 별칭을 붙여줘서 여러 개의 테이블을 JOIN하거나 서브쿼리가 있을 때 컬럼명의 앞에 같이                                       명시된 테이블명을 짧게 줄여쓴다.

                      Ex) SELECT BAND.BAND_NAME, BAND_MEMBER.MEMBER_NAME  

                         FROM BAND, BAND_MEMBER

                         WHERE BAND.BAND_CODE = BAND_MEMBER.BAND_CODE;

                                                             

                         SELECT B.BAND_NAME, BM.MEMBER_NAME  

                         FROM BAND B, BAND_MEMBER BM

                         WHERE B.BAND_CODE = BM.BAND_CODE;

 

        2. 산술 연산자

               Ex) SELECT COL1+COL2 AS A, COL1-COL2 AS B FROM TEST;

 

산출결과

        3. 합성 연산자 - 문자와 문자를 연결할 때 사용하는 연산자

               Ex) SELECT 'S' || 'Q' || 'L'  AS SQLD FROM TEST;

 

산출결과

 

※ 반정규화

        1. 반정규화란? - 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정으로                                 입력, 수정, 삭제 성능이 저하되거나 정합성 이슈가 발생할 수 있다. 정규화가 끝난 후 일정한 규칙에 따라 반정규화 단계를 진행한다.

 

        2. 반정규화 절차

               2-1) 테이블 반정규화

                        ㉮ 테이블 병합 - 업무 프로세스 중 JOIN이 필요한 경우가 많아 엔터티를 통합하는 것이 성능 향상에 도움 될 경우 고려함

 

                              1:1 관계 테이블 병합 - 비교적 판단하기 수월하며 부작용도 적다

                              1:M 관계 테이블 병합 - 데이터가 중복될 수 있고 많이 중복될 경우 테이블 병합이 적절하지 못함

 

                             ㉢ 슈퍼/서브 타입 테이블 병합 - 테이블을 통합하여 성능 향상

                              * 예를 들어 주문 엔터티는 의류 주문이나 신발 주문으로 분류되므로 주문 엔터티는 슈퍼 타입이 되고 의류 주문이나                                     신발 주문은 서브 타입이 된다.

 

                       ㉯ 테이블 분할

                             ㉠ 테이블 수직 분할(속성 분할) - 엔터티의 속성 중 자주 사용되지 않거나 대부분의 인스턴스가 해당 속성값을                                                  NULL로 갖고 있을 때 해당 속성을 별도의 엔터티로 분할하는 것을 고려한다. (1:1 관계 성립)

 

                             ㉡ 테이블 수평 분할(인스턴스 분할, 파티셔닝) - 엔터티의 특정 인스턴스를 특정 기준으로 서로 간의 관계가 없는                                              별도의 엔터티로 분할한다. (파티셔닝)

 

                   

                       ㉰ 테이블 추가

                             ㉠ 중복 테이블 추가 - 데이터의 중복을 감안하더라도 성능 향상을 위해 필요한 경우 중복된 데이터를 가진                                                      별도의 엔터티를 추가

                             ㉡ 통계 테이블 추가 - 데이터의 통계치를 미리 계산하여 저장한 별도의 엔터티를 추가

                             ㉢ 이력 테이블 추가 - 이력 데이터를 가진 별도의 엔터티를 추가

                             ㉣ 부분 테이블 추가 - 특정 범위의 많은 데이터를 자주 사용하는 경우 이를 저장한 별도의 엔터티를 추가

 

              2-2. 컬럼 반정규화

                      ㉮ 중복 컬럼 추가

                      ㉯ 파생 컬럼 추가

                      ㉰ 이력 테이블 컬럼 추가

 

              2-3. 관계 반정규화(중복관계 추가)

 

※ 트랜잭션(Transaction)

        1. 트랜잭션이란? - 데이터를 조작하기 위한 하나의 논리적인 작업 단위

             Ex) 이벤트 응모 시 쿠폰을 발행해주는 이벤트가 있을 경우 '이벤트 응모 이력 저장'과 '쿠폰 발행'을 논리적으로 하나의                                      단위로 묶는다. 쿠폰이 소진되어 쿠폰 발행이 실패할  경우 이벤트 응모 이력 또한 롤백된다.

 

※ NULL

        1. NULL이란? - 아직 정의되지 않은 값을 의미하며 0을 의미하진 않는다. 테이블 연산 시 가로 연산에 NULL이 포함되어 있으면                           결괏값이 NULL이 되고 세로 연산에 NULL이 포함되어 있으면 연산식에서 NULL을 제외시키고 연산한다.

 

※ 정규화

               1. 정규화란? - 데이터 정합성을 위해 일정한 규칙대로 엔터티를 작은 단위로 분리하는 과정. 데이터 조회성능은 처리조건에 따라                          상향되거나 하향될 수 있지만 입력, 수정, 삭제 성능은 일반적으로 향상됨

              * 정합성 - 데이터의 정확성과 일관성을 유지하고 보장 

              * 지나친 정규화는 데이터 조회 시 JOIN의 수가 늘어나 오히려 성능을 저하시키므로 적당히 정규화를 실시

 

        2. 정규화 절차

             ① 제1정규화(1NF) - 모든 속성은 속성값을 하나만 갖고 유사한 속성이 반복되지 않게 엔터티를 분리

 

              * 속성값을 하나만 가지도록 엔터티 분리

 

                        * 유사한 속성이 반복되지 않게 엔터티 분리

             

            ② 제2정규화(2NF) - 제1정규형을 만족하고 주식별자가 2개 이상 엔터티가 주식별자에 대한 부분종속을 갖고 있을 경우 엔터티 분리

 

             * 상품명이 주식별자 중 상품코드 속성에만 종속하므로 부분종속을 갖는다. 이를 해결하기 위해 아래와 같이 엔터티를 분리한다.

 

            ③ 제3정규화(3NF) - 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.

 

             * 일반속성인 학과가 다른 일반속성인 학과코드에 종속되므로 아래와 같이 엔터티를 분리한다.

 

             ④ 보이스-코드 정규화(BCNF) - 제3정규형을 만족하고 주식별자가 보조식별자에 종속된 경우 엔터티 분리

 

              * 주식별자인 수강과목이 보조식별자인 지도교수에 종속되므로 아래와 같이 엔터티를 분리한다.

※ 식별자 

        1. 식별자란? - 각각의 인스턴스를 구분 가능하게 만들어주는 대표격인 속성을 의미

 

        2. 주식별자

             ① 주식별자란? - 기본키(Primary Key, PK)에 해당하는 속성. 하나의 속성이 주식별자가 될 수도 있고 여러 개의 속성이 주식별자가                         될 수도 있음

             ② 주식별자 특징

                  ㉮ 유일성 - 유일하게 각 인스턴스에 유니크함을 부여하여 식별이 가능토록 함

                  ㉯ 최소성 - 주식별자를 구성하는 속성 수는 1개여야 함             

                        Ex) 학번 + 랜덤번호 X

                  ㉰ 불변성 - 속성값이 되도록 변하지 않아야 함

                  ㉱ 존재성 - 속성값이 NULL값알 수 없음

 

        3. 식별자 분류

             ① 대표성 여부

                  ㉮ 주식별자(기본키) - 엔터티를 대표하는 식별자로 다른 엔터티와 참조 관계로 연결됨

                  ㉯ 보조식별자(후보키) - 인스턴스를 식별하나 대표 식별자가 아니므로 다른 엔터티와 참조관계로 연결되지 않음

             ② 엔터티 내 생성 여부

                  ㉮ 내부식별자 - 엔터티 내부에서 스스로 생성된 식별자

                  ㉯ 외부식별자 - 다른 엔터티와의 관계를 통해 생성되는 식별자

             ③ 단일 속성의 여부

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

                  ㉯ 복합식별자 - 두 개 이상의 속성으로 구성된 식별자

             ④ 대체 여부

                  ㉮ 원조식별자/본질식별자 - 업무 프로세스에 존재하는 식별자

                  ㉯ 대리식별자/인조식별자 - 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자

                        Ex) 주문번호 = 순번 + 주문일자

 

        4. 식별자관계 vs. 비식별자관계

            ① 식별자관계 - 부모 엔터티의 주식별자가 자식 엔터티의 주식별자가 되는 관계. 부모 엔터티가 존재해야 자식 엔터티를 생성하며                        단일 식별자인지 복합 식별자인지에 따라 1:1관계나 1:M관계로 결정됨 

            ② 비식별자관계 - 부모 엔터티의 주식별자가 자식 엔터티의 일반 속성이 되는 관계. 일반 속성의 속성값은 NULL값을 가질 수                              있으므로 부모 엔터티가 없는 자식 엔터티 생성이 가능하고 자식 엔터티가 존재하는 상태에서 부모 엔터티가 삭제 가능. 

 

+ Recent posts