[DB] 03. DB 설계시 궁금점
db를 설계하며 그때 그때 생긴 궁금점과 궈니가 제시해준 해결방안을 정리해놓았다.
1.
사용자에게는 email 값을 받고 db 저장은 email? 아님 키값인 uesr_idx?
- 정답은 user_idx! 괜히 키값을 사용하는 것이 아니다.
- 입력받은 email을 통해 비지니스 로직을 통해 user_idx를 찾고 그 값을 저장시켜야한다.
2.
출석포인트-총점은 유도속성인데 별도의 필드 만들어야할까. 아니면 그때마다 계산하도록 해야할까
- 정답은 그때마다 계산하도록 한다! db에 칼럼을 추가한다는 것은 생각보다 메모리를 많이 잡아먹는 행동이다. 유도속성은 가능한한 별도의 필드를 만들지 않는다! 비지니스 로직으로 처리하자!
3.
이벤트당첨자 테이블은 별도의 테이블로 만드는것이 맞는지. 당첨자 추가될때마다 칼럼 하나씩 만들어지는데 메모리 괜찮아?
- m:n 관계라면 무조건 새로운 테이블을 만드는 것이 맞다! 이론상으론 알지만 실무에 적용할려하면 고민하는데 생각 똑바로 하자!
4.
외래키+외래키=새테이블의 기본키 구조도 테이블명_idx가 필요할까?
- 필요하다! 예를들어 스트레칭+회원=찜테이블에서 찜만 보고싶다면? 그 인덱스키는 어떻게 해야해? 이럴때 찜_idx가 필요하다!
5.
각 테이블마다 title, contents 칼럼이 많이 등장하는데 변수명만 보더라도 어떤 테이블의 변수인지까지 알기위해 테이블명_title, 테이블명_contents로 지어줘야할까..?
6.
writer의 경우 각각의 글의 작성자이다. 하지만 이 값은 user테이블의 user_idx값을 외래키로 갖는다. 이 경우, 외래키로 사용되는 테이블에서 (ex 공지사항) 칼럼명을 writer 로 해야할까 user_idx로 해야할까? 물론 값은 user_idx를 넣을 것이다.
7.
관리자페이지는 오직 관리자만 드나들수 있다. 이를 위해 항상 user테이블에서 if 문을 들고다니면 수많은 유저 중 관리자인지 판단해야할까? 관리자유저의 별도 테이블을 만들어야할까?