Как получить нормализованную базу данных с помощью Sequelize? - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь создать модель с sequelize, которая демонстрирует некоторую нормализацию.Это мой первый опыт с sequelize, и я думаю Я могу заставить его делать то, что хочу, но я борюсь.

Вот мои две таблицы.

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, он (sequelize) знает, что внутри * есть запись admin.1011 *, поэтому он берет соответствующий 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
  }]
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...