데이터베이스 정규화란 무엇인가요? #3
Replies: 8 comments
-
|
개인공부 0. 튜플, 속성, 릴레이션, 함수 종속성이란? [ 속성 ] [ 릴레이션 ] [ 함수 종속성 ]
기본질문 1. 데이터베이스 정규화는 무엇이며 왜 필요한가요? 데이터베이스 정규화(Normalization)란, 함수적 종속성 등과 같은 이론에 근거하여 테이블 간에 중복된 데이터를 줄이는 것입니다. 중복된 데이터를 허용하지 않게 함으로써 데이터의 무결성과 일관성을 향상시킬 수 있으며, 데이터베이스의 저장용량까지 확보하는데 도움이 됩니다. 데이터베이스를 정규화하지 않아 잘못 설계하게 되면 불필요한 데이터의 중복으로 인해 공간낭비와 부작용을 초래할 수 있는데, 이러한 부작용을 이상현상(Anomaly)이라고 합니다. 이상현상의 종류로는 삽입이상, 수정이상(갱신이상), 삭제이상이 있습니다.
해당 이상현상들이 발생하는 이유는 정규화가 되어 있지 않은 테이블의 설계때문입니다. 기본질문 2. 각 정규화 단계에 대해 간단히 설명해주세요. [ 제1정규형, 1NF ] [ 제2정규형, 2NF ] [ 제3정규형, 3NF ] [ BCNF정규형, Boyce-Codd NF ] [ 제4정규형, 4NF ] [ 제5정규형, 5NF ] 심화질문 1. 정규화는 무조건 좋은가요? 아니요. 과도한 정규화는 다음과 같은 단점들이 존재할 수 있습니다.
이처럼 지나친 정규화는 시스템 성능에 부정적인 영향을 미칠 수 있으며, 관리의 복잡성을 증가시킬 수 있습니다. 심화질문 2. 역정규화에 대해 설명하고, 어떤 케이스에 사용하면 좋을지 설명해주세요. 정규화의 단점과 같은 이유들로 인해, 역정규화라는 개념이 존재한다. 역정규화란, 비즈니스 요구 만족이나 성능을 향상시키기 위해 정규화된 데이터베이스를 의도적으로 정규화 수준을 낮추는 작업이다.
역정규화는 어느 경우에 필요할까?
|
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
1. 데이터베이스 정규화는 무엇이며 왜 필요한가요?데이터베이스 정규화는 데이터의 중복을 최소화하고 무결성을 유지하기 위해 테이블을 분해하는 과정입니다.
2. 각 정규화 단계에 대해 간단히 설명해주세요.데이터베이스 정규화제2정규화조건:
예시:
문제점:
2NF 수행: [학생]
[과목]
[수강성적]
제3정규화조건:
예시:
문제점:
3NF 수행: [직원]
[부서]
3. BCNF조건:
예시:[수강 테이블]
문제점:
BCNF 수행: [교수]
[수강]
심화질문 1. 정규화는 무조건 좋은가요?데이터 쓰기 작업에 유리하지만, 반대로 읽기 작업에는 불리합니다. 정규화 장점
정규화 단점
2. 역정규화에 대해 설명하고, 어떤 케이스에 사용하면 좋을지 설명해주세요.역정규화란?읽기 작업에 성능 개선을 위해 정규화 되어있는 아키텍처에서 데이터 중복을 허용하는 방식입니다. 정규화와 비정규화의 사용 기준정규화 기준:
역정규화 사용 사례:📌 예시 1: SNS 피드 및 커뮤니티 게시판
📌 예시 2: 데이터 웨어하우스(OLAP) 통계
|
Beta Was this translation helpful? Give feedback.
-
|
1. 데이터베이스 정규화는 무엇이며 왜 필요한가요?
이런 표가 있다고 하자. 영업부 02-111-1111 이 계속 반복된다. 영업부의 전화보호를 수정하려면 각 줄마다 일일이 수정해야 한다. 만약 수정을 잘못해서 영업부에 전화보호가 2개가 된다면 무결성 깨지게 된다. 표를 쪼깬다면.
이러면 영업부 옆에 전화보호를 중복해서 적을 일도 없고, 데이터가 서로 모순되는것도 막을 수 있다. 중복을 최소화하고, 데이터 무결성을 보장하기 위해 표를 잘 쪼개는 일이 정규화다. 2.각 정규화 단계에 대해 간단히 설명해주세요. 1NF : 한칸에는 하나의 값만
이러면 컴퓨터 입장에서 깔끔하지가 못하다. 데이터베이스는 칸 전체를 하나의 덩어리로 보기 때문이다. “선생님 그러면 한칸에 다 욱여 놓고 그 안을 뒤져서 찾게 하면 되는거 아니에요?” → 이런 조건을 추가해서 찾게 하는거 자체가 비용이 많이 발생한다. 따라서
이렇게 나눈다. 2NF : 키의 일부에만 딸린 정보는 따로 빼라.
성적은 학번과 과목코드 둘다 있어야 나오는 값이다. 하지만 학생이름은 학번만 알면된다. 따라서.
이렇게 나눈다. 키가 하나인 테이블은 자동으로 2NF 통과다. 3NF : 키가 아닌 다른 칸을 거쳐서 정해지는 정보는 따로 빼라.
부서는 직원이름을 알면 정해진다. 부서장은 부서를 알면 정해진다. 부서장은 부서에 딸린 정보지 직원명에 딸린 정보가 아니다.
이렇게 정규화 해준다. BCNF : 결정자는 반드시 그 표의 키여야 한다. 키도 아닌데 뭔가를 정하고 있으면 따로 뺀다.
각 교수는 특정 과목을 가르친다. 즉 교수는 결정자인데 키 가 아니다.
이렇게 나눠준다. |
Beta Was this translation helpful? Give feedback.
-
정규화는 무엇이며 왜 필요한가요?
삽입이상
갱신이상
삭제이상
정규화 과정1NF(모든 속성의 원자값)
2NF(부분 함수 종속성)
-> 여기서도 갱신이상이 발생할 것 같지만 fk 무결성 제약조건을 활용해 데이터베이스 엔진이 막아줌. 예시라서 간단하게 하긴했는데 실제로는 index 같은 요소를 pk로 해서 테이블을 설계하면 이런 일이 없을 것. 3NF(이행적 함수 종속성 제거)
BCNF(모든 결정자는 후보키)
4NF(다치 종속 제거)
5NF(조인 종속 제거)
심화 질문Q. 정규화는 무조건 좋은가요?
Q. 역정규화에 대해 설명하고, 어떤 케이스에 사용하면 좋을지 설명해주세요.
역정규화 기법
고려사항
|
Beta Was this translation helpful? Give feedback.
-
데이터베이스 정규화는 무엇이며 왜 필요한가요?1. 데이터베이스 정규화이상현상의 제거로 속성 간의 종속성이 독립된 릴레이션으로 표현되도록 분해하는 과정
2. 필요성데이터는 무결성이 보장되어야 한다. 그런데 이상현상이 발생한다면 무결성을 훼손시킬 수 있다. 따라서 릴레이션을 적절히 분해하여 즉, 정규화 과정을 통해서 데이터의 무결성을 보장시켜주어야 한다. 각 정규화 단계에 대해 간단히 설명해주세요.0. 스키마 변환 과정릴레이션을 분해하는 과정에서 스키마는 3가지의 원칙을 지키며 변환돼야 한다.
1. 제 1 정규형 (1NF)모든 속성은 하나의 값(원자값)만 가져야 한다.
2. 제 2 정규형 (2NF)부분 함수 종속이 제거된 1NF `부분 함수 종속`
Y가 X의 진부분집합에만 의존
(; 기본키가 복합키일 경우 기본키를 구성하는 속성 중 일부에 의존)
해당 테이블은 (이름,성별 -> 지역)의 관계를 가진다. 3. 제 3 정규형 (3NF)일반 속성에 의한 이행적 함수 종속을 제거한 2NF `이행적 함수 종속`
A->B, B->C 관계에 의해 결국 C가 A에 의존할 수도 있는 관계
(이때, B와 C가 일반 속성이라면 3NF를 위반한 것이다.)
학번->대학, 대학->전공의 관계를 가지는데 대학과 전공은 일반 속성이다. 4. Boyce-Codd 정규형 (BCNF)오직 후보키만을 결정자로 하는 3NF `후보키`
유일성과 최소성을 만족하는 키5. 제 4 정규형 (4NF)다중 종속을 제거한 BCNF `다중 종속`
A->>B 하나의 결정자로 2개 이상의 종속자가 정해지는 성질
학번 101에 의해 과목 자바, 운영체제 두개가 결정됨 5. 제 5 정규형 (5NF)조인 종속을 제거한 4NF `조인 종속`
분해하고 다시 합쳤을 때 원래와 똑같아 지는 성질
(조인 종속이 남아 있다 = 무손실 분해가 가능하다)정규화는 무조건 좋은가요?정규화는 데이터 무결성을 지키기 위해 필수적인 과정이다. 하지만 정규화로 분해된 테이블로 인해 조인 연산이 증가될 수 있고 이는 시스템 성능 저하로 이어질 수 있다. 또한, 개발자 입장에선 쿼리문의 복잡도가 증가하여 유지보수 차원에서 불리하게 작용할 수 있다. 따라서 성능저하와 무결성 사이의 Trade-off 가 요구된다. 역정규화에 대해 설명하고, 어떤 케이스에 사용하면 좋을지 설명해주세요.1. 역정규화의도적으로 데이터 중복을 허용하거나 재조정하는 과정 2. 사용 목적앞서 설명 했듯이 성능저하와 무결성 사이의 Trade off가 중요하다. 따라서 조인 연산의 증가로 성능 저하가 우려될 경우 역정규화를 수행하면 좋을 것이다. |
Beta Was this translation helpful? Give feedback.
-
데이터베이스 정규화는 무엇이며 왜 필요할까?데이터베이스에서는 이상현상이라는 현상이 존재한다. 튜플을 삭제하거나 삽입하거나 수정할 때 공유하는 데이터들이 독립적으로 존재해서 혼자서만 바뀌려고 하니깐 발생하는 문제이다. 이런식으로 데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생한다. 이러한 이상현상을 해결하는 과정을 정규화라 하고, 데이터의 중복을 최소화하고 데이터 무결성을 유지하기 위하여 정규화가 필요하다. 데이터베이스 정규화는 무엇이며 왜 필요할까?숫자가 높은 정규형은 낮은 숫자의 정규형을 기본적으로 만족한다. [제1정규형] 모든 속성 값이 하나의 값만 갖는 경우. 즉 원자값을 갖는 경우를 말한다. [제2정규형] 기본키가 아닌 속성이 기본키에 완전함수종속인 경우를 말한다. 예를 들어 ‘학생번호’와 ‘강좌이름’이라는 복합키가 모여 하나의 ‘성적’이라는 값을 결정하는데 ‘강의실’은 ‘학생번호’가 없어도 ‘강좌이름’이라는 하나의 키로만 결정될 수가 있다. 이렇게 복합키의 부분집합이 결정자인 경우를 부분함수 종속이라고 한다. 부분함수종속이면 이상현상이 일어나므로 강좌이름과 강의실을 분리하면 해결된다. [제3정규형] 비이행적 종속을 만족할 때 제3정규형을 만족 시킨다. 비이행적 종속에 반댓말인 이행적 종속이란, A→B, B→C 가 성립할 때 A→C까지 성립되어 버리는 함수 종속성을 의미한다. 예를들어
이와 같은 경우를 비이행적 종속이라 한다. 이 속성들을 독립적으로 만드는 것이 아니라 학번이 수강료를 참조할 수 있도록 만들면 3정규형이 된다. [BCNF 정규형] 우선, 후보키란 테이블에서 각 행을 유일하게 식별할 수 있게 해주는 속성의 집합이다. 예를 들어 학번과 특강이름이라는 속성이 교수를 결정하는 기본키라고 하자. 근데 교수도 특강 이름을 결정하여 결정자의 역할을 하게 된다. 학번,특강이름은 기본키이기 때문에 후보키이고 결정자이다. 하지만 교수는 특강이름이라는 속성에서만 결정자이지, 학번까지 결정하지는 못한다. 따라서 후보키가 될 수 없다. BCNF를 만족시키려면 특강신청 테이블(학번,교수) , 특강교수 테이블(특강이름,교수) 이렇게 테이블을 분리하면 된다. |
Beta Was this translation helpful? Give feedback.
-
→ 정규화는 테이블마다 중복된 데이터를 가지지 않게 하고 데이터가 논리적으로 저장되게 테이블을 분리하는것
→ 제 1정규화 (1NF): 테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는것
[예] 학생이 여러 과목을 수강할때 수강과목 컬럼에 C언어, Java처럼 여러 값을 한 번에 저장하 → 제 2정규화 (2NF): 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는것
[예] 한 학생이 여러 과목을 들을 수 있고 한 과목을 여러 학생이 들을 수 있다 제 2 정규화는 부분함수 종속을 없애기 위해 학생 이름은 학생 테이블로 과목이름은 과목 테이블로 분리 → 제 3정규화 (3NF): 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
[예] 학생 테이블에 학생 id, 학생 이름, 학과 id, 학과 이름이 있다 학과 이름은 학생 id에 직접 의존한다기보다는 학과 id에 의존한다 제 3정규화는 이런 이행적 종속을 없애기 위해 학과 이름을 학과 테이블로 분리한다 → BCNF: 3정규화를 만족한 테이블에서 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
[예] 수강 테이블에 학생 id, 과목, 교수가 있다 그런데 교수 - 과목 관계가 있다면, 교수는 과목을 결정하는 결정자 따라서 BCNF를 만족하지 않기 때문에 교수와 과목 정보를 따로 분리 → 제 4정규화 (4NF): BCNF를 만족한 테이블에 대해 다치 종속을 없애도록 테이블을 분해하는 것
[예] 학생이 여러 과목을 듣고 여러 동아리에 가입할 수 있다 학생 id → 수강과목 위와 같게 독립적인 다중 값이 생기므로 다치 종속 → 제 5정규화 (5NF): 4정규화를 만족한 테이블에 대해 조인 종속을 없애도록 테이블을 분해하는
[예] 상품, 공급자, 지역 정보가 하나의 테이블에 있다 상품-공급자, 공급자-지역, 상품-지역 테이블로 분리한다 |
Beta Was this translation helpful? Give feedback.




Uh oh!
There was an error while loading. Please reload this page.
-
📆 일자: 26년 6월 29일(월)
기본 질문
심화 질문
Beta Was this translation helpful? Give feedback.
All reactions