2016-07-01 22 views
6

Ho una tabella User e una tabella UserAttributes. Ogni utente può avere solo un'istanza di ogni utenteAttributo, quindi mi piacerebbe creare un indice univoco composto per il nome della colonna e userId (che è creato da userAttributes.belongsTo.) Come si può fare?Creare un indice composito con dati associati?

I tride aggiungendo il nome univocoIndex senza esito positivo, sembra che si applichi solo alla colonna nome.

+0

Ho modificato l'esempio di seguito per utilizzare l'indice composito, penso che dovrebbe funzionare, fatemi sapere se non è così –

+0

è quello che hai fatto per aggiungere manualmente in useId nel-modello di dati? Mi manca anche l'attributo value? – Himmators

+0

Non riesco davvero a capire alcune cose. Hai scritto: "Ogni utente può avere solo un'istanza di ogni UserAttribute, quindi vorrei creare un indice univoco composto per il nome della colonna e userId". Credo che quei 2 indici (userId e nome) vengano salvati in userAttribute, correggimi se sbaglio. Nel seguente codice che fornisci, posso vedere che il nuovo campo 'valore', non sono sicuro di cosa è destinato, puoi fornire maggiori informazioni a riguardo? o spiegare dove mi manca il contesto del problema? –

risposta

3
var Sequelize = require('sequelize'); 
var sequelize = new Sequelize('<yourDatabaseName>', '<yourUserName>', '<yourPassword', { 
    host: '<ip>' 
}); 

var User = sequelize.define('user', { 
    id: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    primaryKey: true 
    }, 
}); 
var UserAttribute = sequelize.define('userattribute', { 
    userId: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    unique: 'compositeIndex', 
    references: { 
     model: User, 
     key: "id" 
    } 
    }, 
    name: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    unique: 'compositeIndex' 
    } 
}); 

User.hasOne(UserAttribute, { 
    as: "UserAttribute" 
}) 

UserAttribute.belongsTo(User, { 
    foreignKey: "userId", 
    as: 'UserId' 
}) 


sequelize.sync({ 
    // use force to delete tables before generating them 
    force: true 
}).then(function() { 
    console.log('tables have been created'); 
    return User.create({ 
    id: 'randomId1' 
    }); 
}) 
    .then(function() { 
    console.log('tables have been created'); 
    return User.create({ 
     id: 'randomId2' 
    }); 
    }) 
    .then(function() { 
    return UserAttribute.create({ 
     userId: 'randomId1', 
     name: 'name1' 
    }); 
    }) 
    .then(function() { 
    return UserAttribute.create({ 
     userId: 'randomId2', 
     name: 'name1' 
    }); 
    }) 
    // // generates Validation Error 
    // .then(function() { 
    // return UserAttribute.create({ 
    //  userId: 'randomId1', 
    //  name: 'name1' 
    // }); 
    // })