2016-07-01 4 views
6

나는 User-table과 userAttributes 테이블을 가지고있다. 모든 사용자는 각 userAttribute 인스턴스를 하나만 가질 수 있으므로 columnAttribute에 대한 고유 한 고유 인덱스를 만들려고합니다 (userAttributes.belongsTo에 의해 생성됨). 어떻게 수행 할 수 있습니까?관련 데이터가있는 복합 색인을 만드시겠습니까?

UserAttribute = sequelize.define('userAttributes', { 
    name: { 
     type:  Sequelize.STRING, 
     allowNull: false, 
     unique: 'nameIndex', 
     validate: { 
      isIn: [['phone', 'name','driverRequest']], 
     } 
    }, 
    value: { 
     type:  Sequelize.STRING, 
     allowNull: false 
    }, 
}); 


User.hasMany(userAttributes, {unique: 'nameIndex'}); 
userAttributes.belongsTo(User, {unique: 'nameIndex'}); 

고유 한 nameIndex를 추가하지 않으면 이름 - 열에 만 적용됩니다.

+0

나는, 나는 그것이 작동이 –

+0

가 수동으로 데이터 모델에 useId에 추가 무슨 짓을하지 않는 경우 알려 주시기해야한다고 생각 복합 인덱스를 사용하기 위해 아래의 예제를 수정 한? 가치 속성도 누락 되었습니까? – Himmators

+0

나는 정말로 어떤 것을 이해할 수 없다. "모든 사용자는 각 userAttribute에 대해 하나의 인스턴스 만 가질 수 있으므로 열 이름과 userId에 대해 고유 한 고유 인덱스를 만들고 싶습니다." 나는 그 2 개의 인덱스 (userId와 name)가 userAttribute에 저장되어 있다고 생각한다. 당신이 제공하는 다음 코드에서 'value'라는 새로운 필드를 볼 수 있는데, 그것이 무엇을위한 것인지를 잘 모르겠습니다. 더 많은 정보를 제공 할 수 있습니까? 또는 문제 컨텍스트가없는 부분을 설명하십시오. –

답변

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' 
    // }); 
    // }) 
관련 문제