일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- convention
- 네이밍
- 외래키
- project euler
- 파이썬
- mysql
- lower_case_table_names
- list comprehension
- SUM()
- 세그먼트 트리
- 딕셔너리
- BOJ
- datetime
- ceil
- SUM
- floor
- Codeforces
- 2557
- 리스트 컴프리헨션
- 자료구조
- FOREIGN KEY
- 에라토스테네스의 체
- flask
- 큰 수 나누기
- Dictionary
- enumerate
- timestamp
- python
- itertools
- 소수
- Today
- Total
늒네 기록
[mysql] 테이블 네이밍 컨벤션 본문
테이블 이름을 짓는 것에 대한 논의가 수없이 많다는 걸 검색해보면서 알았다. 예를 들어, 이 링크. 대표적인 이슈들은 다음과 같다.
1. 테이블, 칼럼 이름을 복수형(plural)으로 할 것인가, 단수형(singular)으로 할 것인가?
2. 테이블 이름 대문자? 파스칼 케이스(PascalCase)? 카멜 케이스(camelCase)? 스네이크 케이스(snake_case)?
3. 줄임말 사용? (위에 걸어둔 링크에 나온 예시처럼, Cus_AddRef. What on earth is that? Custodial Addressee Reference? Customer Additional Refund? Custom Address Referral?)
몇몇 자료들을 보면서 내린 결론은, 일단 본인 편한 컨벤션 하나 잡고 DB 관리할 때 일관되게 적용해야 한다는 것, 그리고 이후 개발에 불편을 줄만한 문법은 피해야 한다는 것.
나는 우선 아래의 컨벤션에 정착하려고 한다.
1. 테이블, 칼럼 이름들은 전부 단수형. 이렇게 하면 아래의 이점이 있다.
- B 테이블에서 A 테이블을 참조할 때, id 앞에 붙이는 테이블 이름과 실제 테이블 이름이 동일하다. 예를 들어, Customer 테이블을 다른 테이블에서 참조할때 CustomerID 와 같이 사용하면 된다. Customers 테이블 참조를 CustomerID 로 하고싶지 않았던 것.
- 어떤 명사들은 복수형/단수형 구분이 없을 때도 있고, -s 가 아니라 -es 붙일 때도 있고, ... 이런 고민을 하지 않아도 된다.
2. 테이블 이름 및 칼럼 이름 파스칼 케이스 사용. 개인 취향은 스네이크 케이스인데, 여러 문서들을 읽어보니 + 추후 개발을 어떻게 할지 생각해보니 언더스코어(_)는 필요한 순간들을 위해 남겨놓는 것이 더 좋아보인다. 예를 들어, NamingConvention이라는 테이블이랑 Table이라는 테이블의 다대다 관계를 저장해두는 테이블을 만든다고 할때, 두 테이블 이름을 구분할 때 NamingConvention_Table 같이 언더스코어를 활용하면 좋을것 같다는 생각이 든다. 만약 스네이크 케이스였다면 naming_convention과 table을 언더스코어로 구분할 수 없을 것이고, 그러면.. 뭘 써야 할지 고민하고 싶지 않아서 그냥 카멜 케이스를 쓰기로 했다.
3. 줄임말 사용하지 않을 것. 위에 있는 예시만 봐도 극혐이다.
--
하지만 앞서 말한 컨벤션에 정착하려다가 시련이 찾아오는데...
'DB 공부 기록 > mysql' 카테고리의 다른 글
[mysql] 테이블 네이밍 컨벤션 2, lower_case_table_names (0) | 2020.09.20 |
---|---|
[mysql] foreign key, 외래키 설정은 꼭 해야 하는가? (0) | 2020.09.08 |
[mysql] CURRENT_TIMESTAMP(), 생성시간 자동 기록 (0) | 2020.05.16 |
[mysql] 관계 테이블 네이밍 (1) | 2020.05.16 |