面试题答案
一键面试利用命名规则提高数据库特性
- 可读性:
- 业务模块前缀:在集合名前添加业务模块的缩写。例如,对于电商系统,用户相关集合命名为
ecom_user
,订单相关集合命名为ecom_order
,这样从集合名就能快速了解其所属业务模块。 - 明确含义:集合名要能准确反映其存储的数据内容。比如存储用户收货地址的集合,命名为
user_address
,而不是模糊的data1
之类的名称。
- 业务模块前缀:在集合名前添加业务模块的缩写。例如,对于电商系统,用户相关集合命名为
- 可维护性:
- 版本控制:如果集合结构可能会随着业务发展而变化,可以在命名中体现版本号。如
product_v1
、product_v2
,这样在进行升级或回滚操作时能清晰区分不同版本的数据结构。 - 分层命名:对于复杂业务,可以采用分层命名。例如,在一个社交媒体系统中,用户相关数据可以分为基础信息、社交关系等不同层次,集合名可以是
user_base_info
、user_relationship
,方便维护和管理不同层次的数据。
- 版本控制:如果集合结构可能会随着业务发展而变化,可以在命名中体现版本号。如
- 避免命名冲突:
- 全局唯一前缀:为整个项目设置一个全局唯一的前缀。如公司名缩写或项目名缩写,像
xyz_project_user
、xyz_project_product
,这样不同项目之间即使有相同业务含义的集合也不会冲突。 - 避免保留字:MongoDB有一些保留字,在命名集合时要避免使用,如
system
等,防止引发未知错误。
- 全局唯一前缀:为整个项目设置一个全局唯一的前缀。如公司名缩写或项目名缩写,像
命名不当引发的潜在问题及解决方案
- 潜在问题举例:假设在一个系统中有两个功能模块都涉及到“配置”相关数据,一个模块的开发人员命名集合为
config
,另一个模块也命名为config
,这就会导致命名冲突。在查询或操作数据时,可能会误操作到错误模块的数据,而且难以排查问题。 - 解决方案:采用前面提到的业务模块前缀方式,如模块A的配置集合命名为
moduleA_config
,模块B的配置集合命名为moduleB_config
,这样就能清晰区分不同模块的配置数据,避免冲突。