Мне нужно загрузить данные в БД с помощью Sequelize при первой загрузке приложения. Исходные данные Excel были предоставлены в следующем формате:
Поля группы автомобилей : title | код_группы
Данные группы автомобилей : ('Mercedes', 'M'), ('Volkswagen', 'VW');
Поля автомобилей : код автомобиля | владелец | group_code
Данные автомобиля : ('11 -1135 ',' Fred ',' M '), ('11 -1146', 'Bob', 'VW');
-
В идеале в БД я хочу добавить следующее:
Поля группы автомобилей: group_id | название | group_code
Данные группы автомобилей: (1, «Mercedes», «M»), (2, «Volkswagen», «VW»);
Поля автомобилей: car_id | код автомобиля | владелец | group_id (относится к идентификатору группы, созданному выше)
Данные автомобиля: (1, '11 -1135 ',' Fred ', 1), (2, '11 -1146', 'Bob', 2) ;
-
Как лучше всего это сделать в Sequelize? В SQL я сделал следующее, чтобы обойти эту проблему:
1 - преобразовал мой файл Excel в набор SQL операторов
2 - создал следующий скрипт, используя эти операторы ( а затем я добавил свой собственный код для заполнения group_id):
CREATE TABLE CarGroup(
group_id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
group_code VARCHAR(5) NOT NULL,
PRIMARY KEY (`group_id`),
CONSTRAINT UN_car_group_code UNIQUE (group_code)
) ENGINE=InnoDB;
INSERT INTO CarGroup(title,group_code) VALUES ('Mercedes','M');
INSERT INTO CarGroup(title,group_code) VALUES ('Volkswagen','VW');
CREATE TABLE IF NOT EXISTS Car(
car_id INT NOT NULL AUTO_INCREMENT,
car_code VARCHAR(10),
owner VARCHAR(100) NOT NULL,
group_id SMALLINT, -- populated after insert
group_code VARCHAR(10) NOT NULL, -- deleted after insert
PRIMARY KEY (id),
CONSTRAINT `UN_car_code` UNIQUE (`car_code`),
CONSTRAINT `FK_car_group_id` FOREIGN KEY (`group_id`) REFERENCES `CarGroup` (`group_id`)
) ENGINE=InnoDB;
INSERT INTO Car(car_code,owner,group_code) VALUES ('11-1135','Fred','M');
INSERT INTO Car(car_code,owner,group_code) VALUES ('11-1146','Bob','VW');
-- GENERATE GROUP ID'S BASED ON GROUP CODE AND DROP GROUP CODE COLUMN --
update Car INNER JOIN CarGroup ON Car.group_code = CarGroup.group_code
SET Car.group_id = CarGroup.group_id;
alter table Car drop column group_code
Я не могу понять, как можно достичь вышеуказанного с помощью миграции и заполнения, так как мне нужно создать модель, затем выполнить заполнение и затем запустите изменение. В этом случае проще просто запустить простые операторы SQL в Sequelize? Или я должен просто использовать данные как они есть и связать две таблицы как внешний ключ через group_code (который является строкой - не лучшая производительность по сравнению с простым INT ID).
Любое направление на это высоко ценится!