늒네 기록

[mysql] 테이블 네이밍 컨벤션 본문

DB 공부 기록/mysql

[mysql] 테이블 네이밍 컨벤션

jaeha lee 2020. 5. 16. 00:22

테이블 이름을 짓는 것에 대한 논의가 수없이 많다는 걸 검색해보면서 알았다. 예를 들어, 이 링크. 대표적인 이슈들은 다음과 같다.

 

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. 줄임말 사용하지 않을 것. 위에 있는 예시만 봐도 극혐이다.

 

--

 

하지만 앞서 말한 컨벤션에 정착하려다가 시련이 찾아오는데...

[mysql] 테이블 네이밍 컨벤션 2, lower_case_table_names

반응형
Comments