데이터베이스(DB, Database)

일정한 규칙 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음

DBMS

데이터베이스를 제어, 관리하는 통합 시스템
데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있음
데이터베이스는 실시간 접근과 동시 공유 가능

데이터베이스 위에 DBMS(ex > MySQL )가 있고 그 위에 응용프로그램(ex> Node.js, php)이 있음
이런한 구조를 기반으로 데이터를 주고 받음

엔티티(Entity)

여러 개의 속성을 지닌 명사
서비스의 요구사항에 맞춰 속서잉 정해짐
ex) 엔티티 : '회원' => 속성 : 이름, 주소, 전화번호

약한 엔티티와 강한 엔티티

예를 들어 A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔티티이고 B는 강한 엔티티가 된다.
ex) 강한 엔티티 : 건물 | 약한 엔티티 : 방

릴레이션(Relation)

데이터베이스에서 정보를 구분하여 저장하는 기본 단위
관계형 데이터베이스에서는 '테이블'이라고 하며, NoSQL 데이터베이스에서는 '컬렉션'이라고 함

💡 엔티티와 테이블의 차이

01. 엔티티는 데이터베이스나 SQL상에 존재하지 않는다.
테이블과 달리 엔티티는 실제로 존재하지 않는 아닌 일종의 개념이다.
그러나 테이블은 데이터베이스나 SQL에 실제로 존재하며 물리적인 구조를 지니고 있다.

02. 엔티티는 테이블이 될수도 있고 안 될수도 있다.
엔티티는 개념적 데이터 모델링(CDM, Conceptual Data Model)상에서 쓰이는 일종의 '속성(attribute)'의 집합이다.

엔티티가 물리 모델링 안에선 '테이블'이지만, 논리 모델링에선 가능하지만 실제 물리모델링에 쓰지 못하는 추상적인 엔티티 같은 경우 테이블이 될 수 없다.

  • 개념적 데이터 모델링CDM(Conceptual Data Model)
    처음 현실세계에서 추상화 수준의 높은 수준을 형상화하기 위해 개념적 데이터 모델링
    조직, 사용자의 데이터 요구 사항을 찾고 분석하는 데서 시작하며, 특정 자료의 중요도와 유지 여부를 결정
    엔티티(Entity)와 그들 간의 관계를 발견하고, 그것을 표현하기 위해 엔티티-관계 다이어그램(E-R Diagram)을 생성하는 것
    DBMS에 독립적인 개념 스키마와 트랜잭션 인터페이스를 설계

03.

테이블과 컬렉션

데이터베이스 종류는 크게 관계형 데이터 베이스와 NoSQL 데이터베이스로 나뉜다.
관계형 데이터베이스 ex> MySQL | NoSQL 데이터베이스 ex> MongoDB

  • MySQL 구조 : 레코드 - 테이블 - 데이터베이스
  • MongoDB 구조 : 도큐먼트 - 컬렉션 - 데이터베이스
    레코드가 쌓여서 테이블이 되고 테이블 쌓여서 데이터베이스 된다.

속성

릴레이션에서 관리하는 구체적이며 고유한 이름 갖는 정보

도메인

릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
ex > '성별' : 속성 => { 남, 여 } : 도메인

필드와 레코드

데이터베이스에서 필드와 레코드로 구성된 테이블 만들 수 있음
테이블에 쌓이는 행(row) 단위의 데이터를 '레코드(= 튜플)'라고 함
필드는 타입을 가짐(ex > 이름 : 문자열 | 전화번호 : 숫자)

💡 속성와 필드의 차이점

객체지향에서 객체는 고유한 속성(= 특징)을 가지는 데, 그 속성을 칭하는 단어를 property 라고 합니다. 그리고 이 속성의 실체가 담기는 곳이 필드(= 멤버 변수)입니다.

관계

데이터베이스에서 테이블은 하나만 있는 것이 아니다.
여러 개의 테이블이 있고 이러한 테이블은 서로의 관계가 정의되어 있음

  • 1 : 1 관계

    ex > 유저 : 이메일
  • 1 : N 관계

    한 개체가 다른 많은 개체를 포함하는 관계
    ex > 유저 : 상품( like 장바구니 )
  • N : M 관계

    테이블 두 개를 직접적으로 연결해서 구축하지는 않고 1 : N, 1: M 이라는 관계를 갖는 테이블 두 개로 나눠서 설정
    ex > 학생 : 강의
    학생도 강의를 많이 들을 수 있고 강의도 여러 명의 학생을 포함할 수 있음

테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치

기본키, 대체키 < 후보키(최소성) < 슈퍼키(유일성) | 외래키 가 있다.
슈퍼키는 유일성이 있고, 그 안에 포함된 후보키는 최소성까지 갖춘 키입니다.
후보키 중에서 기본키로 선택되지 못한 키는 대체키가 됩니다.
유일성은 중복되는 값이 없으며, 최소성은 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것을 말합니다.

💡유일성

하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질

