Sequelize.js模型定义中modelName的命名规范与选择方法
关于Sequelize中modelName的命名选择问题
当模型定义文件名为sys_log.js时,示例代码如下:
const { DataTypes, Model } = require('sequelize'); const db = require("../startup/db"); class SysLog extends Model {}; SysLog.init({ action:{type: DataTypes.STRING}, amount:{type:DataTypes.INTEGER}, doer_id:{type:DataTypes.INTEGER}, fromadd:{type:DataTypes.STRING}, toadd:{type:DataTypes.STRING}, desp:{type:DataTypes.STRING}, createdAt: DataTypes.DATE, }, { sequelize: db, modelName: //<<==what is the modelName naming convention: 'sys_log'? or 'syslog'. timestamps:true, updatedAt:false, }) module.exports.SysLog = SysLog;
问题:
该如何选择modelName?是否需与文件名sys_log一致?还是可自定义为syslog、systemLogs等名称?
回答:
modelName不需要和文件名强制绑定,它是Sequelize内部用来标识模型的名称,你完全可以自定义成syslog、systemLogs这类名称,但建议遵循以下实用规则:
- 保持项目命名风格统一:如果项目里其他模型用驼峰式(比如
UserInfo),那这里就用SysLog;如果都是蛇形命名(比如user_info),就用sys_log,统一风格能降低团队协作的认知成本。 - 注意自动表名的关联:默认情况下,Sequelize会把modelName转换为复数蛇形作为数据库表名。比如modelName设为
SysLog,自动生成的表名是sys_logs;设为sys_log,表名同样是sys_logs;设为systemLogs,表名会变成system_logs。如果需要自定义表名,可以额外配置tableName参数。 - 尽量保持关联可读性:从维护角度出发,让modelName和文件名、表名有对应关系会更友好。比如文件名是
sys_log.js,modelName用sys_log或者SysLog,其他人看代码时能快速关联到对应的文件和数据表。
内容的提问来源于stack exchange,提问作者user938363
相关产品推荐
相关产品推荐

