【问题标题】:Sequelize loading in initial data续集加载初始数据
【发布时间】: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


    【解决方案1】:

    不确定这是否是最好的方法,但由于没有人回答,但我决定执行以下操作:

    • 创建两个表,OriginalCars 和 Cars。 OriginalCars 具有 excel 文件具有的原始字段(即 car_code)。 Cars 表有 car_id 和其他字段。
    • 创建模型
    • 同步模型
    • 手动检查表中是否有任何数据,如果没有,则使用数据填充 originalCars 表。然后,我使用 group 表对 OriginalCars 进行内部连接,解析结果数据并使用 car_id 添加到 Car 表中。
    • 删除不再需要的原始表

    感觉有点老套,但它只需要在应用初始加载时执行此操作即可填充初始数据。

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 2012-11-04
      • 2013-08-07
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多