- 테이블명은 파스칼케이스(ex. TableName, UserInfo), 칼럼명은 카멜케이스(ex. columnName, userId)
- 쿼리문으로 얻을 수 있는 값들을 칼럼으로 만들지는 않았는지(좋아요, 찜 개수, 리뷰 개수 등등) 확인
- 모든 테이블에 구분자(id나 idx), createdAt, updatedAt, status 생성
- 연결테이블의 pk의 경우, 복합키(2개의 pk)가 아닌 별도의 독립적인 키를 만들어 pk(id or idx)로 만들어야 한다
- 모든 테이블의 기본키(id) 칼럼 데이터 타입은 BIGINT형을 사용하고 AI 설정하는 것이 좋다(칼럼의 개수는 무한히 많이 늘어날 가능성이 있기 때문)
- 음수를 사용하는 경우가 아니라면 int unsigned 타입을 선택(불필요한 공간을 최소화) 또한 int형일 때 null을 허용x
- 비밀번호의 경우 varchar(200)정도로 크기를 넉넉하게(비밀번호는 암호화되어 저장되기 때문에 넉넉한 크기로 잡아주는 것이 좋기 때문 / password123 -> (암호화)dnsakjn4j12#@fcjdsjn3kij41)
- 휴대폰 번호의 경우 varchar형을 사용. int로 하면 010에서 앞의 0이 짤림
- 이미지와 같은 미디어 파일은 URL을 통해 가져오기 때문에 TEXT Type을 사용
- 좋아요 수나 댓글 수 등은 쿼리문을 통해서 가져올 수 있으므로 칼럼으로 사용x
- 요즘은 DB공간이 충분하기 때문에 전반적으로 넉넉하게 크기를 잡는 것이 좋음(미래의 변수를 고려하여 넉넉히)
- Null, not Null 을 구분(필수값 or 옵션값)
- 참조관계의 경우, 1:1, 1:N, N:M을 제대로 설정하고 이에 맞게 테이블 구성 및 fk매칭
- 중복된 테이블이 존재하지 않는지, 하나로 합쳐도 되는 테이블이 있지는 않은지, 반대로 따로 테이블을 분리 시켜야하는데 하나로 합치지는 않았는지 확인
- '좋아요/싫어요'같은 경우, 좋아요 취소 같은 기능도 있어야 하기 때문에 싫어요와 분리
728x90
반응형
'🔻Back-End > Database' 카테고리의 다른 글
[MySQL] MySQL 5.7 다운로드 (0) | 2022.10.22 |
---|---|
[ERD] erdCloud에서 export (0) | 2022.10.22 |
[MySQL Error] Datagrip에서 Communications link failure 오류 (0) | 2022.10.06 |
[MySQL] ubuntu에서 MySQL 계정 새로 만든 후 권한 부여 (0) | 2022.10.06 |
[MySQL] 이것이 MySQL이다 7장 스터디 (0) | 2022.04.05 |