sql >> Database teknologi >  >> RDS >> Mysql

Skift modellens tabelnavn runtime

Du bør aldrig gemme nogen form for information som årstal som tabelnavne siden deres data. Du bør gemme dem som separate tabelposter, som faktiske brugbare data.

Skift company_historical_<year> til bare company_historical og opret en ny tabel kaldet company_historical_years som bare har alle mulige år Virksomhedshistorisk poster kan have.

Opret derefter et forhold mellem Virksomhedshistorisk post og de relaterede virksomhedshistoriske år indgang.

Så noget i stil med:

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);
        }
    }
};

og så kan du forespørge det med:

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

dette vil give dig et enkelt CompanyHistoricalYears indtastning og alle CompanyHistorical poster, der er inden for det pågældende år.

Hvis intet af dette giver mening, er du velkommen til at kommentere med eventuelle spørgsmål.




  1. Opgradering af PostgreSQL 11 til PostgreSQL 13 med TimescaleDB og PostGIS i Linux ved hjælp af pg_upgrade

  2. Felt i datafil overskrider maksimal længde - fejl

  3. MariaDB ROUND() vs TRUNCATE()

  4. Hvordan indstilles ORACLE_HOME-variablen korrekt på Ubuntu 9.x?