MongoDB의 명명 규칙은 무엇입니까?


188

데이터베이스, 컬렉션, 필드 이름과 같은 MongoDB entitites에 대해 선호하는 명명 규칙이 있습니까?

나는이 라인을 따라 생각하고 있었다 :

  • 데이터베이스 : 목적 (단어로 된 단어)으로 구성되고 "db"로 끝납니다. 모두 소문자 : imagedb, resumedb, memberdb 등
  • 컬렉션 : 소문자로 된 복수형 : 이미지, 이력서,
  • 문서 필드 : lowerCamelCase (예 : memberFirstName, fileName 등)

답변:


128
  1. 요약 : 작은 객체의 저장소 최적화 , SERVER-863 . 바보지만 사실입니다.

  2. 관계 데이터베이스에 적용되는 규칙과 거의 동일한 규칙이 여기에 적용되어야한다고 생각합니다. 그리고 수십 년이 지난 후에도 RDBMS 테이블을 단수 또는 복수로 명명해야하는지에 대한 합의는 여전히 없습니다

  3. MongoDB는 JavaScript를 사용하므로 camelCase의 JS 이름 지정 규칙을 사용하십시오.

  4. MongoDB 공식 문서에는 밑줄을 사용할 수 있다고 언급되어 있으며 내장 식별자도 지정되어 있습니다 _id(그러나 이것은 _id개인용, 내부 용, 절대로 표시되거나 편집되지 않음 을 나타냅니다) .


95
3과 4는 모순적입니다 .JS는 낙타를 선호하고 몽고는 밑줄을 선호하는 것 같습니다 ...하지만 의심스러운 경우 밑줄로 이동하십시오. 비 라틴 알파벳에 익숙한 사람들은 당신에게 감사 할 것입니다.
Matt Zukowski

1
단일 대 복수 토론에 대해서는이 질문을 참조하십시오 : stackoverflow.com/questions/338156/…
Jason

4
"JS가 낙타를 선호합니다"라고 말할지 모르겠습니다. JS 자체는 선호도가 없지만 대부분의 JS 프로그래머가 낙타 사례를 사용하는 경향이 있다고 말할 수 있습니다.
treeface

1
@treeface Matt은 JS의 내장 메소드가 모두 노드와 브라우저에서 모두 camelCase를 사용한다는 사실을 언급하고 있다고 생각합니다.
Luke Taylor

1
내장 식별자 _id에는 밑줄이 접두사로 붙여져 공통의 JavaScript 규칙을 따르며 이는 키가 내부 / 개인 키임을 의미합니다. 다시 말해, _id컬렉션의 데이터를 보는 모든 사람에게 편집 또는 제시하려는 의도는 없습니다.
Beau Smith

58

데이터 베이스

  • 낙타
  • 이름 끝에 DB 추가
  • 단수하다 (모음은 복수형이다)

MongoDB는 좋은 예를 말합니다.

사용할 데이터베이스를 선택하려면 mongo 쉘에서 다음 예제와 같이 use <db> 문을 발행하십시오.

myDB
사용 myNewDB 사용

https://docs.mongodb.com/manual/core/databases-and-collections/#databases의 콘텐츠

컬렉션

  • 소문자 이름 : 대소 문자 구분 문제를 피하고 MongoDB 모음 이름은 대소 문자를 구분합니다.

  • 복수형 : 복수의 대상으로 된 콜렉션을 레이블링하는 것이 더 분명합니다 (예 : "파일"이 아닌 "파일").

  • > 단어 구분 기호 없음 : 다른 사람이 잘못 단어를 구분하는 문제 (사용자 이름 <-> user_name, first_name <->
    이름)를 피하십시오. 이것은
    주변 의 몇몇 사람들에 의한 토론에 대한 것이지만, 주장이 컬렉션 이름과 분리되어 있다고 주장한다면 반드시 그렇게 생각해서는 안됩니다.;)
    밑줄이나
    낙타 를 추가하여 컬렉션 이름 의 가독성을 향상시키는 경우 name이 (가) 너무 길거나
    컬렉션
    분류 의 표준 인 기간을 적절하게 사용해야 합니다 .

  • 더 자세한 컬렉션을위한 점 표기법 : 컬렉션이 어떻게 관련되어 있는지에 대한 정보를 제공합니다. 예를 들어, 스키마를 디자인 한 사람들이 제대로 작업했다면 "users"를 삭제 한 경우 "users.pagevisits"를 삭제할 수 있다는 것을 합리적으로 확신 할 수 있습니다.