여러 개의 튜플이 존재할 때 각각의 튜플을 서로 구분할 수 있어야 합니다.
한마디로 각각의 튜플을 유일해야 한다는 의미입니다.
예를 들어 (주민번호, 나이, 사는곳, 혈액형)이라는 속성이 있을 때 나이, 사는곳, 혈액형을 충분히 중복될 수 있는 속성입니다.
하지만 주민번호는 모두 다르기 때문에 각각의 튜플을 중복되는 속성 값이 존재할 수는 있지만 주민번호는 절대 중복할 수 없습니다.
이렇게 각각의 튜플을 구분할 수 있는 성질을 유일성이라고 합니다.

💡최소성

키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질

쉽게 설명하면 굳이 없어도 될 속성들을 넣지 말자는 말입니다.
예를 들어 키(주민번호, 이름, 나이)가 있다면, 이 키는 각 튜플을 구분할 수 있습니다. 주민번호, 이름, 나이가 모두 같은 사람을 없을 테니깐요.
근데 생각해보면 이름, 나이를 빼고도 주민번호만으로 각 튜플을 유일하게 식별할 수 있습니다.
이때 이름, 나이를 빼면 해당 키는 최소성을 만족합니다.

  • 기본키(Primary Key, PK)

    유일성과 최소성을 만족하는 키
    테이블의 데이터 중 고유하게 존재하는 속성(중복 안됨)
    자연키 또는 인조키 중에 골라 설정

자연키

중복도니 값들을 제외하며 중복되지 않는 것을 자연스레 뽑다가 나오는 키를 자연키라고 함
자연키는 언젠가는 변하는 속성을 가짐

인조키

인위적으로 생성한 키를 인조키라고 함
자연키와 대조적으로 변하지 않음
보통 기본키는 인조키로 설정

  • 외래키(Foreign Key, FK)

    다른 테이블의 기본키를 그대로 참조하는 값
    개체와 관계를 식별하는 데 사용
    외래키는 중복되어도 괜찮음

  • 후보키(Candidate Key)

    기본키가 될 수 있는 후보들
    유일성과 최소성을 동시에 만족하는 키

  • 대체키(Alternate Key)

    후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들

  • 슈퍼키(Super Key)

    각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키

ERD(Entity Relationship Diagram)

데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계를 정의 한 것

ERD의 중요성

ERD는 시스템의 요구사항을 기반으로 작성되며 ERD 기반으로 데이터베이스를 구축
데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당
BUT ! ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있음

💡 비정형 데이터

비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말함

정규화 과정

  • 스키마 변환을 통해서 일련의 제약 조건을 만족하는 릴레이션을 만드는 과정
  • 속성들 간의 종속성을 분석해서 하나의 릴레이션에는 하나의 종속성만 갖도록 릴레이션을 분해하는 과정(중복성을 최소화하고 정보의 일관성을 보장하기 위한 개념)
  • 갱신 이상의 발생 요인인 데이터 중복을 최소화하기 위해서 일종의 제약조건을 기초로 릴레이션을 분해하는 과정
  • 불필요한 데이터 중복을 제거해서 논리적 데이터 모델을 단순화시키는 과정
  • 정규화에 대해서는 다양한 정의가 가능하지만 기본적으로 불필요한 데이터 중복을 제거하여 갱신 이상 현상을 없애는 것을 의미합니다.

💡 데이터베이스 이상 현상

회원이 한 개의 등급을 가져야 하는 데 세 개의 등급을 갖거나 삭제할 때 필요한 데이터가 같이 삭제되고, 데이터를 삽입해야 하는 데 하나의 필드 값이 NULL이 되면 안되어서 삽입하기 어려운 현상

💡 정규화 과정

정규형 원칙을 기반으로 정규형을 만들어가는 과정
정규화된 정도는 정규형(NF, Normal Form)으로 표현
기본 정규형인 제 1정규형, 제 2 정규형, 제 3정규현, 보이스/코드 정규형이 있고 고급 정규형인 제 4정규형, 제 5정규형이 있음

정규형의 원칙

  • 데이터의 중복을 최소화함
  • 정보가 사라지지 않아야 함 (정보의 무손실)
  • 같은 의미의 정보를 유지하면서 더 바람직한 구조로 변환해야 함
  • 독립적인 관계는 별개의 릴레이션으로 표현함
  • 릴레이션 각각에 대해 독립적인 조작이 가능해야 합니다.

정규화의 특징

  • 어떠한 관계구조가 바람직한 것인지, 바람직하지 못한 관계를 어떻게 분해하여야 하는지에 관한 구체적인 판단기준을 제공
  • 정규화된 데이터 모델은 정확성, 일치성, 단순성, 비중복성, 안정성 보장

제 1정규형

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 함
릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안됨
만약 반복 집합이 있다면 제거해야 함

제 2정규형

제 2정규형은 제 1정규형을 만족하면서, 모든 컬럼이 완전종속관계를 가지는 것
즉 후보키 K와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K전체를 참조해야만 하는 경우를 말한다. 결국, 부분함수종속관계를 전부 완전함수종속 관계로 만드는 것이다!
주의할 점 ! 릴레이션이 분해할 때 동등한 릴레이션으로 분해해햐 하고, 정보 손실이 발생하지 않는 무손실 분해로 분해되어야 한다는 것!

