기술면접 2일차 질답
- RDBMS의 정규화에 대해 설명해주세요.
- Primary Key, Foreign Key에 대해 설명해주세요.
RDBMS의 정규화란 데이터를 DB에 규칙에 맞게 정리하는 과정입니다
정규화를 하는 이유는 관계 집합에서 중복을 최소화 하는데 있습니다
또한 데이터의 삽입, 수정, 삭제시 발생가능한 이상현상을 방지할 수 있습니다
정규화는 단계적 적용이 가능한 깊이가 존재합니다
1차 정규화, 2차 정규화, 3차 정규화, BCNF 정규화, 4차 정규화
각 정규화 단계
- 1NF : 테이블의 모든 열에는 원자값만 포함
- 2NF : 부분적 종속성을 제거한다
- 3NF : 이행적 종속성을 제거한다
- BCNF 정규화 : 모든 결정자가 후보 키인 상태입니다
- 4NF : 복잡한(다중) 종속성을 제거
추가 키워드
- 삽입 , 수정, 삭제 이상
- 부분적 종속성
- 이행적 종속성
정규화의 단점 : 많은 정규화의 경우 성능이 떨어질수 있음 -> 어떤 경우에?
반 정규화란?
모범답안 :
RDBMS 정규화는 데이터 중복을 최소화하고 데이터 무결성을 보장하기 위한 규칙 및 방법입니다.
- 데이터 무결성 향상: 데이터 중복을 줄여 데이터 모순 및 오류 가능성을 방지하고, 데이터 수정 및 삭제 작업의 부작용을 방지하며, 데이터베이스 업데이트 작업의 효율성을 높입니다.
- 데이터 검색 및 관리 효율성 증대: 정규화된 데이터 구조는 데이터 검색 및 조회 속도를 향상시키고, 데이터베이스 관리 작업의 용이성을 높여 유지보수 비용을 절감합니다.
- 데이터베이스 확장성 개선: 데이터 증가에 따른 데이터베이스 확장 및 변경 작업을 용이하게 하고, 미래의 데이터 요구 사항 변화에 유연하게 대응할 수 있도록 합니다.
정규화 수준:
- 1차 정규화(1NF): 모든 테이블의 속성이 원자 값으로 구성되어 있어야 합니다. 즉, 반복되는 그룹 데이터를 분리하고, 각 속성이 하나의 값만을 가지도록 정의해야 합니다.
- 2차 정규화(2NF): 제 1정규화를 진행한 테이블에 대한 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 완전 함수 종속이란 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.
- 3차 정규화(3NF): 모든 테이블의 비전이 키 속성에 직접 종속되어 있어야 합니다. 즉, 비전이 키 속성을 통해서만 결정되어야 하며, 다른 비전이나 비주요 키에 의존해서는 안 됩니다. 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다.
- BCNF 정규화: 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.
정규화를 할 때 주의해야 할 점:
정규화를 지나치게 추구하면 오히려 데이터베이스 성능 저하, 복잡성 증가, 개발 및 유지보수 어려움 등의 문제가 발생할 수 있습니다. 따라서 적절한 정규화 수준을 판단하고, 프로젝트의 특성과 요구 사항을 고려하여 신중하게 진행해야 합니다.
정규화 과정에서 발생하는 이상 현상 (삽입 이상, 삭제 이상, 갱신 이상):
- 삽입 이상(Insertion Anomaly): 잘못된 데이터 삽입으로 인해 데이터 무결성이 침해되는 현상입니다.
- 삭제 이상(Deletion Anomaly): 특정 데이터 삭제로 인해 다른 중요한 데이터가 함께 삭제되는 현상입니다.
- 갱신 이상(Update Anomaly): 특정 데이터 갱신으로 인해 데이터 무결성이 침해되는 현상입니다.
비정규화된 데이터베이스의 문제점:
- 데이터 무결성 문제: 데이터 중복으로 인해 데이터 모순 및 오류가 발생할 수 있습니다.
- 데이터 업데이트 어려움: 데이터 업데이트 작업이 복잡하고 비효율적일 수 있습니다.
- 데이터 검색 어려움: 원하는 데이터를 검색하기 위해 여러 테이블을 조인해야 할 수 있으며, 검색 속도가 느려질 수 있습니다.
- 데이터베이스 유지보수 어려움: 데이터베이스 구조가 복잡하고 이해하기 어려워 유지보수 작업이 어려울 수 있습니다.
Primary key (기본키) 란 DB 테이블 내 모든 레코드(행)에 고유한 아이디를 제공하는 키입니다
기본키의 특징은 모든 레코드가 서로 다른 값을 가지고 있어 각 레코드를 식별하게 하는것
NULL 값이 존재 할수 없는것
레코드의 값은 중복이 불가능하다는것
테이블당 기본키는 하나만 존재가능합니다 (다만 기본키를 구성하는 컬럼이 복수인 경우는 있습니다)
Foreign key (외래키) 란 두개의 테이블을 이을때 사용되며 다른 테이블의 기본키를 참조하는 컬럼을 가집니다
테이블을 연결하는 일종의 가상 다리 역할을 하는 키입니다
외래키의 특징은 NULL 값이 존재할수 있는것
하나의 테이블에 여러개의 외래키가 존재할 수 있는것
외래키에 존재하는 값은 반드시 매칭된 다른 테이블에도 존재해야 하는것
이 있습니다
추가 키워드
기본키 : 데이터 무결성
외래키 : 참조 무결성
무결성에 대한 예시
모범답안 :
"Primary Key와 Foreign Key는 RDBMS에서 테이블 간의 관계를 구축하고 데이터의 무결성을 유지하는 데 사용됩니다. 기본키는 테이블 내에서 각 행을 고유하게 식별하는 역할을 하고 하나의 테이블에는 반드시 하나의 유니크값의 기본 키가 존재해야 하고. 인덱스 방식을 사용하기 때문에 테이블에서 기본 키를 사용하면 특정 행을 빠르게 찾을 수 있으며, 데이터의 무결성을 보장할 수 있습니다.
Foreign Key (외래 키) - 외래 키는 다른 테이블의 기본 키와 관계를 형성하는 열입니다. 외래 키를 가지고 있는 테이블을 참조 테이블 또는 자식 테이블이라고 하며, 다른 테이블의 기본 키를 참조하는 테이블을 참조되는 테이블 또는 부모 테이블이라고 합니다. 외래 키를 사용하여 데이터의 무결성을 보장하고 관계형 데이터베이스에서 테이블 간의 관계를 표현합니다."