http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html의 내용

컬렉션의 경우 공식 MongoDB 설명서를 찾을 때까지 이러한 제안 패턴을 따르고 있습니다.


25

이에 대한 규칙이 지정되지 않더라도 일대일 관계에 대해 수동 참조 는 Mongo 문서에서 참조 된 콜렉션의 이름을 일관되게 지정합니다. 이름은 항상 구조를 따릅니다 <document>_id.

예를 들어 dogs컬렉션에서 문서는 다음과 같은 외부 문서에 대한 수동 참조를 갖습니다.

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

이것은 _id모든 문서의 식별자를 명명하는 Mongo 규칙을 따릅니다 .


1
나는 내 대답에 camelCase를 언급하지 않았으므로 사용할 것이다owner_id
danza

8

수집을위한 명명 규칙

컬렉션 이름을 지정하기 위해 몇 가지 예방 조치를 취해야합니다.

  1. 빈 문자열 (“”)이있는 컬렉션은 유효한 컬렉션 이름이 아닙니다.
  2. 콜렉션 이름의 끝을 정의하므로 콜렉션 이름에는 널 문자가 포함되지 않아야합니다.
  3. 컬렉션 이름은 접두사 "system"으로 시작해서는 안됩니다. 내부 컬렉션 용으로 예약되어 있습니다.
  4. 데이터베이스에 사용할 수있는 다양한 드라이버가 컬렉션 이름에서 "$"를 지원하지 않으므로 컬렉션 이름에 "$"문자를 포함하지 않는 것이 좋습니다.

    데이터베이스 이름을 만들 때 명심해야 할 사항은 다음과 같습니다.

  5. 빈 문자열 (“”)이있는 데이터베이스는 유효한 데이터베이스 이름이 아닙니다.
  6. 데이터베이스 이름은 64 바이트를 초과 할 수 없습니다.
  7. 데이터베이스 이름은 대소 문자를 구분하지 않는 파일 시스템에서도 대소 문자를 구분합니다. 따라서 이름을 소문자로 유지하는 것이 좋습니다.
  8. 데이터베이스 이름에는 이러한 문자“/, \,.,“, *, <,>, :, |,?, $,”를 사용할 수 없습니다. 단일 공백이나 널 문자도 포함 할 수 없습니다.

자세한 내용은. 아래 링크를 확인하십시오 : http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html


3

나는 그것이 개인적인 취향이라고 생각합니다. 내가 선호하는 것은 SQL Server와 함께 .NET에서 NHibernate를 사용하는 것이므로 다른 사람들이 사용하는 것과 다를 수 있습니다.

  • 데이터베이스 : 사용중인 응용 프로그램. 예 : Stackoverflow
  • 컬렉션 : 단수의 이름, 컬렉션이 될 것, 예 : 질문
  • 문서 필드, 예 : MemberFirstName

솔직히 말해서 프로젝트에 일관된 한 너무 중요하지 않습니다. 그냥 일하고 세부 사항을 땀 흘리지 마십시오 : P


1
결과적으로 발생할 수있는 것은 문서 필드입니다. 각 문서 안에 저장되기 때문입니다. Tomasz가 지적했듯이 짧게 유지하면 공간 / 대역폭이 절약됩니다. 그래도 이해하기 쉬운 것을 사용하는 것이 훨씬 더 중요하다고 생각합니다.
렉스 모건

2

SERVER-863 을 얻을 때까지 이 필드 이름을 가능한 짧게 유지 특히 레코드가 많은 경우에 좋습니다.

사용 사례에 따라 필드 이름이 스토리지에 큰 영향을 줄 수 있습니다. 캔 트는 이것이 모든 사용자에게 긍정적 인 영향을 미치기 때문에 이것이 왜 MongoDb에 우선 순위가 높지 않은지 이해합니다. 다른 것이 없다면 대역폭과 스토리지 비용에 대해 두 번 생각하지 않고 필드 이름을 더 잘 설명 할 수 있습니다.

제발 투표 .


이 답변의 미래 독자를 업데이트하기 위해 MongoDB는 요즘 압축을 수행하므로 긴 필드 이름은 더 이상 문제가되지 않습니다.
Hubro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.