MySQL은 레코드 타입에 대해 암묵적인 캐스팅을 지원한다.


 가령 Int형 칼럼에 “12345"로 입력하거나, char형 칼럼에 9999와 같이 입력해도 Int형 칼럼에는 12345가, char형 칼럼에는 “9999"가 입력된다.


 이는 컨버팅 가능한 형에 제한하며 가령 Int형 칼럼에 “amanda"를 입력하면 0으로 삽입된다. 


 그 외 내장으로 Convert(), Cast() 와 같은 함수들이 있는데 이 함수들은 주로 String 데이터의 Character set 및 인코딩 간 캐스팅을 담당한다.


 단순한 내용이지만, 프로그램 구조를 잡을 때 알아두면 편한 경우가 있고,  묵시적 캐스팅을 몰랐다가 CS를 일으키는 경우가 있다. DB 커넥터 쪽에서 에러를 뱉지 않기 때문에, 에러 로그없이 자동 캐스팅으로 인한 문제라도 생겨버린다면 낭패일 수 있다. (물론 그런 경우는 흔치 않다.)


LINE 에서 근무하고 있는 초보 개발자입니다.


많이 배우고, 거인의 어깨에 올라서고 싶습니다.


사랑하는 사람들과 행복하게 꿈꾸는 것이 인생의 목표입니다.


블로그에 오시는 분들 모두 서로 좋은 정보를 공유할 수 있는 공유의 장이 될 수 있었으면 좋겠습니다. :)


포지션 : 


 - 서버 개발자 + 클라우드 엔지니어



이력 : 

 -  ??? (2019 ~ 2020)

 -  LINE (2017 ~ 2019)

 - 前 삼성전자 (2015 ~ 2017)






 처음 학부생 때 공부를 위해서 혹은 실무에서 관계형 데이터 베이스를 접하고, 직접 설계하는 일은 쉽지 않다.

많은 DB 테이블들이 직관적으로 나타나있고 관계 역시 이해하기는 어렵지 않지만 이를 구성하고자 한다면 성능, 데이터의 정합성, 중복 배제 등 고려해야할 내용은 많다. 물론 그걸 다 잘하기는 매우 힘들며, 비즈니스 특성에 따라 트레이드 오프를 감안하여 작성하게 된다. ^^;;

 처음 DB 설계를 해보려는 이들에게 이번 정리 내용의 포스팅은 큰 도움이 될 수 있다.


 * RDB 설계 시작하기 5가지 단계


(1) DB의 목적을 명확히 한다. (Define the purpose of the DB)


(2) 수집한 데이터를 적절히 나눌 수 있는 기준이 될 Primary Key 를 구성한다.


(3) 테이블 간의 관계를 구상한다. 가장 쉬운 관계의 형성은 PK를 중심으로 생각하는 것이다. 


- One to many : Parent 테이블의 모든 value는 많은 Child table의 Record를 가질 수 있으나 Child table의 모든 Value는 Parent table에서 단 하나의 Record에 대응되어야 한다.


- Many to many : Many to many의 관계는 일반적으로 다수의 one to many 관계들로 이루어질 수 있어야 한다.


- One to one : 주로 동등한 레벨의 정보에 대한 Column 분리 용도로 사용된다.


(4) Refine and Normalize the Design(정규화)


 Column의 추가나 Optional data 처리를 위한 table 분리 등.


- 1NF : 기본적으로 필요한 속성들을 하나의 entity로 모아놓고 하나의 속성을 UID로 선정했다면 0NF 상태이고, 여기서 Repeating group을 제거하면 1차 정규화 형식이라 한다.


- 2NF : 속성들이 PK의 일부에 대해서만 종속적이라면 이 Part key dependency를 제거하여 2NF 형식이 된다.


- 3NF : 2NF에서 Key가 아닌 다른 속성에 종속적일 때 Inter-data dependency라 하며 이를 제거하면 3NF 형식이 된다.


- BCNF : Key 내의 속성이 key 내의 다른 속성에 종속적이라면 Inter-key dependency라 하며 제거하면 BCNF 형식이 된다.


(5) Denormalize : 순수히 성능만을 위한 기법이다.

- Comined table : 자주 조인하는 테이블의 경우 조인 성능부하를 없애기 위해 미리 Join된 형태로 table에 합침. 그럴 수 없는 경우 Join overhead는 Index나 SQL Plan을 조정한다.


- Derived data : 계산해서 얻을 수 있는 값을 굳이 칼럼으로 따로 빼준다.


- Artificial key : 적절한 PK가 없거나 인덱싱이 힘든 경우 간단한 AK를 만들어 해결하고 PK column은 일반속성화 한다. (예를들어 굳이 나뉘어져있지 않은 기수 번호를 인공적으로 Key로 만들어주어 부여하고 이를 인덱싱하여 성능을 개선한다.)


- Denormalization 의 예시. 유저 정보 테이블 id, name, address. 유저 성적 테이블 id, score. 두 테이블의 조인이 빈번하다면 두 테이블을 합칠 수 있음. Id, name, address, score.



 * 추가적으로 좀 더 자세한 설명이 필요하다면 다음 링크가 정말 잘 정리되어있다.  http://www.ntu.edu.sg/home/ehchua/programming/sql/relational_database_design.html




+ Recent posts