데이터 베이스 3

다람·2023년 5월 3일
0

DB

목록 보기
3/3
post-thumbnail

무결성

데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한다.
무결성이 유지가 되어야 DB에 저장된 데이터 값과 거기에 해당하는 현실 세계의 실제 값이 일치하는지 신뢰할 수 있다.

이상현상

테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 생기는 논리적 오류
ex)

  1. 삽입이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
    ex) 강의를 수강하지 않은 학생을 추가할 때 강의코드, 강의명을 null로 지정하는 문제

  2. 갱신이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상

  3. 삭제이상 : 어떤 정보를 삭제하면 의도하지 않은 다른 정보까지 삭제 되어 버리는 현상

용어 정리
릴레이션 : DB 테이블
개체 entity : 데이터화하려는 사물, 개념의 정보 단위
속성 attribute : 개체를 구성하는 데이터의 가장 작은 논리적 단위이며 데이터의 종류, 특성, 상태를 정의한다.
관계 : 개체와 개체 또는 속상 간의 연관성
세로행 - row, 행, 튜플, 레코드
가로행 - column, 칼럼, 어트리뷰트, 필드

정규화

하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정
데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이다.

정규화의 목적
1. 불필요한 데이터를 제거해 중복을 최소화
2. 삽입, 갱신, 삭제 시 각종 이상현상 방지

1~6정규화까지 있으며 1~3까지 과정을 거친다.
제 1 정규화
칼럼의 원자 값을 갖도록 테이블을 분해하는 것
ex)

위 테이블의 원자값을 가질 수 있도록 아래 테이블처럼 분해

제 2 정규화
제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것

완전 함수 종속
기본키의 부분집합이 결정자가 되어선 안된다는 의미

ex)

아래 테이블로 분해

제 3정규화
제 2정규화를 진행한 테이블에 대해 이행적 함수 종속을 없애도록 테이블을 분해하는 것

이행적 함수 종속
A -> B, B -> C가 성립할 때 A -> C가 성립한다는 것을 의미

ex)

아래 테이블로 분해

BCNF 정규화
제 3정규화를 진행한 TABLE에 대해 모든 결정자가 후보키가 되도록 TABLE을 분해하는 것
즉, 제 3정규화를 만족하고 함수 종속성 X->Y가 성립할 때 모든 결정자 X가 후보키가 되도록 분해한 것
ex)

아래 테이블로 분해

정규화 장점

  1. DB 변경 시 이상현상 방지
  2. DB 구조 확장 시 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.

정규화 단점

릴레이션 분해로 JOIN 연산이 많아져 응답이 느려질 수 있다.

역정규화를 하는 이유

성능 문제가 있는 DB의 전반적은 성능을 향상시키기 위해서이다.

SQL Injection

공격자가 악의적인 의도를 갖는 SQL문을 삽입하여 DB를 비정상적으로 조작하는 코드 인젝션 공격 기법

SQL Injection 방지 및 방어 방법

  1. 입력된 값이 개발자가 의도한 값인지 검증한다.
  2. 저장 프로시저를 사용한다.
    --> 쿼리에 형식을 지정하고 형식에 맞지 않으면 query 실행 멈춤

옵티마이저

SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진이다.
컴퓨터의 두뇌 CPU인 것처럼 DBMS의 두뇌는 옵티마이저라고 할 수 있다.

RDBMS, NOSQL 차이

  • RDBMS
    모든 데이터를 2차원 TABLE 형태로 표현
    장점 : 스키마에 맞춰 데이터를 관리하기 때문에 데이터의 정확성을 보장
    단점 : 시스템이 커질수록 쿼리가 복잡해지고 성능이 저하

  • NOSQL (Not Only SQL)
    데이터 간의 관계를 정의하지 않고 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있다.
    컬렉션 형태로 데이터를 관리한다
    장점 : 스키마 없이 Key, value 형태로 데이터 관리
    단점 : 중복 발생하며 스키마가 없어 데이터 구조를 보장하지 않아 데이터 구조 결정이 어렵다.

각각 언제 써야 하나?
RDBMS : 데이터 구조가 명확하고 변경될 여지가 없으며 스키마가 중요한 경우, 관계를 맺고 있는 데이터가 자주 변경이 이루어질 때 사용하는 것이 좋다.
NOSQL : 정확한 데이터 구조를 알 수 없고 데이터가 변경, 확장될 수 있는 경우, update가 잘 없는 경우에 사용하는 것이 좋다.

MySQL 특징

구조화된 쿼리 언어를 기반으로 하는 무료 오픈 소스 관계형 데이터베이스 관리 시스템이다. 웹사이트 및 애플리케이션을 위한 기본 관계형 데이터 스토리지 솔루션이다.

PostgreSQL 특징

오픈 소스 객체-관계형 데이터베이스 시스템
연산자, 복합 자료형, 집계함수, 자료형 변환자, 확장 기능 등 다양한 데이터 베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로서 마치 새로운
하나의 프로그래밍 언어처럼 무한한 기능을 손쉽게 구현할 수 있다.

스키마

DB 내에 어떤 구조로 데이터가 저장되는가를 나타네는 DB구조

Oracle, MySQL 차이점

Oracle은 대규모 트랜잭션 로드를 처리하고 성능을 최적화하기 위해 여러 서버에 대용량 DB분산 절차적 언어를 통해 DB에 내장된 프로그램의 작성을 지원
MySQL은 단일 DB로 제한되어 있으며 대용량 DB에는 부적합하다. DB를 이전 상태로 복원하는데 도움이 되는 저장점이 없고 COMMIT, ROLLBACK만 존재한다.

profile
안녕

0개의 댓글