DataBase - (1)

kangking·2024년 5월 2일

기반기술

목록 보기
3/14
post-thumbnail

DataBase - (1)

DB의 개념

DB란?

DB는 데이터를 효율적으로 관리하기 위해서 데이터들 사이에 관계를 맺어둔 일종의 파일이다

현실의 무언가로부터 측정한 값을 [데이터]라고 하며 데이터는 어떻게 가공하느냐에 따라 다양하게 활용할 수 있다.

DB의 특징

  • 자료 추상: 복잡한 자료 쉽게 사용, 개념화, 공통 성질 추출 (쉽게 말해 공통적인 부분만 추출해서 저장한다. 너무 디테일까진 저장 X <=> NoSQL은 디테일까지 저장하자!)

  • 자료 독립: 자료와 프로그램의 독립성 유지

    • 자료의 독립을 지키지 않으면?: 자료가 프로그램에 종속되어 있으면 DB 변경에 따라 프로그램의 변경이 생길 수 있다.
  • 자기 정의: 자료의 구성과 내용을 DB자신이 저장 및 관리 (DB의 각종 컬럼이나 자체적인 정보 등 구성 정보를 스스로 저장하고 있음)

DB의 장점

  • 데이터의 논리적 독립성: 논리 구조가 변경되어도 DB이용하는 프로그램에는 영향X

  • 데이터의 물리적 독립성: 저장 장치의 구조를 변경해도 DB를 이용하는 프로그램 및 개념스키마에는 영향 X

  • 데이터의 무결성 유지: 데이터를 사용할 때 다양한 제약조건으로 데이터에 결점이 생기지 않도록 유지

  • 데이터 중복성 최소화: 데이터를 통합하여 구성함으로 중복을 미리 통제

  • 데이터 불일치 제거: 중복을 최소화하여 불일치를 제거

DB의 발전 과정

  • 계층형: 폴더

DBMS

DBMS란?

DataBase Management System (데이터베이스 관리 시스템)

DB서비스를 저장해주는 서비스라고도 불리며, DB서버라고도 불린다.

DBMS의 필수 기능

  • 정의 기능(Data Definition): 데이터의 형태, 구조, 데이터를 저장하는 것에 관한 내용 정의

  • 조작 기능(Data Manipulation): 사용자의 요구에 따라 데이터의 검색, 갱신, 삽입, 삭제 등을 지원

  • 제어 기능(Data Administration): 데이터의 정확성과 안전성을 유지하는 기능

DBMS는 DB와 다른 프로그램 사이를 중재하는 역할을 한다!

DB연결에 일반적으로 필요한 내용

ip, port, 위치(디렉토리), id, password

DB의 스키마

일반적으로 구조를 이야기 하지만 DB회사마다 조금씩 다르다. 보통은 DB를 스키마라고 부른다.(Oracle에선 DB가 스키마보다 조금 더 큰 개념)

데이터 모델링

현실 세계의 데이터 구조를 컴퓨터 세계의 데이터 구조로 기술하는 논리적 구조

항상 생각해야 할 점은 앞으로 우리가 다룰 컴퓨터는 한 대가 아니라 여러대라는 것이다. (한 대의 컴퓨터의 수용량과 활용성, 효율성에 한계가 있기 때문)

DB 설계 과정

요구분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현

  • 요구분석

    요구 사항을 문장의 형태로 기록하여 정리한다.
    • 결과물: ER 다이어그램(Entity Relation Diagram)
    • ERD를 설계할 때 명사는 Entity로, 동사는 Relation으로 설계하면 편하다.
  • 논리적 설계(개발자의 영역)

    관계형 DB의 경우 개념적 스키마를 테이블과 같은 논리적 데이터 모델을 이용해 논리적 구조로 표현, 정규화 수행

    • 결과물: 릴레이션 스키마, 데이터 타입, 길이, 널 값 허용 여부, 기분 값, 제약조건 등을 세부적으로 결정
    • 정규화: 데이터를 문제가 없는 일반적인 형태로 만들기 위해서 문제가 발생하지 않을 때 까지 반복해서 수행해야 한다. (하나의 테이블에 너무 많은 내용을 저장하지 않도록 테이블을 나누는게 정규화)
  • 물리적 설계(엔지니어의 영역)

    하드웨어나 운영체제의 특성을 고려하여 필요한 인덱스 구조나 내부 저장 구조 등에 대한 물리적인 구조를 설계(DBMS 및 HW에 종속적)

    • 결과물: 물리적 스키마
  • 구현

    SQL을 사용하여 DBMS를 통해 실제 DB를 만드는 과정

    • 결과물: 데이터베이스

