Node.js整理数据库规范化

我正在尝试将PHP网站迁移到Node.js,现在我正在考虑使用Sequelize设置数据库。

大多数表格都设置好了,但是我很难弄清楚如何进行标准化。

例如我有1个数据库用户:

ID Username Email Password 

另一个名为Domains的表格:

 ID Domain RegisteredAt 

现在我需要创build一个第三个表来链接到这两个表一起查找,如下所示:

 UserID DomainID 

我试图从Sequelize文档设置OneToOne关联,但是这只是似乎在原来的两个表中创build一个额外的字段。 有人可以解释我该怎么做吗?

谢谢你的帮助

@ 塞缪尔·内夫

如果你仍然对这个答案感兴趣,那么我使用一个用户和工作的例子来做这个工作,例如Sequelize 2.0.0-rc2:

index.js

这是从Sequelize网站,虽然我似乎无法find它现在,但它仍然正常工作。 它扫描模型目录并加载保存在单独文件中的所有模型。

 var fs = require('fs') , path = require('path') , Sequelize = require('sequelize') , lodash = require('lodash') , db_config = require('../../config').database , sequelize = new Sequelize(db_config.db_name, db_config.db_user, db_config.db_password) , db = {} fs .readdirSync(__dirname) .filter(function(file) { return (file.indexOf('.') !== 0) && (file !== 'index.js') }) .forEach(function(file) { var model = sequelize.import(path.join(__dirname, file)) db[model.name] = model }) Object.keys(db).forEach(function(modelName) { if ('associate' in db[modelName]) { db[modelName].associate(db) } }) module.exports = lodash.extend({ sequelize: sequelize, Sequelize: Sequelize }, db) 

_userjobs.js

这个文件名以下划线开始,因为它是首先加载的,因为它是规范化表。

 module.exports = function(sequelize, DataTypes) { var job_user = sequelize.define('job_user', { custom_field: DataTypes.STRING }); return job_user; } 

user.js的

一个简单的模型声明,定义一个关联。

 module.exports = function(sequelize, DataTypes) { var user = sequelize.define('user', { username: DataTypes.STRING, password: DataTypes.STRING, email: DataTypes.STRING, first_name: DataTypes.STRING, surname: DataTypes.STRING, postcode: DataTypes.STRING, gender: DataTypes.STRING, facebook_id: DataTypes.STRING, twitter_id: DataTypes.STRING, user_rank: DataTypes.STRING, generated_username: DataTypes.BOOLEAN, forgot_password: DataTypes.STRING }, { classMethods: { associate: function(models) { user.hasMany(models.job, {through: models.job_user}); } } }); return user; } 

jobs.js

另一个简单的模型声明

 module.exports = function(sequelize, DataTypes) { var job = sequelize.define('job', { name: DataTypes.STRING, description: DataTypes.TEXT }, { classMethods: { associate: function(models) { job.hasMany(models.user, {through: models.job_user}); } } }); return job; } 

如果你运行你的应用程序,你将得到3个表: 用户,作业和job_users ,后者包含userId和jobId规范化。

您不一定需要 _userjobs.js文件,但是如果您想向该表中添加额外的字段(如我的示例中的“ custom_field ”),则这是必需的。 如果您不需要其他字段,只需删除该文件并更改:

 user.hasMany(models.job, {through: models.job_user}); 

 job.hasMany(models.user, {through: models.job_user}); 

至:

 user.hasMany(models.job, {through: 'job_users'}); 

 job.hasMany(models.user, {through: 'job_users'}); 

希望有所帮助!