Postre sql, Node.js ORM - проблема foreignKey и primaryKey в таблице отношений (многие ко многим) - PullRequest
0 голосов
/ 02 марта 2020

Я просто создаю таблицу Company и Industry в соотношении «многие ко многим». Компания может содержать несколько отраслей, а одна отрасль может содержать несколько стран. В пользовательском интерфейсе, например, поле множественного выбора для компании, где я могу выбрать несколько отраслей.

Что я делаю в моделях:

Промышленность. js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Industry = sequelize.define('Industry', {
    industry_name: DataTypes.STRING,
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'industry',
  });
  Industry.associate = function(models) {
    Industry.belongsToMany(models.Company, {
      through: 'company_industry_relation', foreignkey: 'industry_id'
    });
  };
  return Industry;
};

Company. js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Company = sequelize.define('Company', {
    company_name: DataTypes.STRING,
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'company',
  });
  Company.associate = function(models) {
    Company.belongsToMany(models.Industry, {
      through: 'company_industry_relation', foreignKey: 'company_id'
    });
  };
  return Company;
};

CompanyIndustryRelation. js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const CompanyIndustryRelation = sequelize.define('CompanyIndustryRelation', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
    },
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'company_industry_relation',
  });
  CompanyIndustryRelation.associate = function(models) {
    CompanyIndustryRelation.belongsTo(models.Company, { foreignKey: 'company_id' });
    CompanyIndustryRelation.belongsTo(models.Industry, { foreignKey: 'industry_id' });
  };
  return CompanyIndustryRelation;
};

Но меня беспокоит то, что эти модели создают company_id (PK) и industry_id (PK) в company_industry_relation стол. Также id (PK) не создается в таблице. По моему мнению, эти два столбца (company_id и industry_id) должны быть внешними ключами, а идентификатор (PK) должен создаваться в отличие от этих двух столбцов?

Может кто-нибудь иметь представление об этом? Заранее спасибо!

1 Ответ

1 голос
/ 02 марта 2020

Вам не нужны ассоциации в вашей таблице отношений ... просто удалите их ... достаточно установить любую из них в принадлежность ...

Ваш первичный ключ в таблице отношений является составным первичный ключ ... это означает, что компания может принадлежать ко многим отраслям, а в отрасли может быть много компаний, но вы никогда не сможете дублировать составной первичный ключ ...

company_id         industry_id
1                  1
1                  2
2                  2
2                  3

Это все действительные записи в вашем присоединиться к таблице, и их комбинация составляет первичный ключ записи ... поэтому очевидно, что после использования 1,1 вы не сможете и не захотите добавить его снова, наберите вещь ... если вы включили фактическое поле id в этом первичном ключе, тогда вы или кто-то еще, работающий в вашем коде, можете случайно добавить это же отношение снова

...