티스토리 뷰

제1정규형 (1st normal form)

 

 

[수강등록현황 table]

회원번호 회원이름 프로그램
101 강호동 스쿼시초급
102 손흥민 헬스
103 김민수 헬스

위 테이블에서 프로그램에 데이터를 추가할려면 어떻게 해야할까?

 

[수강등록현황 table]

회원번호 회원이름 프로그램
101 강호동 스쿼시초급
102 손흥민 헬스
103 김민수 헬스, 골프초급

위처럼 처리해도 되지만 프로그램이 많다는 가정하에 보기도 어려울 뿐더러 효율성에서도 굉장히 떨어지게된다.

 

 

 

[수강등록현황 table]

회원번호 회원이름 프로그램
101 강호동 스쿼시초급
102 손흥민 헬스
103 김민수 헬스
103 김민수 골프초급

 

위처럼 하나의 컬럼에는 하나의 데이터만 들어가게 하는것을 1 정규화라고 칭하고 효율성이 제일 좋다

 

 

제2정규형 (2nd normal form)

 

 

[수강등록현황 table]

회원번호 회원이름 프로그램 가격 납부여부
101 강호동 스쿼시초급 5000 0
102 손흥민 헬스 6000 1
103 김민수 헬스 6000 1
103 김민수 골프초급 8000 0

위와 같은 테이블에서 헬스의 가격이 7천원으로 수정이 되었다 그럼 데이터가 1만개라고치면 1만개중 다찾아서 수정을 해줘야한다 그래서 제2 정규화인 테이블을 분리시켜주는 작업을하자 여기서 테이블을 나누는 기준은 이 테이블과 관련이 없는 컬럼을 밖으로 빼낸다거나 가격은 프로그램에 관한 데이터이기때문에 가격을 제거해도 되겠다라고 생각한다.

(프로그램만 검색하면 가격은 따라오면 되겠다고 구상을하는것이다.)

 

 

 

[수강등록현황 table]

회원번호 회원이름 프로그램 가격 납부여부
101 강호동 스쿼시초급 5000 0
102 손흥민 헬스 6000 1
103 김민수 헬스 6000 1
103 김민수 골프초급 8000 0

[프로그램 table]

프로그램 가격
스쿼시초급 5000
헬스 6000
골프초급 8000

그래서 위와같이 가격컬럼이사라지고 프로그램 table을 생성하여 프로그램 이름과 가격만 있는 테이블을 생성하게된다.

 

장점으론 헬스가격 조정지 프로그램 테이블에있는 헬스의 가격만 수정하면 모든 값이 바뀌게 될것이다

단점으론 join문을 이용하여 다른테이블을 참조해야하기때문에 쿼리문이 복잡해진다.

 

partial dependency

 

partial dependency란? 

데이터베이스 설계에서 정규화는 중복을 제거하고 데이터의 무결성을 보장하기 위해 사용되는 프로세스입니다. 정규화 과정에서 다양한 종류의 종속성이 발생하는데, 그 중 하나가 부분 종속성(Partial Dependency)입니다.

 

composite primary key라는게 있는데 primary key는 행을 서로 구분할 수 있는 유니크한 데이터를 담고 있는 컬럼이다 근데 가끔은 하나의 컬럼만으로 primary key를 정할 수 없는 경우가 있습니다.

[수강등록현황 table]

회원번호 회원이름 프로그램 가격 납부여부
101 강호동 스쿼시초급 5000 0
102 손흥민 헬스 6000 1
103 김민수 헬스 6000 1
103 김민수 골프초급 8000 0

 

▲ 위의 테이블에선 (회원번호 + 프로그램) 이렇게 조합해야 primary key 역할을 수행할 수 있습니다.

'회원번호' 만으로 primary key 역할은 불가능합니다.

'프로그램' 만으로 primary key 역할은 불가능합니다. 

근데 두개 합치면 primary key 역할 가능 

두개 컬럼을 합친 primary key를 composite primary key 라고 합니다. 

 

2. composite primary key 중에 하나의 컬럼에만 종속되어 있는 다른 컬럼을

partial dependency가 있다고 표현합니다. 

 

 

[수강등록현황 table]

회원번호 회원이름 프로그램 가격 납부여부
101 강호동 스쿼시초급 5000 0
102 손흥민 헬스 6000 1
103 김민수 헬스 6000 1
103 김민수 골프초급 8000 0

 

▲ 예를 들어 위의 테이블에서 보면 '가격' 컬럼은 '프로그램'에 따라서 결정될 뿐 '회원번호'과는 상관이 없습니다. 

그 경우 가격 컬럼은 partial dependency가 있다고 표현합니다. 

 

 

3. partial dependency가 있는 컬럼을 다른 테이블로 빼면 제2정규형 테이블 완성입니다. 

그래서 위의 예시의 '가격' 컬럼을 다른 테이블로 빼는 것입니다. 

 

[수강등록현황 table]

회원번호 회원이름 프로그램 가격 준비물
101 강호동 스쿼시초급 5000 라켓
102 손흥민 헬스 6000 없음
103 김민수 헬스 6000 없음
103 김민수 골프초급 8000 골프채

 

Q1. 위 테이블에서 '준비물' 컬럼은 partial dependency가 있을까요 없을까요?

있습니다. 

composite primary key 중 하나인 회원번호에 종속 X

composite primary key 중 하나인 프로그램에 종속 O

그래서 제2정규형 만들려면 다른 테이블로 빼야합니다.

 

 

 

 

[수강등록현황 table]

회원번호 회원이름 프로그램 가격 돈납부여부
101 강호동 스쿼시초급 5000 0
102 손흥민 헬스 6000 1
103 김민수 헬스 6000 1
103 김민수 골프초급 8000 0

 

Q2. 위 테이블에서 '돈납부여부' 컬럼은 partial dependency가 있을까요 없을까요?

없습니다. 

composite primary key 중 하나인 회원번호에 종속 X

composite primary key 중 하나인 프로그램에 종속 X

하지만 (회원번호 + 프로그램)에 종속 O 입니다. 

그래서 제2정규형 만들려고 다른 테이블로 뺄 필요는 없을듯요 

 

(팁) 종속관계 판단이 어렵다면 하나의 컬럼을 다른 값으로 바꿔보십시오.

그 경우 다른 컬럼도 변경되어야한다면 그 관계를 종속관계라고 합니다. 

 

 

정리 

내가 db데이터를 이용하여 102번의 프로그램 금액을 찾고싶을때를 상상해보면  회원번호와 프로그램만 있으면 프로그램과 가격만 있는 테이블을 참조하여 조회가 가능할거 같으니 다른 테이블로 뺀다 생각하려한다.

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함