논리적 설계

E-R 모델(ERD)

개체(Entity)와 관계(Relation)

개체(Entity)

현실 세계에서 꼭 필요한 사람이나 사물과 같이 구별되는 모든 것. 데이터로써 DB에 저장할 가치가 있는 중요한 사람이나 사물, 개념, 사건 등

ex) 학생의 속성: 이름, 성별, 번호 등

관계(Relation)

서로 다른 개체가 맺고 있는 의미 있는 연관성. 개체 사이의 대응 관계, 즉 매핑(mapping)을 의미

ex) "학생은 수업을 수강한다"
  • 1:1 관계: 남 - 여
  • 1:N 관계: 학생 - 학교
  • N:N 관계: 학생 - 수업
  • 필수적 관계: 개체가 관계에 반드시 참여해야함
    ex) 모든 학생(개체)은 수업을 반드시 수강(관계)해야함
  • 선택적 관계: 개체 중 일부만 관계에 참여해도 됨
    고객(개체)이 구매(관계)하지 않은 책이 존재할 수 있음

관계 결정

요구 사항 문장에서 개체 간의 관계를 표현한 동사를 찾는다. 의미가 같은 동사가 있을 경우 대표적인 것 하나만 선택

관련 용어

  • 릴레이션: 정보 저장의 형태가 2차원인 구조의 테이블

    • 릴레이션의 특징

      1. 특정 릴레이션은 오직 하나의 레코드 타입만 저장
      1. 하나의 속성 내의 값들은 모두 같은 유형
      1. 속성들의 순서는 중요하지 않음
      1. 각 속성의 이름은 한 릴레이션 내에서만 고유함(같은 이름의 어트리뷰트가 두 개 이상 존재할 수 없음)
      1. 릴레이션에서 동일한 튜플이 두 개 이상 존재하지 않음(보통 id로 구분)
      1. 한 튜플의 각 속성은 원자값을 가짐(리스트나 집합 불가능)
  • 속성: 테이블의 각 열의 이미

  • 튜플: 테이블의 한 행을 구성하는 속성들의 집합, 레코드라고도 부름

  • 도메인: 속성이 취할 수 있는 값들의 집합

  • 기수: 튜플의 수, Cardinality

  • 차수: 속성의 수, Degree

키의 종류

  • 슈퍼키: 유일성은 갖지만, 최소성을 만족시키지 못하는 속성의 집합

  • 후보키: 유일성과 최소성을 모두 갖는 속성의 집합

  • 기본키(Primary Key): 개체 식별자, 튜플을 유일하게 식별할 수 있는 속성의 집합

  • 대체키: 기본키를 제외한 후보키

  • 외래키: 다른 테이블을 참조하는데 사용되는 속성

    최소성은 튜플을 구별할 수 있어야 한다는 성질

    관계 데이터 제약의 종류

  • 개체 무결성:

    기본 릴레이션의 기본키를 구성하는 어떤 속성도 NULL과 중복을 허용하지 않는다.

  • 참조 무결성:

    외래키 값은 NULL이거나 참조하는 릴레이션에 있는 기본키이다.

  • 도메인 무결성:

    특정 속성의 값은 그 속성에 정의된대로의 값만 허용한다.

다양한 규칙

  • 개체는 하나의 릴레이션으로 변환

  • 다대다(n:m)관계는 하나의 릴레이션으로 변환

  • 일대다(1:n) 관계는 외래키 속성으로 표현(다 측)

  • 일대일(1:1) 관계는 외래키 속성으로 표현

  • 다중 값 속성은 다른 릴레이션으로 변환

    위의 규칙을 순서대로 진행, 해당 안되면 제외함

DB실습

