Comment choisir un nom de colonne de Clé Étrangère à l'aide de Sequelize et mySql?

Je suis en utilisant sequelize pour modéliser une base de données mySql-schéma de base de données dans mon nœud de l'application. Un extrait de mon modèle ressemble à ceci:
J'ai une société-table et d'un service de table. Une entreprise peut avoir plusieurs ministères et d'un département qui appartient à une seule entreprise. J'ai modélisé comme suit:

La société-table:

module.exports = function(sequelize, DataTypes){
return Company = sequelize.define('Company', {
    companyId: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        allowNull: false,
        autoIncrement: true,
        unique: true            
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
})}

Le ministère de table:

var Company = require('./company');
module.exports = function(sequelize,DataTypes) {
return Department = sequelize.define('Department', {
departmentId: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: true,
unique: true
},
name: {
type: DataTypes.STRING,
allowNull: false            
},
companyId: {
type:           DataTypes.INTEGER,
references:     'Companies',
referencesKey:  'companyId',
onDelete:       'cascade'
}
});}

Stocker réellement de ce schéma dans la base de données j'utilise le code suivant:

var db = require('../models/index');
db["Company"].hasMany(db["Department"], {as: 'departments'});
db["Department"].belongsTo(db["Company"], {foreignKey: 'companyId', foreignKeyConstraint: true});
models.sequelize.sync().complete(function(err){
//irrelevant for the problem
});

Le problème est que ce code crée 2 clés étrangères dans le département de la table. L'un sur le champ "companyId" (comme prévu) mais aussi sur le terrain "CompanyCompanyId", un champ est automatiquement généré.

Comment puis-je m'assurer que seuls les étrangers clé que j'ai défini ("companyId") est utilisé et créé?

OriginalL'auteur Simon | 2015-01-20

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *