Как массовая вставка во многие таблицы в Sequelize - PullRequest
0 голосов
/ 22 декабря 2018

Допустим, в моей базе данных POSTGRESQL есть следующие таблицы (3):

*) transaction_status
+----------------------+----------------------------------------+
| status_id            | status_text                            |
+----------------------+----------------------------------------+
| *this is primary key | *this value always unique and non-null |
+----------------------+----------------------------------------+

затем

*) transactions
+----------------------+-----------------------------+------------------+-------------------------------------------------------------------+
| id                   | transaction_title           | transaction_date | transaction_status                                                |
+----------------------+-----------------------------+------------------+-------------------------------------------------------------------+
| *this is primary key | *this value always non-null |                  | *this is foreign key that refer to transaction_status.status_text |
+----------------------+-----------------------------+------------------+-------------------------------------------------------------------+

и, наконец,

*) transaction_destination
+----------------------+----------------------------------------------------+-----------------------------+
| id                   | transaction_id                                     | transaction_destination     |
+----------------------+----------------------------------------------------+-----------------------------+
| *this is primary key | *this is foreign key that refer to transactions.id | *this value always non-null |
+----------------------+----------------------------------------------------+-----------------------------+

ивот связь между этими таблицами:

> ONE transaction_status => MANY transactions
> ONE transactions => MANY transaction_destination

My цель - написать скрипт NodeJS, используя Sequelize , который будет заполнять эти 3 таблицы одновременно, используя отдельные данные JSONструктура.

Вот моя структура данных JSON:

const TData = [
    {
        transaction_title: 'Title here',
        transaction_date: '2018-12-12',
        transaction_status: 'Status A',
        transaction_destination: [
            'Destination 01',
            'Destination 02',
            'Destination 03',
        ]
    },
    {
        transaction_title: 'Another title here',
        transaction_date: '2018-12-13',
        transaction_status: 'Status A',
        transaction_destination: [
            'Destination 03',
            'Destination 04',
            'Destination 05',
        ]
    }
]

Что я уже определил:

const TransactionStatus = db.define('transaction_status', {
    statusId: { // Primary Key
        type: Sequelize.INTEGER(2),
        field: 'status_id',
        primaryKey: true,
        autoIncrement: true,
        allowNull: false,
        validate: {
            notEmpty: true,
        }
    },
    statusText: { // Must be Unique
        type: Sequelize.STRING(45),
        field: 'status_text',
        allowNull: false,
        unique: true,
        validate: {
            notEmpty: true,
        }
    }
});

const Transactions = db.define('transactions', {
    id: { // Primary Key
        type: Sequelize.BIGINT(7),
        field: 'id',
        primaryKey: true,
        autoIncrement: true,
        allowNull: false,
        validate: {
            notEmpty: true,
        }
    },
    transactionTitle: {
        type: Sequelize.STRING(100),
        field: 'transaction_title',
        allowNull: false,
        validate: {
            notEmpty: true,
        }
    },
    transactionDate: {
        type: Sequelize.DATEONLY,
        field: 'transaction_date',
        allowNull: false,
        validate: {
            notEmpty: true,
            isDate: true,
            isAfter: "2011-11-05"
        }
    },
    transactionStatus: { // Foreign Key
        type: Sequelize.STRING(25),
        field: 'transaction_status',
        allowNull: false,
        validate: {
            notEmpty: true,
        }
    }
});

const TransactionDestination = db.define('transaction_destination', {
    id: { // Primary Key
        type: Sequelize.BIGINT(15),
        field: 'id',
        primaryKey: true,
        autoIncrement: true,
        allowNull: false,
        validate: {
            notEmpty: true,
        }
    },
    transactionId: { // Foreign Key
        type: Sequelize.BIGINT(7),
        field: 'transaction_id',
        allowNull: false,
        validate: {
            notEmpty: true,
        }
    },
    transactionDestination: { //
        type: Sequelize.STRING(100),
        field: 'transaction_destination',
        allowNull: false,
        validate: {
            notEmpty: true,
        }
    },
});

Итак, что я хочусделать в моем сценарии это

db.sync({
        force: true
    })
    .then(() => {
        console.log('DB was synced and dropped old data');
    })
    .then(() => {
        // Do something that will populate all 3 tables using existing JSON data structure, i.e. TData
    })

Но вот некоторые ограничения :

Обратите внимание, что в TData JSON значение transaction_status.status_id, transactions.id, transaction_destination.id и transaction_destination.transaction_id не были предоставлены, поскольку они являются PK или FK.

При условии TData содержит только 2 transactions данных, но на самом деле их число составляет 1000 transactions строки / точки.

Пожалуйста, помогите, это мой первый раз, используя sequelize.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...