💡 부분 함수의 종석성 제거

기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것


위 그림에서 종업원의 기술 테이블에서 후보키는 종업원, 기술이다.
즉 종업원, 기술은 복합키이다. 2개가 함께 있을때 유일성이 보장된다.
종업원은 여러 개의 중복된 값이 있기 때문에 단독으로 존재할 수 없는 기본키이다.
기술 또한 마찬가지다. 하지만 종업원과 기술을 함께 보면 중복되는 행은 없다!
즉, 이는 종업원과 기술이 복합키라는 뜻이다.

근무지는 종업원과 기술에 의해서 값이 정해지는 것이 아니라, 종업원에 의해서도 충분히 값이 정해진다.
즉, 부분적함수종속관계를 형성하고 있는 것이다.
이는 제2 정규형에 위반된다. 만약 이런경우 갱신이상 문제점을 발생시킬 여지가 있다.
예를 들어 Jones의 Typing , shorthand 에 속해있는 근무지를 갱신하고 Whittiling 에 있는 근무지를 갱신하지 않으면, Jone의 주소는 2개가 된다.
어떤 것이 원장 데이터인지 알 수 없다.

따라서 갱신이상의 문제점을 방지하기 위해 제 2정규형으로 정규화시켜주자.

제 2정규형은 완전함수종속관계를 이뤄야한다.
따라서 이를 수정해주면 오른쪽에 있는 종업원과 종업원의 기술인 2개의 테이블로 분해할 수 있다.
종업원 테이블에 근무지는 기본키인 종업원에 의해서 결정된다. 완전함수종속관계이다.

제 3정규형

제 3정규형은, 제 1정규형, 제 2정규형을 만족하고, 이행적 함수 종속(Transitive FD) 관계를 갖지 않는 것

💡이행적함수종속관계

A-> B, B->C가 존재하면 A->C가 성립하는 데
이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 함


학번을 기본키로 갖고 있다고 하면, 학번을 알면 학과명을 알 수 있다! (학번 -> 학과명)
또한, 학과명을 알 때, 학과번호를 알 수 있다. (학과명 -> 학과번호)
이는 이행적함수종속관계를 가진다고 볼 수 있다. (학번 -> 학과명, 학과명 -> 학과번호)
즉, 제 3정규형을 위반하고 있다.

위와 같은 경우 생기는 문제점

  • 갱신이상
    학과에 속한 학생이 늘어날수록 학과명과 학과번호가 중복으로 나타남
    만약 갱신 시 하나라도 갱신하지 못하면 갱신이상을 발생시키기 때문에
    문제가 될 수 있음

  • 삭제이상
    학생이 만약 한 명만 등록되어 있고, 따로 학과에 관한 테이블이 없는 경우 학생을 삭제하면, 더이상 해당 학과에 대한 정보를 얻을 수 없음

  • 삽입이상
    학과는 존재하지만, 학생이 없는 경우 학번이 기본키이기 때문에 학번없이 학과를 등록할 수 없음

보이스/코드 정규형

제3정규형에 속하고, 함수 종속 관계에서 모든 결정자가 후보키(유일, 최소)인 상태

💡 결정자

함수 종속 관계에서 종속자(dependent)를 결정짓는 요소
' X -> Y '일 때 X는 결정자, Y는 종속자

📌 정규화 과정을 거치면 무조건 성능이 좋아지나요?!

  • 정규형 과정을 거쳐 테이블을 나눈다고 해서 성능이 100% 좋아지는 것은 아니다!
  • 성능이 좋아질 수도 나빠질 수 도 있다!
  • 테이블을 나누게 되면 어떠한 쿼리는 조인을 해야 하는 경우도 발생해서 오히려 느려질 수도 있기 때문에 서비스에 따라 정규화 또는 비정규화 과정을 진행해야 함!

트랜잭션(Transaction)

데이터베이스 내에서 수행되는 작업의 최소 단위
데이터베이스의 무결성을 유지하며 DB의 상태를 변화시키는 기능을 수행
하나 이상의 query를 포함해야 하고 ACID라고 칭해지는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야 함

💡 무결성

데이터베이스에 저정된 데이터의 일관성과 정확성을 지키는 것

트랜잭션 쉽게 이해하기!

A가 은행에서 100만원을 B에게 송금하는 상황이 있다고 하면
A는 통장에서 100만원을 출금을 해서 송금을 했는 데, 이 때 전산오류가 생겨 B의 계좌에 100만원이 입금되지 않았다.
이런 오류가 발생해 데이터의 부정합이 발생할 경우, 다시 원상 복귀해야 한다!
따라서 모든 입출금 과정은 하나의 묶음 형태로 작동해야 한다.
출금을 했으면 입금까지 완료 하던가, 아니면 아예 없는 일로 만들어야 한다!
입금, 출금처럼 분리될 수 없고 하나로 처리해야 하는 것을 '단일 업무'라고 한다.
이 업무처리의 최소 단위를 데이터베이스에서는 트랜잭션이라고 한다!

  • 원자성(Atomicity)

    트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징
    [ All or Nothing ]
  • 일관성(Consistency)

profile
Hello World!

0개의 댓글