Допустим, в моей базе данных 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.Спасибо.