MySQL Naming Convention (번역)

PEPPERMINT100·2022년 8월 7일
1

서론(필자)

개인적으로 변수, 메소드의 네이밍에 굉장히 신경을 쓰는 편이다. 네이밍 하나가 그 변수와 메소드의 모든 것을 나타내줄 수 없다는 것은 알지만, 3일 후 이 코드를 다시 보는 나에게 지금 네이밍 하는데 들어가는 시간과 노력은 가치가 있다.

위 도표를 보면 너무나 많은 공감이간다. 내가 수긍못할 기능 구현하기라니 진짜 미쳤다 이름 짓기는 그 중에서도 가장 자주 만나게 되고 가장 많은 시간을 소요하게 되는 업무이다.

업무 할때는 변수이름으로 20분 고민하는 일도 있었고, 나름 어렸을 때부터 영어에 자신이 있었지만 네이티브 수준은 아니기에 고민해도 답이 안나오면 사내 네이티브 급으로 영어를 구사하는 직원에게 꼭 물어봐서라도 좋은 답을 내려고 한다.

하지만 가장 좋은 것은 어떤 정해진 규칙이다. 클린 코드를 공부할 때 너무 좋았던게 고민이라는 과정 자체를 없애주는 점이었다. 고민하는 것도 가치있는 일이지만 어느 순간부터는 고민의 효율이 떨어지고 시간이 아까운데, "클린 코드는 이런 상황엔 이렇게 코드를 작성하라" 라고 알려주었기에 많은 시간을 아끼며 좋은 코드를 작성할 수 있었다.

최근 새로운 스키마를 생성할 일이 많았는데, 기존 회사에서 유지해오던 네이밍이 맘에 들지 않은 부분이 많이 있었고 앞으로는 개선하고 싶었다. 하지만 필자도 DB의 네이밍 컨벤션에 대한 지식은 부족했다고 느껴 구글링을 통해 찾은 문서를 번역, 기록하여 앞으로 참고해보려 한다.

참고로 글의 순서는 유지하지만 내용은 의역을 살짝 더했습니다. - 미드 12년차 -

기본

  • 소문자를 사용한다. 실수할 일이 적고 MySQL은 대소문자를 구분하기에 통일해준다.
  • Space 즉 띄어쓰기는 Underscore _ 로 대체한다.
  • 숫자는 허용하지 않는다.
  • 컬럼의 의미를 설명가능한 이름이며 64자를 넘지 않는다.
  • prefix를 사용하지 않는다.

데이터베이스 이름

  • 단수형, 복수형 모두 사용할 수 있지만 데이터베이스 자체가 1개의 데이터들의 모음을 나타내게 되므로 단수형이 옳다.

  • 가능한한 prefix는 피한다.

테이블 이름

  • 소문자를 사용한다. 대소문자를 구분하는 리눅스 서버 위에 보통 MySQL을 호스팅한다. 또 MySQL과 함께 사용되는 많은 프레임워크들(php, JPA)이 자동 생성해주는 테이블이름은 소문자를 사용한다.

  • 테이블 이름은 단수형이다. 여러 형태의 데이터를 담고 있는 것이 테이블이라서 복수형이 될 것 같지만 테이블 자체는 하나의 독립체이다.

  • prefix를 사용한다. 테이블은 일반적으로 데이터베이스 혹은 프로젝트의 이름을 가지고 있다. 한 데이터베이스 내에서도 비슷한 역할을 하는 테이블이름이 겹칠 수 있으므로 테이블이름에 prefix를 사용할 수 있다.

필드 이름(컬럼명)

  • 소문자 사용, 띄어쓰기 금지, 숫자 사용 금지, prefix 금지
  • 짧아야 한다. 2개 단어를 넘지 않는다.
  • 이해하기가 쉬워야한다.
  • 기본키는 id 혹은 <table_name>_id의 형태를 따른다.
  • 단어를 거꾸로 쓰는 일은 피하자(date_signup(x), date_create(x), signup_date(o), created_date(o))
  • 컬럼명과 테이블이름을 동일하게 하는 피한다.
  • 축약형, 연결형, 두음형은 피한다.
  • 외래키를 사용한다.
  • 외래키 컬럼명에는 참조하는 테이블의 이름을 사용한다.

결론

테이블 이름과 데이터베이스는 간단하지만 디자이너와 개발자가 이해하기 쉽도록 만들어야 한다. 그렇지 않으면 다른 테이블과 연동하여 사용할때 헷갈릴 수 있다. 또 테이블이름과 데이터베이스 이름은 프로그래밍 언어와 여러 프레임워크들이 읽을 수 있도록 작성되어야 한다.

profile
기억하기 위해 혹은 잊어버리기 위해 글을 씁니다.

0개의 댓글