如何使用Sequelize获得规范化的数据库?

时间:2019-09-25 16:01:13

标签: node.js sql-server sequelize.js

我正在尝试创建具有序列化功能的模型,该模型具有一定的归一化功能。这是我第一次体验续集,我认为我可以让它做我想做的事,但是我很挣扎。

这是我的两个桌子。

dbo.Users
| id | firstName | lastName       | roleId | createdAt.. | updatedAt.. |
|  1 | john      | doe            |      1 |
|  2 | chris     | christopherson |      1 |
|  3 | joe       | montana        |      2 |
dbo.Roles
| id | roleName   | createdAt.. | updatedAt.. |
|  1 | admin      |
|  2 | power-user |

基本上,我要寻找的是一旦正确创建了模型,当我使用Role: admin插入/创建“用户”时,它(序列化)就会知道已经有admin条记录在dbo.Roles内,因此它将获取相应的role.id(1)并将其插入到新的用户记录中。

现在,如果我使用Role: user创建一个新用户,因为它不在dbo.Roles中,它将创建第三条记录

dbo.Roles
| id | roleName   | createdAt.. | updatedAt.. |
|  1 | admin      |
|  2 | power-user |
|  3 | user       |

dbo.Roles内并添加

dbo.Users
| id | firstName | lastName       | roleId | createdAt.. | updatedAt.. |
|  1 | john      | doe            |      1 |
|  2 | chris     | christopherson |      1 |
|  3 | joe       | montana        |      2 |
|  4 | jeff      | bezos          |      3 |

到我的dbo.Users表中。

到目前为止,这是我一直在尝试的方法,但是在SequelizeEagerLoadingError表中却不断收到admin或重复的dbo.Roles记录。

const Role = sequelize.define('Role', {
  RoleName: Sequelize.STRING,
  CreatedBy: Sequelize.STRING
});

const User = sequelize.define('User', {
  FirstName: Sequelize.STRING,
  LastName: Sequelize.STRING,
  UserPrincipalName: Sequelize.STRING,
  Department: Sequelize.STRING,
  CreatedBy: Sequelize.STRING,
  UpdatedBy: Sequelize.STRING,
  RoleId: {
    type: Sequelize.INTEGER,
    references: {
      model: Role,
      key: 'id'
    }
  }
});

Role.hasMany(User, { foreignKey: 'RoleId' });

呼叫User.create

await User.create({
  FirstName: 'Jeff',
  LastName: 'Bezos'
  Role: {
    RoleName: 'admin',
    CreatedBy: 'jimjones@gmail.com'
  }
}, {
  include: [{
    model: Role
  }]
});

0 个答案:

没有答案