위의 데이터베이스를 깔끔하게 설계하려면 어떻게 해야 하는가?
데이터베이스에는 정규화라는 사고방식이 있다.
정규화란 데이터의 반복을 없애는 것이다.
冗長(ゆうしょう) 용장, 장황, 말이나 글이 쓸데없이 긺.
排除(はいじょ) 배제, 제거
상품C의 단가는 10이다.
상품의 단가는 누가 구매해도 10이기 때문에, 여기에 정보를 보존하게 하는 게 아닌,
持たせる(もたせる) 가지게 하다. 보존하다. 부담시키다.
상품테이블에 따로 관리하는 게 좋은 설계가 된다.
이처럼 데이터의 반복을 없애는 것이 정규화이다.
정규화를 하기 위해서는 올바른 절차대로 진행할 필요가 있다.
手順を踏む(てじゅんをふむ)절차를 밟다.
https://proengineer.internous.co.jp/content/columnfeature/6480
참조
정규화의 방법은 위와 같은 순서대로 진행한다. 추이 종속, 완전 종속이라는 이상한 말도 나옴.
推移従属(すいいじゅうぞく) 추이종속
단어들을 자세히 기억할 필요는 없다.
간단히 이정도만 알면 된다.
횡방향(よこ)의 반복을 없앤다.
종방향(たて)의 반복을 없앤다.
이 투 스텝으로 진행하면 어떻게 될지 확인해보겠다.
파란색 부분을 집중해서 보면, 상품명, 단가, 수량이 가로 방향으로 반복되고 있다.
아래와 같이 반복될 수 있도록 한다.
주문번호 1번이 세로로 되어 있다.
상품 3개 구매 이력이 있다.
이것으로 가로 방향의 반복을 없앴다.
가로 방향의 반복을 없앴지만, 세로로 반복이 발생한다.
어떤 종목이 반복을 일으키는지 확인해보니, 항목이 회색으로 되어 있는 부분이다.
주문번호, 주문일, 유저명, 발생처주소, 유료구분, 합계금액 등이 세로로 되어있다.
주문번호 1번은 상품을 3개 구매해서 3열으로 되어 있다.
3열의 데이터는 거의 같은 데이터가 반복되고 있다.
다른 부분은 파란색 부분 상품명, 가치, 수량 뿐이다.
세로부분의 반복을 없애기 위해서는 파란 부분을 따로 뺀다.
파란 부분은 구입이력명세로 작성할 수 있다.
주문번호를 Key로 관련되어있다.
紐付く(ひもづく) 관련되어있다.
세로의 반복을 없애기 위해 1:n 관계 테이블을 만든다.
이렇게 보면 세로의 반복이 아직 많이 있다.
세로를 봐서 반복을 찾아보자.
첫번째는 파란색 부분이다.
유저의 정보가 반복되고 있으므로, 정규화해보도록 하자.
세로의 정보를 정규화하기 위해서는 1:N 테이블로 변환하자.
파란색 부분은 유저 테이블로 분리한다.
빨간 부분의 상품도 반복되므로 상품 테이블로 분리한다.
이런식으로 정규화가 된다.
유저데이터와 구입이력은 1:N
상품데이터와 구입이력상세는 1:N
제1정규화는 가로의 반복을 없앤다.
제2정규화는 세로의 반복을 없앤다.
제3 정규화로써 송료구분도 세로로 반복되기 때문에 별도 테이블로 나눈다.
제2, 제3 정규화는 세로 방향의 반복을 없애는 건데 무슨 차이가 있는 건가?
추이종속에 관련이 있는가 없는가 이다.
신경쓰지말고
횡, 종의 반복을 없애라.
가로의 반복은 세로로 정렬하는 걸로 해결
세로의 반복은 1:n테이블로 분리하는 걸로 해결
[SEOMARU]データベース設計入門#3 テーブル設計の手順【実戦形式で解説】 테이블 설계의 순서 (0) | 2023.11.30 |
---|---|
[SEOMARU] データベース設計入門#1 リレーションとER図 데이터베이스 입문 (2) | 2023.11.21 |
テスト工程入門!単体テスト・結合テストの違いや仕様書の書き方 (0) | 2023.11.17 |
単体・結合・統合テストの違いを解説(단체, 결합, 통합테스트의 차이점?) (0) | 2023.11.17 |
SQL 인젝션 SQL이란?インジェクション【サイバー攻撃&対策】 (0) | 2023.03.25 |
댓글 영역