2024.10.15.화.TIL RDBMS의 정규화

김기남·2024년 10월 15일
post-thumbnail

안녕하세요, 오늘은 RDBMS의 정규화 에 대해 정리해 보았습니다.

RDBMS의 정규화란?

RDBMS(Relational Database Management System)의 정규화는 데이터베이스의 테이블을 설계할 때, 데이터의 중복을 줄이고, 데이터 간의 관계를 명확히 하기 위한 일련의 과정입니다. 정규화는 데이터베이스의 구조를 최적화하여, 데이터의 무결성을 유지하고, 쿼리 성능을 향상시키는 데 기여합니다.

정규화의 필요성

정규화가 필요한 이유는 여러 가지가 있습니다. 첫째, 데이터 중복을 줄여 저장 공간을 절약할 수 있습니다. 둘째, 데이터의 일관성을 유지할 수 있습니다. 예를 들어, 학생 정보를 저장하는 테이블에서 학생의 성적이 여러 번 입력되면, 성적이 변경될 때마다 모든 레코드를 수정해야 하는 불편함이 발생합니다. 셋째, 데이터의 삽입, 수정, 삭제 시 발생할 수 있는 이상 현상을 방지할 수 있습니다.

정규화의 단계

정규화는 여러 단계로 나뉘며, 각 단계는 데이터의 구조를 더욱 정교하게 만들어 줍니다.

1차 정규화(1NF)

1차 정규화는 테이블의 모든 열이 원자값(Atomic Value)만 포함되도록 하는 것입니다. 즉, 각 열은 더 이상 나눌 수 없는 단일 값을 가져야 합니다. 예를 들어, 학생의 수업 정보를 저장할 때, 수업 이름을 여러 개의 열로 나누지 않고 하나의 열에 저장해야 합니다.

2차 정규화(2NF)

2차 정규화는 부분적 종속성을 제거하는 데 초점을 맞춥니다. 즉, 기본 키가 아닌 속성이 기본 키의 일부에만 의존하는 경우 이를 제거하여 모든 속성이 기본 키에 완전히 의존하도록 합니다. 예를 들어, 학생 ID와 과목 번호가 기본 키인 경우, 성적은 학생 ID와 과목 번호 모두에 의존해야 합니다.

3차 정규화(3NF)

3차 정규화는 이행적 종속성을 제거하는 것입니다. 즉, A가 B에 의존하고, B가 C에 의존할 때, A가 C에 직접 의존하지 않도록 구조를 변경합니다. 이를 통해 데이터의 중복을 더욱 줄일 수 있습니다.

정규화의 예시

정규화의 과정을 이해하기 위해, 대학의 수업 등록 시스템을 예로 들어보겠습니다. 학생 정보와 수업 정보를 각각의 테이블로 나누고, 이들 간의 관계를 명확히 합니다. 예를 들어, 학생 테이블에는 학생 ID, 이름, 전공 등이 포함되고, 수업 테이블에는 과목 번호, 과목 이름, 교수 이름 등이 포함됩니다.

정규화의 장단점

정규화의 장점은 데이터의 중복을 줄이고, 데이터의 무결성을 높이며, 데이터베이스의 효율성을 향상시킨다는 점입니다. 그러나 단점으로는 정규화가 지나치게 진행될 경우, 데이터베이스의 성능이 저하될 수 있으며, 복잡한 쿼리가 필요할 수 있습니다.

정규화와 비정규화

비정규화는 정규화의 반대 개념으로, 성능을 높이기 위해 일부러 데이터 중복을 허용하는 것입니다. 비정규화는 데이터베이스의 읽기 성능을 향상시킬 수 있지만, 데이터의 일관성을 유지하기 어려워질 수 있습니다. 따라서, 정규화와 비정규화는 상황에 따라 적절히 선택해야 합니다.

오늘의 코드카타

class Solution {

    public int[] solution(int[] num_list, int n) {
        int[] answer = new int[(num_list.length) - (n - 1)];

        for (int i = 0; i < answer.length; i++) {
            answer[i] = num_list[(n - 1) + i];
        }

        return answer;
    }
}
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {

        Solution solution = new Solution();

        int[] a1 = {2, 1, 6};
        int[] a2 = {5, 2, 1, 7, 5};

        System.out.println(Arrays.toString(solution.solution(a1, 3)));
        System.out.println(Arrays.toString(solution.solution(a2, 2)));

    }
}

n 번째 원소부터

profile
새로운 시작~!

0개의 댓글