데이터베이스 더 알아보기

병용·2023년 10월 1일
0

note

목록 보기
5/6
post-thumbnail

💬 오늘의 주제

안녕하세요! 어제 SQL 과 NOSQL에 대해 알아보았는데요, 오늘은 어제 공부하며 개념이 부족하다고 느꼈던 부분들에 대해 좀 더 정리해보는 시간을 가지려 합니다.

🕐 트랜잭션(transaction)

🕑 트랜잭션이란?

트랜잭션은 "쪼갤 수 없는 업무 처리의 최소 단위"를 뜻합니다.

(출처: http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98)

업무처리의 최소 단위라는 말처럼 트랜잭션은 전체 성공 또는 실패 둘 밖에 없다. 위 그림에서 처럼 중간에 실패하면 전체 트랜잭션이 실패한걸로 간주해 1,2번 절차도 롤백된다.

데이터베이스의 트랜잭션이 안전하게 수행되기 위해서는 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 ACID 조건을 출족해야 한다.

🕒 ACID

  • 원자성(Atomicity)
    원자성은 트랜잭션이 데이터베이스에 모두 반영되거나 반영되지 않아야한다는 것을 의미한다.

  • 일관성(Consistency)
    일관성은 트랜잭션 이전과 이후의 데이터데이스의 상태가 일관되어야 한다는 의미로 트랜잭션 이후에도 이전에 가지고 있던 데이터베이스의 제약,규칙을 만족해야한다는 뜻이다.

  • 고립성(Isolation)
    고립성은 모든 트랜잭션은 다른 트랜잭션으로부터 독립적이어야 하며, 이는 각각의 트랜잭션이 상호간에는 영향을 줄 수 없음을 의미합니다.

  • 지속성(Durability)
    지속성은 트랜잭션이 성공적으로 완료되면 해당 기록이 영구적으로 데이터베이스에 반영되어야 함을 의미한다.

🕓 데이터 정규화(Normalization)

데이터 정규화란 관계형 데이터베이스에서 데이터 중복을 최소화할 수 있게 구조화하는 것을 의미합니다. 정규화의 목표는 크고 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것입니다.

정규화는 제 1정규화부터 제 6정규화까지 있으며, 그 사이에 보이스-코드 정규화(BCNF)가 있다고합니다. 보통 제 3정규화까지 되어있는 데이터베이스를 정규화된 데이터베이스라 일컫는다고 하네요.

🕔 제 1정규화(1NF)

제 1정규화란 테이블에 속한 모든 칼럼을 분해되지 않는 하나의 원자값만을 가지게 만드는 걸 의미합니다.

늘 정의를 살펴보면 어렵게 느껴집니다만, 쉽게 말하면 하나의 칼럼은 하나의 값만 가진다는 의미입니다.

이름취미
벨보이독서,코딩
벨걸코딩

예를 들어 위와 같은 데이터를 가진 데이터베이스가 있습니다. 벨보이란 사람의 취미가 두개가 들어가 있네요. 위의 테이블은 제 1정규화가 안되어있다고 볼 수 있습니다.

이름취미
벨보이독서
벨보이코딩
벨걸코딩

위에서 벨보이가 하나의 칼럼에서 가지고 있던 취미를 제 1정규화하여 분리한 테이블입니다. 직접 보니 감이 좀 오시죠?ㅎㅎ

🕕 제 2정규화(2NF)

제 2정규화는 제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것을 의미합니다. 완전 함수 종속이라는 말이 어려운데요, 기본키가 여려개인 테이블에서 기본키의 일부가 특정 칼럼의 결정자가 되어서는 안된다는 것입니다.

학생번호강의이름강의실성적
101파이썬301호A+
102자바스크립트201호A0
103C#202호C-

위 테이블에서 학생번호와 강의이름이 기본키일 때, 강의실이라는 칼럼이 두개의 기본키중에 강의이름이라는 기본키만을 결정자로 갖고 있습니다.

이런 경우 아래의 두개의 테이블로 위 테이블을 분리하여 각 테이블이 완전 함수 종속을 만족하도록 만드는게 제 2정규화입니다.

학생번호강의이름성적
101파이썬A+
102자바스크립트A0
103C#C-
강의이름강의실
파이썬301호
자바스크립트201호
C#202호

🕖 제 3정규화(3NF)

제 3정규화는 제 2정규화가 진행된 테이블에 이행적 종속을 없애도록 테이블을 분해하는 것이며, 이행적 종속이란 A->B, B->C가 성립할 때 A->C가 성립되는 것을 의미합니다.

고객번호등급할인률
101골드2%
102다이아몬드3%
103VIP5%

위 테이블에서는 고객번호가 등급을 결정하고 등급에 따라 할인률이 결정되는 형태를 취하고 있습니다. 이는 논리적으로 봤을 때, 고객번호가 할인률을 결정하는 이행적 종속 관계를 가지고 있는 것으로 볼 수 있습니다. 제 3정규화를 진행하여 이행적 종속을 제거하면 아래와 같은 테이블로 분리되는 것을 알 수 있습니다.

고객번호등급
101골드
102다이아몬드
103VIP
등급할인률
골드2%
다이아몬드3%
VIP5%

🕗 데이터무결성

데이터 무결성이란 데이터베이스에 저장된 데이터의 정확성, 일관성, 유효성을 보장하는 것으로 보통 제약조건을 통해 강제된다.

🕘 데이터 무결성 제약조건

데이터 무결성을 보장하기 위해 저장, 수정, 삭제 등을 제약하기 위한 조건으로 이는 데이터베이스의 상태를 일관되게 유지하는데도 도움을 준다.

🕙 제약조건의 종류

  • 개체 무결성
    각 테이블은 기본키를 지정하고 기본키는 Null값이 올 수 없고 오직 하나의 값만 가져야함.

  • 참조 무결성
    테이블 간의 참조 관계를 선언하는 제약 조건으로 외래 키의 값은 Null이거나 참조 테이블의 기본키 값과 같아야하고 참조할 수 없는 값을 가질 수 없음.

  • 도메인 무결성
    테이블에 존재하는 필드의 무결성을 보장하기 위한 조건으로 해당 필드의 타입 등을 사전에 정의하여야 하고 정의에 맞는 데이터가 입력되었는지 확인하는 조건.

  • Null 무결성
    테이블의 특정 속성 값이 Null이 될 수 없게 했다면 해당 속성에는 Null값이 존재할 수 없음.

  • 고유 무결성
    테이블의 특정 속성에 대해 Unique한 값을 가지도록 했다면 각 레코드들이 갖는 값이 서로 달라야 함.

💛 Reference

profile
횡설수설 정리노트

0개의 댓글