반응형
개요
데이터베이스의 기초에 대해서 학습해봤던 지난 시간에 이어, 데이터베이스 종류 중에서 중요한 부분을 차지하고 있는 관계형 데이터베이스 (RDB) 에 대해서 알아보겠습니다.
관계형 데이터베이스, RDB 란?
관계형 데이터베이스는 데이터가 하나 이상의 열과 행의 테이블(또는 '관계')에 저장되어 서로 다른 데이터 구조가 어떻게 관련되어 있는지 쉽게 파악하고 이해할 수 있도록 사전 정의된 관계로써, 데이터를 구성하는 정보 모음입니다. 관계는 이러한 테이블 간의 상호작용을 기반으로 설정되는 여러 테이블 간의 논리적 연결입니다.
RDB 의 주요 개념
- 구조
- 테이블(Tables): RDB에서 데이터는 행과 열로 구성된 테이블에 저장됩니다. 각 테이블은 Business Entity(예: 고객, 주문)를 나타내며 테이블의 각 행은 해당 Entity의 한 개체에 대한 데이터를 포함하는 레코드입니다. 즉, 서로 다른 테이블 레코드는 서로 다른 개체에 대한 데이터를 가지고 있습니다. 이때에 개체는 속성 데이터가 전부 동일할 수도 있고 다를 수도 있습니다.
- 열(Columns): 테이블의 각 열은 개체의 특정 속성(예: 고객 이름, 주문 날짜)을 나타냅니다.
- 스키마(Schema)
- 스키마는 테이블, 각 테이블의 열, 테이블 간의 관계를 포함한 데이터베이스의 구조를 정의합니다. 데이터가 어떻게 구성되는지에 대한 청사진과 같습니다.
- 기본 키(Primary key)
- 기본 키는 테이블의 각 레코드에 대한 고유 식별자입니다. 두 행의 기본 키 값이 동일할 수 없습니다.
- 외래 키(Foreign Key)
- 외래 키는 한 테이블에서 다른 테이블의 행을 고유하게 식별하는 필드(또는 필드 모음)입니다. 테이블 간에 연결을 만들어 관계를 설정합니다.
RDB 의 특징
- 데이터 무결성
- 관계형 데이터베이스는 기본 키, 외래 키, 고유 제약 조건과 같은 제약 조건을 통해 데이터 무결성을 강화합니다. 이를 통해 데이터의 정확성과 일관성을 보장합니다.
- ex. 예약이라는 Business Entity 에서 예약 번호가 해당 개체의 식별 값으로 사용된다고 가정한다면, 각각의 개체는 유일무이한 예약 번호를 가지고 있음으로 다른 예약과 혼용될 가능성이 없음으로써 일관성을 보장받을 수 있습니다.
- ACID 특성
- Atomicity(원자성): 트랜젝션은 하나도 실행되지 않거나(None), 전부 실행되거나(All) 둘 중에 무조건 하나입니다. 그 외의 상태는 존재할 수 없습니다.
- Consistency(일관성): 데이터베이스를 구성할 때에 정해놓은 규칙(일관성)들은 트랜젝션을 성공한 이후에도 계속해서 유지되어야 합니다. 즉 일관성을 유지할 수 없는 트랜젝션은 실행되어서는 안된다는 뜻입니다. 예시를 들어 설명해보겠습니다. 만약 사용자 테이블과 사용자 개인정보 테이블이 있다고 가정하고 사용자와 사용자 개인정보 테이블은 1:1 관계를 가지고 있다고 가정하고 사용자 개인정보 속성 중 비밀번호는 최소 10자 이상의 길이를 가져야 한다고 가정합니다. 소프트웨어 적으로 사용자 개체가 먼저 생성되고, 해당 사용자 개체를 참조하는 사용자 개인정보 개체가 생성될텐데 만약 입력 값으로 들어온 비밀번호 값이 10자 미만의 길이를 가진다면, 해당 트랜젝션은 실행되어서는 안됩니다. 하지만 해당 특성은 데이터베이스 자체 기능만으로는 구현할 수 없고 어플리케이션 레이어에서 처리해야하는 경우가 종종 있기 때문에 데이터베이스의 특성에서 제외되어야 하는 것이 아니냐는 의견도 존재합니다.
- Isolation(격리): 각각의 트랜젝션은 독립적으로 이루어집니다. 만약, 한 사용자 개체가 본인의 이름을 '철수'에서 '영희'로 변경하는 트랜젝션을 발생시켰다고 가정합니다. 변경 트랜젝션 도중에 해당 사용자 개체의 정보를 조회하는 또 다른 트랜젝션이 발생한다고 한다면, 해당 조회 트랜젝션이 볼 수 있는 해당 사용자 개체의 이름은 '영희'가 아니라 '철수'입니다.
- Durability(내구성): 한번 트랜젝션이 커밋되면 시스템 장애가 발생해도 해당 값은 유지됩니다.
- 정규화
- 정규화는 데이터베이스의 필드와 테이블을 구성하여 중복성과 의존성을 줄이는 것을 목표로 하는 관계형 데이터베이스의 프로세스입니다.
- 데이터 일관성과 무결성을 높이기 위해 큰 테이블을 더 작은 테이블로 나누고 그들 사이의 관계를 정의하는 것을 포함합니다.
- 관계의 종류
- 일대일: A 라는 테이블의 각 행은 오직 B 라는 테이블의 한 행으로만 연결됩니다.
- 일대다: A 라는 테이블의 각 행은 B 라는 테이블의 여러 행에 연결될 수 있지만, B 테이블의 각 행은 A 테이블의 한 행에만 연결됩니다. (ex. 학생 : 수강과목 = 1 : N)
- 다대다: A 라는 테이블의 행은 B 라는 테이블의 여러 행에 연결될 수 있으며, 그 반대의 경우도 일반적으로 두 테이블에 대한 외래 키를 포함하는 접합 테이블(Junction Table)을 통해 구현됩니다.
정규화 정의 및 단계
정규화 정의
- 데이터베이스의 필드와 테이블을 구성하는 과정에서 중복성과 종속성을 최소화하기 위해 관계형 데이터베이스 설계에 사용되는 프로세스입니다.
- 데이터가 한 곳에서만 저장되도록 하여 데이터베이스를 보다 효율적이고 쉽게 유지 및 관리할 수 있도록 하는 것이 목표입니다.
정규화 단계
- 큰 테이블을 더 작고 관리하기 쉬운 작은 테이블로 나누고, 그들 사이의 관계를 정의하는 것을 말합니다.
- First Normal Form (1NF)
- 목적: 각각의 테이블에서 반복되는 데이터 그룹을 제거하는 것이 목표입니다. (Iterable Data. ex. List, Array)
- 규칙
- 각 테이블 셀에는 단일 값만이 존재해야 합니다.
- 각 테이블 행(Record)는 유일해야 합니다.
- 예시
- 학생이 수강하는 과목에 대한 테이블이 있다라고 가정합니다.
StudentID StudentName Courses 1 John Math, Science 2 Jessica English, History - 1NF 과정에서, 위 테이블은 아래와 같이 변환됩니다.
StudentID StudentName Course 1 John Math 1 John Science 2 Jessica English 2 Jessica History
- 학생이 수강하는 과목에 대한 테이블이 있다라고 가정합니다.
- Second Normal Form (2NF)
- 목적: 중복된 데이터를 제거합니다.
- 규칙
- 1NF 과정이 완료된 테이블이어야 합니다.
- Non-key 인 모든 속성 값들은 Primary Key 에게 완전하게 기능적으로 종속되어야 합니다. 이 말 뜻은, Primary Key를 알고 있다면 해당 Primary Key 값을 가지는 Record의 모든 속성 값들을 알 수 있다는 것입니다.
- 예시
- 1NF 과정을 끝낸 테이블을 아와 같이 바꿈으로써 하나의 테이블에 Primary Key 값을 유일하게 바꿉니다.
StudentID StudentName 1 John 2 Jessica CourseID CourseName 1 Math 2 Science 3 English 4 History CourseID StudentID 1 1 2 1 3 2 4 2
- 1NF 과정을 끝낸 테이블을 아와 같이 바꿈으로써 하나의 테이블에 Primary Key 값을 유일하게 바꿉니다.
- Third Normal Form (3NF)
- 목적: Primary Key에 종속되지 않는 Column 들을 삭제합니다.
- 규칙
- 2NF 과정을 거친 테이블을 대상으로 합니다.
- 모든 속성 값들은 Primary Key에 종속되어야 합니다. Non-key + key 속성값 전부입니다.
- 예시
- 학생의 전공과 함께 지도 교수에 대한 정보를 저장하는 테이블에 대해서 생각해보겠습니다.
StudentID Major AdvisorName 1 Computer Science Dr. Smith 2 English Dr. Brown - 3NF 단계에서는 위 테이블은 아래와 같이 분리됩니다.
StudentID MajorID 1 1 2 2 MajorID MajorName AdvisorID 1 Computer Science 1 2 English 2 AdvisorID AdvisorName 1 Dr. Smith 2 Dr. Brown
- 학생의 전공과 함께 지도 교수에 대한 정보를 저장하는 테이블에 대해서 생각해보겠습니다.
- Boyce-Codd Normal Form (BCNF)
- 목적: 3NF에 의해 해결되지 않은 더 복잡한 중복 사례를 처리합니다.
- 규칙
- 3NF 과정을 거친 테이블이어야 합니다.
- 모든 기능 종속성 (X -> Y) 에 대해서 X 는 슈퍼 키여야 합니다.
- 예시
- 하나의 과목에 여러 교수가 있을 수 있지만, 각 교수는 하나의 과목만 가르치는 테이블을 생각해 보겠습니다.
CourseID Instructor Semester 1 Prof. A Fall 1 Prof. B Spring 2 Prof. C Fall - 따라서 BCNF 는 위 테이블을 다음과 같이 분리합니다.
CourseID CourseName 1 Math 2 Science InstructorID InstructorName 1 Prof. A 2 Prof. B 3 Prof. C InstructorID CourseID Semester 1 1 Fall 2 1 Spring 3 2 Fall
- 하나의 과목에 여러 교수가 있을 수 있지만, 각 교수는 하나의 과목만 가르치는 테이블을 생각해 보겠습니다.
- Fourth Normal Form (4NF)
- 목적: 다중 값 종속성을 제거합니다. 즉, 하나의 테이블에 여러 도메인 정보를 담고 있는 것을 지양합니다.
- 규칙
- BCNF 과정을 거친 테이블이어야 합니다.
- 테이블은 하나 이상의 다중 값 종속성을 가지면 안됩니다.
- 예시
- 학생의 프로젝트와 취미에 대한 정보를 담고 있는 테이블을 생각해봅시다.
StudentID Project Hobby 1 Database Reading 1 AI Hiking
StudentID Project 1 Database 1 AI StudentID Hobby 1 Reading 1 Hiking
- 학생의 프로젝트와 취미에 대한 정보를 담고 있는 테이블을 생각해봅시다.
- Fifth Normal Form (5NF)
- 목적: Join 종속성으로 인해 중복이 발생하지 않도록 테이블을 세분화 합니다.
- 규칙
- 4NF 과정을 거친 테이블이어야 합니다.
- 후보 키의 결과가 아닌 Join 종속성을 가지지 말아야 합니다.
- 예시
- 책, 저자, 출판사에 대한 테이블들을 가지고 있다고 가정합니다.
BookID AuthorID PublisherID 1 1 1 1 2 1 2 1 2 - 책 테이블
BookID AuthorID 1 1 1 2 2 1 - 책 출판 테이블
BookID PublisherID 1 1 1 1 2 2
- 책, 저자, 출판사에 대한 테이블들을 가지고 있다고 가정합니다.
반응형
'Database' 카테고리의 다른 글
[Database] PostgreSQL Commands - DML (0) | 2024.07.17 |
---|---|
[Database] PostgreSQL Commands - DDL (8) | 2024.07.15 |
[Database] RDBMS - PostgreSQL (0) | 2024.07.10 |
[Database] NoSQL 이란? (0) | 2024.07.10 |
[Database] 데이터베이스의 기초 (0) | 2024.07.02 |