Schema design and Naming conventions in MongoDB
Naming convention for collection
In order to name a collection few precautions to be taken
- A collection with empty string (“”) is not a valid collection name.
- A collection name should not contain the null character because this defines the end of collection name.
- Collection name should not start with the prefix “system.” as this is reserved for internal collections.
- It would be good to not contain the character “$” in the collection name as various driver available for database do not support “$” in collection name.
Databases in MongoDB
So we a document. A group of documents is termed as collection. And a group of collections is a database. Every database has its own permission and is stored in a separate file on disk.
So we a document. A group of documents is termed as collection. And a group of collections is a database. Every database has its own permission and is stored in a separate file on disk.
Tip* : It would be
good to store all the data related to a single application in one single
database.
Property Name Format:
Property names must follow below guidelines:
- Property names should have meaningful names with defined semantics.
- Property names must be camel-cased, ASCII strings.
- The first character must be a letter, an underscore (_) or a dollar sign ($).
- Subsequent characters can be a letter, a digit, an underscore, or a dollar sign.
- Reserved JavaScript keywords should be avoided (A list of reserved JavaScript keywords can be found below).
These
guidelines mirror the guidelines for naming JavaScript identifiers. This allows
JavaScript clients to access properties using dot notation.
Things to keep in mind while creating a database name is
- A database with empty string (“”) is not a valid database name.
- Database name cannot be more than 64 bytes.
- Database name are case-sensitive, even on non-case-sensitive file systems. Thus it is good to keep name in lower case.
- A database name cannot contain any of these characters “/, \, ., “, *, <, >, :, |, ?, $,”. It also cannot contain a single space or null character.
There
are several special databases:
- admin – This is “root” database in terms of authentication. There are several server-side commands that can only be run from admin database. Such as listing all the databases.
- local – This database is never replicated and can be used to store any collections that should be local to a single server.
- config – This database is used at the time of sharding, to store information about the shards.
- By concatenating a database name with a collection in that database you can get a fully qualified collection name called a namespace.
For example: an employee collection inside a database named mydb can be –
mydb.employee
Namespaces
are limited to 121 bytes in length and, in practice, should be fewer than 100
bytes long.
Lowercase
names : avoids case
sensitivity issues, MongoDB collection names are case sensitive.
Plural : more obvious to label a collection of
something as the plural, e.g. "files" rather than "file"
>No
word separators :
Avoids issues where different people (incorrectly) separate words (username
<-> user_name, first_name <-> firstname). This one is up for debate
according to a few people around here but provided the argument is isolated to
collection names I don't think it should be ;) If you find yourself improving
the readability of your collection name by adding underscores or camelCasing
your collection name is probably too long or should use periods as appropriate
which is the standard for collection categorization.