更改模型的表名运行时

时间:2016-10-28 14:29:34

标签: javascript mysql database sequelize.js database-partitioning

我正在使用Sequelize.js,需要将历史数据保存到特定年份,并希望按年份前缀分隔我的表格 例如price_2010,prices_2011,例如 我可以创建

tableName:"company_historical_" + new Date().getFullYear();

对于当前年份表,它将使用此名称作为表,但如果我想存储或查询2015年的数据并希望使用模型而不是原始查询,该怎么办? 那么如何更改使用运行时表。 像changeTable()方法sequelize。

1 个答案:

答案 0 :(得分:1)

自从数据以来,您永远不应该将任何类型的信息存储为表名。您应该将它们存储为单独的表条目,作为实际可用的数据。

company_historical_<year>更改为company_historical并创建一个名为company_historical_years的新表格,其中包含公司历史条目可能具有的所有可能年份。

然后在公司历史条目与相关公司历年条目之间创建关系。

类似于:

var CompanyHistoricalYears = sequelize.define('company_historical_years', {
    year: {
        type: Sequelize.INTEGER
    },
    classMethods: {
        associate: function (models) {
            CompanyHistoricalYears.hasMany(models.CompanyHistorical);
        }
    }
};


var CompanyHistorical = sequelize.define('company_historical', {
    ...
    classMethods: {
        associate: function (models) {
            CompanyHistorical.belongsTo(models.CompanyHistoricalYears);
        }
    }
};

然后你可以用:

查询它
CompanyHistoricalYears.findOne({
    where: {
        year: 2011, // or you can use "new Date().getFullYear()"
    },
    include: [CompanyHistorical]
});

这将为您提供一个CompanyHistoricalYears条目以及该年内的所有CompanyHistorical条目。

如果不是这样,那么随时可以对任何问题发表评论。