관계형 데이터 베이스
관계형 데이터베이스(Relational Database)는 데이터를 테이블(Table) 형식으로 구조화하고, 데이터 간의 관계를 사용하여 저장하고 관리하는 데이터베이스 시스템입니다. 이러한 데이터베이스는 데이터를 열과 행으로 구성된 테이블에 저장하며, 각 테이블은 고유한 기본 키(Primary Key)를 사용하여 고유한 레코드(행)를 식별합니다.
인덱스(Index)란
인덱스는 데이터베이스 내의 특정 열(칼럼)을 기반으로 생성되는 데이터 구조입니다. 이 인덱스는 빠른 데이터 검색을 지원하며, 데이터베이스 내의 레코드(행)를 빠르게 찾는 데 도움을 줍니다.
일반적으로 인덱스는 B-트리(B-Tree)나 해시(Hash) 등의 자료 구조를 사용하여 구현됩니다. B-트리 인덱스는 정렬된 순서로 데이터를 저장하고 검색하기 위한 구조이며, 해시 인덱스는 고속 검색을 위해 해시 함수를 사용합니다.
인덱스는 데이터베이스 쿼리의 성능을 향상시키지만, 인덱스를 유지하려면 추가적인 디스크 공간과 처리 시간이 필요하므로 모든 열에 인덱스를 생성하지 않는 것이 중요합니다.
모든 요소에 인덱스를 걸지 않는 이유
인덱스를 생성하면 해당 열에서의 데이터 검색 속도가 향상되지만, 인덱스를 유지하기 위한 추가적인 디스크 공간과 처리 시간이 필요합니다.
데이터베이스의 모든 열에 인덱스를 생성하면 데이터 삽입, 수정, 삭제 작업이 느려지며, 디스크 공간 소비가 증가합니다.
인덱스는 주로 검색이 빈번하게 발생하는 열에 생성하며, 데이터베이스의 사용 패턴을 고려하여 선택적으로 인덱스를 생성해야 합니다.
복합 인덱스(Composite Index)란
복합 인덱스는 두 개 이상의 열을 결합하여 하나의 인덱스로 생성하는 것입니다. 이를 통해 여러 열에 대한 복합 검색을 빠르게 수행할 수 있습니다.
복합 인덱스는 열의 순서에 따라 검색 속도에 영향을 미칩니다. 첫 번째 열을 기반으로 검색할 때 더 빠르게 동작하며, 두 번째 열을 기반으로 검색할 때는 첫 번째 열과 동일한 값을 가진 행들 중에서 두 번째 열로 정렬됩니다.
복합 인덱스는 데이터베이스 쿼리의 성능을 향상시키지만, 열의 선택 및 순서를 신중하게 고려해야 합니다.
트랜잭션(Transaction)
데이터베이스에서 한 번에 실행되어야 하는 하나 이상의 데이터 조작 작업을 묶어서 처리하는 논리적인 단위입니다. ACID라고 알려진 특성을 가지며 다음과 같이 설명할 수 있습니다
- 원자성(Atomicity): 트랜잭션은 원자적이어야 하며, 모든 작업이 성공적으로 완료되거나 아무것도 수행되지 않아야 합니다. 실패할 경우 모든 작업은 롤백(뒤로 되돌림)되어 이전 상태로 복원됩니다.
- 일관성(Consistency): 트랜잭션이 실행 전과 후에 데이터베이스는 일관된 상태여야 합니다. 즉, 트랜잭션이 무결성 규칙을 준수해야 합니다.
- 고립성(Isolation): 복수의 트랜잭션이 동시에 실행될 때도 각각의 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않아야 합니다.
- 지속성(Durability): 트랜잭션이 완료되면 그 결과는 영구적으로 저장되어야 하며, 시스템 장애 등의 상황에서도 손실되지 않아야 합니다.
정규화(Normalization)
데이터베이스 설계에서 중복을 최소화하고 데이터 일관성을 유지하기 위해 데이터를 구조화하는 프로세스입니다. 정규화의 대표적인 장점과 단점은 다음과 같습니다:
- 장점:데이터 중복 감소: 데이터 중복을 줄여서 저장 공간을 절약하고 데이터 일관성을 향상시킵니다.업데이트 이상(Anomaly) 방지: 데이터 수정 시 일관성 유지가 용이하며, 업데이트 이상을 방지합니다.쿼리 최적화: 쿼리를 더 효율적으로 실행할 수 있습니다.
- 단점:조인 연산 증가: 데이터가 여러 테이블로 분산되므로 조인 연산이 더 많이 필요할 수 있어 성능 저하 가능성이 있습니다.설계 복잡성: 높은 정규화 수준의 데이터베이스 설계는 복잡성을 증가시킬 수 있습니다.쿼리의 가독성 저하: 다수의 테이블과 조인을 필요로 하므로 쿼리가 더 복잡해질 수 있습니다.정규화는 데이터베이스 설계에서 필요에 따라 적용되며, 적절한 정규화 수준을 선택하는 것이 중요합니다.
'면접' 카테고리의 다른 글
Node.js 질문 (0) | 2023.09.06 |
---|---|
네트워크 면접 질문 (0) | 2023.09.06 |
면접 후기 (2) | 2023.09.05 |
프로그래머스 체육복 (0) | 2023.08.06 |
프로그래머스 폰켓몬 (0) | 2023.08.01 |