Modeling/UML

인프런 - RDBMS Modeling 실습 4일차 (챕터 7,8,9)

bluebamus 2023. 7. 7.

7. User 완성하기

1. admin, manager, user의 등급 관리를 위해 TB_UserLevelCode 테이블 생성

   - 이러한 테이블에서는 등급별 번호를 순차적으로 생성하지 않는다. 10번대 등의 범위로 사용한다.

   - 범위별 숫자를 pk로 사용하는 경우, 자동 증가 방식의 더미 pk를 사용하지 않는다.

   * 정렬 등의 유용한 사용 목적으로 나쁘지 않은 방법일거 같다. 충분한 범위를 고려할 필요가 있다. 

2. enum을 사용하면 어플리케이션에서 db의 pk와 매칭하기 편하다.

3. 모든 파라미터는 db 데이터를 전송하기 전에 기본값을 가지고 있어야 한다. 특히 null과 관련한 데이터는 null의 초기화가 없으면 자동으로 0이 들어간다.

4. 유사한 기능에 대해서는 class로 만들어 상속을 받아 나머지 다른 부분에 대해서만 처리하도록 한다.

8. 1:1관계를 가지고 사용자 속성 확장

1. 혈액형과 같이 특정하게 열거된 데이터 중 하나를 선택해야 하는 경우, 기준 테이블을 만들어 key로 선택하게 만든다

   - 이때 기준 테이블은 절대로 변하지 않는 데이터들로 구성되는 테이블이다.

   - django에서는 application에서 기준 데이터를 제어한다. DB가 중심이 될지 application이 중심이 될지가 핵심인데, DB 기준으로 설계를 하게 되면 join이 늘어나고, application을 기준으로 설계하면 DB만으로 데이터의 정의가 모호해질 수 있다. 이 점을 고려해야 할 것이다.

2. 1:1 테이블은 하나로 붙여도 되는 관련도의 데이터들을 관리 목적으로 분리한 것이다. 때문에 정의할 수 있는 필드가 한계가 있다.

3. 기준이 되는 중심 테이블의 컬럼이 계속 늘어나는 경우, 그룹을 지을 수 있는 컬럼을 묶어 1:1 테이블로 분리한다.

9. bit (boolean) 타입의 함정

1. TB_User 테이블에 Exam을 추가한다는 시나리오다.

   - 시험을 합격했다, 떨어졌다, 안봤다 세가지의 경우를 1,0,Null로 설정한다고 가정한다. 

   - boolean으로 해당 데이터를 가져오는 경우 Null은 인식이 안된다. 

   * 이것은 언어마다 틀리기 때문에 참고할 필요 있다.

   - 제일 좋은건 기준 테이블을 만드다 (분리할 수 있을 최대한 분리하라)

   - null 허용으로 두고 null은 시험을 안봤다, TB_Exam의 1번 key는 시험을 합격했다, 2번은 떨어졌다가 된다.

 

 

 

댓글