21.02.03

민주·2021년 2월 3일
0

[정규화와 역정규화]

- RDBMS 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스
- 정규화는 이상현상을 최소화 하기위해 하나의 테이블을 여러개로 쪼개는 작업이다.
- 하지만 지나친 정규화는 쿼리를 복잡하게 만들고 성능을 저하시킨다.
- 굳이 쪼개질 필요가 없는 테이블들을 합쳐놓는것이 역정규화이다.(DB구조를 바꾸는건 최후의 수단이다)
- 자료 중복으로 인해 이상현상이 발생 할 수 있어 이를 최소화 하는 것이 정규화의 목적
	- 삭제이상 : 원치 않는 데이터도 삭제
	- 삽입이상 : 원치 않는 데이터가 삽입
	- 갱신이상 : 데이터 일부만 갱신
- 정규화과정은 총 여섯과정이지만 실무에서는 3정규화까지만 사용한다.
- 각 정규화는 이전단계들을 기본적으로 모두 만족해야한다.
  1. 1NF(1정규화)
  • 모든 항목에 값이 있어야 하며(NOT NULL), 중복열이 없어야 한다.
  • L(논리적설계) ,P(물리적설계) -> 논리적설계가 먼저!
  • NULL이있고 중복되는 데이터가 있을 경우 테이블을 쪼개준뒤 비식별관계로 연결시켜 준다.
  • 위에서는 테이블을 쪼개준 뒤 회원정보의 기본키를 외래키로 받아왔다.
  • NULL이 있다고 무조건 1정규화를 시키는 것은 아니다.
    - 필연적으로 NULL이 생길수 밖에 없는 경우도 있다.
  1. 2NF(2정규화)
  • 개체의 속성이 한 식별자에 종속 되어야 한다.
  • 이를 부분 함수적 종속제거라고 한다.
  • no는 고유하다 하더라도 과목때문에 중복이 등장하므로 기본키가 될수 없어 복합키 사용
  • 이 경우 no자체가 고유한 키가 될 수 있도록 테이블을 분리해준다.
  • 번호와 과목을 복합키로 만들어 주었다.
  • 지점의 기본키인 번호를 지점별과목에서 외래키로 받아왔다.
  1. 3NF(3정규화)
  • 하나의 키(A)의 내용으로 인해 다른 키(B)의 내용이 결정되는 경우를 이행함수 종속성이라고 한다.
  • A가 변경되면 B까지 변경되어야한다.
  • 위의 불편을 감소시키고자 다른 테이블에서 참조해서 가져올 수 있도록 테이블을 쪼갠다.
  • 테이블을 쪼갠뒤 월드컵우승국가의 기본키를 참여국가정보에서 외래키로 받아왔다.

[ERD 설계]

  • 테이블에 들어갈 값과 제약조건 연간관계를 정의하는 것을 모델링이라고 한다.
  • 모델링 한 설계 도면을 우리는 ERD라고 한다.

    1. 회원가입은 id, 비밀번호, email, 이름을 입력하여 진행 한다.
    2. 선택적으로 프로필을 등록할 수 있다.
    3. 프로필 등록에는 다니는 학교와 회사를 입력해야한다.
    4. 글을 작성 할 수 있다. 간단한 멘트를 남길 수 있다.
    5. 이 글에는 등록날짜, 조회수, 좋아요 숫자를 보여준다.
    6. "좋아요"는 로그인한 회원이 게시글 별로 한번만 가능하다.
    7. 해당 글에는 댓글을 달 수 있다.

    1. 회원을 일반회원과 판매자 회원이 있다.
    2. 일반회원은 아이디, 비밀번호, 배송지주소, 연락처 필드가 있다.
    3. 장바구니 테이블은 판매 품목에서 장바구니에 담은 아이템들을 넣는다.
    4. 장바구니에서 구매한 목록은 구매 테이블에 추가된다.
    5. 구매 테이블에는 사용자아이디, 물품아이디, 물품이름, 가격, 구매날짜 등이 저장된다.
    6. 판매 품목에는 품목아이디, 품목이름, 가격, 판매자아이디, 소속 카테고리가 존재한다.
    7. 판매 품목에는 대분류,중분류,소분류를 가지고 있다.
    8. 카테고리는 대분류,중분류,소분류를 고를 때 마다 해당 분류의 물품이 바로 나타나야한다.
    9. 판매 품목은 판매자 회원이 올릴 수 있다.
    10. 판매자 회원은 아이디,비밀번호,계좌번호 필드가 있다.
    11. 판매자는 본인이 판매한 물품들과 매출을 계산 할 수 있어야한다.
    12. 판매품목에는 구매후기가 달린다.
profile
개발이좋아요

0개의 댓글

Powered by GraphCDN, the GraphQL CDN