【发布时间】:2020-03-18 14:14:21
【问题描述】:
我需要在首次加载应用程序时使用 Sequelize 将数据加载到数据库中。最初的excel数据格式如下:
汽车组字段:标题 |组码
车组数据: ('梅赛德斯','M'), ('大众','大众');
汽车字段:car_code |所有者 |组码
汽车数据: ('11-1135','弗雷德','M'), ('11-1146','鲍勃','大众');
--
理想情况下,我想在 DB 中得到以下结果:
汽车组字段:group_id |标题 |组码
车组数据: (1,'梅赛德斯','M'), (2, '大众','大众');
汽车字段:car_id |车码 |所有者 | group_id(指上面创建的组id)
汽车数据: (1, '11-1135','弗雷德', 1), (2, '11-1146','鲍勃', 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
我看不到如何通过使用迁移和播种来实现上述目标,因为我需要创建模型然后进行播种,然后运行更改。在这种情况下,在 Sequelize 中运行普通 SQL 语句是否更容易?或者我应该直接使用数据并通过 group_code 将两个表链接为外键(这是一个字符串 - 与普通 INT id 相比不是最佳性能)。
非常感谢任何关于这方面的指导!
【问题讨论】:
标签: mysql database migration sequelize.js seeding