담비의 개발블로그

국비지원교육 49일차(10주차&DB-ERD, 정규형) 본문

국비교육

국비지원교육 49일차(10주차&DB-ERD, 정규형)

담비12 2024. 1. 22. 14:31

sql배운 내용들을 복습하고 erd에 대해서 배웠다.

 

 

 

ERD의 기본구성이다.

 

https://www.erdcloud.com/

 

ERDCloud

Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.

www.erdcloud.com

 

 

 

이 사이트에 들어가서 회원가입후 로그인을 진행하고

한개의 파일을 만든다.

 

 

휴지통 버튼을 사용하면 행이 사라진다

칸마다 입력하고 싶다면 더블클릭후 꼭 엔터를 눌러줘야한다.

 

 

메모를 입력하고 싶다면 저 표시를 사용하면 된다.

 

관계설정을 원하면 이중에 본인이 사용할걸 클릭후 연결해주면 된다. 

 

 

 

관계설정을 하면 이렇게 작성된다. 관계 설정을 해줄 때 비-식별 관계를 클릭해주면 된다.

그리고 사원 테이블에 분홍색 키가 생성이 된다.

 

 

 


 

 

정규형

정규형(Normal Form)은 데이터베이스의 설계를 평가하고 개선하는 방법론 중 하나로, 데이터의 중복을 최소화하고 데이터의 무결성을 보장하기 위한 목표를 가진다는 점에서 중요하다.

 

정규형과 정규화는 다른 말이다. 정규형을 위해서 정규화를 하는 것이다. 정규화는 정규형을 위한 과정이다.

 

 

제1정규화(1NF): 모든 속성이 원자적인 값을 가져야 하며, 즉, 복합 속성, 다중값 속성, 중첩된 관계 등이 없어야 한다.

서브웨이라는 테이블이 있다고 하자. 

서브웨이는 빵종류, 패티종류, 사이드, 야채 등등을 칼럼(속성)이라고 한다.

메뉴이름 빵종류 패티종류 사이드 야채
에그마요 1번빵, 2번빵,3번빵 미트볼, 닭가슴살, 베이컨, 에그 라즈베리칩쿠키, 치즈쿠키 양상추, 양파, 토마토

이 야채라는 칼럼 안에 양파, 토마토, 올리브 등등이 있는데 이런것들이 ","로 나누어지지 않고, 단 한개의 값을 가져야  한다는 말이다.

야채
1 양상추
2 양파
3 토마토

 

 

 

 

제2정규화(2NF): 부분 종속성이 없어야 한다. 반복되서 적히는 모든 것을 다른 테이블로 관리한다.

 

예를 들어 '주문'이라는 테이블이 있다면 , 이 테이블의 속성이 '주문번호', '고객ID', '상품ID', '고객이름', '상품이름', '주문수량'으로 구성되어 있다고 한다. 이때 '주문번호'와 '상품ID'가 복합키라고 하면, '고객이름'은 '고객ID'에, '상품이름'은 '상품ID'에 각각 종속되므로 이 테이블은 제2정규형을 만족하지 않는다.

주문번호 고객ID 상품ID 고객이름 상품이름 주문수량
154 user12 sub1 name1 name_1 2


이를 제2정규형에 맞게 수정하려면, 부분 종속성을 제거해야 한다. '고객' 테이블('고객ID', '고객이름')과 '상품' 테이블('상품ID', '상품이름')을 따로 만들고, '주문' 테이블에서는 '주문번호', '고객ID', '상품ID', '주문수량'만을 남겨두는 것이다. 이렇게 하면 각 테이블이 제2정규형을 만족하게 된다.

 

고객테이블

고객 id 고객이름
user12 name1

 

주문테이블

주문번호 고객ID 상품ID 주문수량
154 user12 sub1 2

 

 

번외)

부분 종속성이란, 복합키(두 개 이상의 속성으로 구성된 키)의 일부분에만 종속되는 속성의 존재이다. 즉, 테이블의 기본키가 복합키일 때, 그 복합키의 일부 속성에만 종속되는 속성이 있으면 그것을 부분 종속성이라고 한다. 예를 들어, 학생ID와 과목ID가 복합키인 테이블에서, 학생 이름이라는 속성이 학생ID에만 종속되어 있다면, 이는 부분 종속성을 가지고 있다고 볼 수 있다. 

 

 

 

제3정규화(3NF): 제2정규형을 만족하면서, 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않아야 한다. 서로 연관이 없는 것을 다른 테이블로 관리한다.