윈도우에 클라이언트 설치, VMware에 DB서버를 설치해서 이용해보기

DB

MariaDB

  • 그냥 yum install mariadb로 받으면 클라이언트 주소로 받아짐(mariadb-server로 다운)

    yum의 원리:
    특정 저장소 사이트에 올라와있는 프로그램을 검색해서 다운받아 주는건데, 만약 설치하고자 검색했던 프로그램이 저장소에 올라와있지 않으면 프로그램 제공사의 문서를 참고하여 주소를 yum 목록에 추가해준다.

    서버에는 자동으로 root 사용자가 스키마가 추가되어 있는데, 외부에서 접속을 하려면 해당 스키마에 사용자 이름을 추가해줘야 한다.(단, root 사용자가 아니기 때문에 권한은 따로 설정해줘야함)

    CREATE USER '[이름]'@'%' IDENTIFIED BY 'qwer1234';

    권한 부여:

    GRANT ALL PRIVILEGES ON test.* TO '[사용자명]'@'%';

클라이언트

MySQL WorkBench

  • database -> reverse engineer -> erd 작성

  • database -> forward enginner -> sql문 작성

ERD 실습

서비스 정의

상품에 대한 구매, 장바구니, 리뷰, QNA가 있는 간단한 쇼핑서비스

요구사항 분석

ERD 설계

Table 생성

발생문제: mysql과 mariaDB의 sql문 문법이 약간 달라서 충돌이 일어나는 CONSTRAINT, INDEX 삭제 후 실행

정규화

정규화란?

이상 문제를 해결하기 위해 속성 간 종속 관계를 분석, 릴레이션을 분해하는 과정이다. (릴레이션의 속성, 개체, 관계를 파악하여 데이터의 중복성을 최소화 하는 과정)

이상(Anomaly)이란?

속성 간에 존재하는 여러 종속 관계를 하나의 릴레이션에 표현함으로 인해 발생하는 현상

  • 삽입 이상:

    데이터를 저장할 때 원하지 않는 정보가 함꼐 삽입되는 경우

  • 삭제 이상:

    튜플을 삭제함으로써 유지되어야 하는 정보까지도 연쇄적으로 삭제

  • 갱신 이상:

    중복된 튜플 중 일부의 속성만 갱신시킴으로써 정보의 모순성 발생

정규화 암기!

도 부 이 결 다 줘

각각 1단계, 2단계, 3단계, BCNF단계, 4단계, 5단계이다.

정규화 과정

함수적 종속

속성들 사이의 종속 관계를 파악한다.

  • A라는 속성의 값이 B라는 속성의 특정 값으로 모든 값이 수렴하면 그 속성은 다른 속성의 결정요인이 되며 다른 속성은 해당 속성에 종속되었다고 표현한다.

1. 제1 정규형

도메인이 모두 원자값이 아닌 것을 제거

,를 구분점으로 나열된 핸드폰 번호 속성의 값을 모두가 원자값인 형태로 분리해서 저장한다. (이렇게 하면 데이터의 불필요한 중복이 발생

  • 제거 후

2. 제2 정규형

부분 함수 종속제거

학번이 학부를 결정한다.
학부가 등록금을 결정한다.
학번과 과목코드가 학점을 결정한다.
2개 이상의 속성 안에있는 더 작은 단위의 속성이 다른 속성을 결정할 때 부분 함수 종속을 제거해줘야 한다.

  • 제거 후

3. 제3 정규형

이행 함수 종속 제거

A가 B를 결정하는데 B도 C를 결정할 때 정규화 수행해야함

학번이 학부를 결정하고 학번도 등록금을 결정한다
따라서 정규화를 수행해야 한다

  • 제거 후

4. BCNF 정규형

결정자 중 후보키가 아닌 것들은 제거

5. 제4 정규형

다치 종속 제거

6. 제5 정규형

조인 종속성 제거

요즘은 API를 먼저 개발하는 케이스도 많고 정규화는 DB엔지니어가 따로 있을 때 사용했던 경향이 높음.
왜 발생하는지 원인을 파악할 수 있으면 된다.
그럼 비정규화는 무엇인가?

profile
하루하루 의미있게

0개의 댓글