我已成功将数据从csv文件导入到临时表之一,并尝试将数据移动到两个不同的规范化表。当前数据库架构。
// Temporary table
temp(id, author, book);
// Destination table
authors(id, name);
books(id, author_id, title)
// Data stored on `temp` table
1, 'Author-A', 'BOOK101'
2, 'Author-A', 'BOOK212'
3, 'Author-B', 'BOOK314'
4, 'Author-B', 'BOOK415'
5, 'Author-B', 'BOOK616'
6, 'Author-C', 'BOOK517'
7, 'Author-C', 'BOOK918'
我尝试使用php脚本在应用程序层上移动数据但这样效率非常低并且需要花费太多时间。我正在寻找的是在数据库级别移动数据,我使用此查询将作者姓名保存在authors表上: -
INSERT INTO authors(name) SELECT author FROM temp GROUP BY author
但如何为保持关系的作者保存书籍?
答案 0 :(得分:1)
改变你的临时表。
ALTER TABLE TEMP ADD COLUMN author_id
INT {10} NULL author
;
将作者值插入作者表
INSERT INTO作者(name
)
SELECT DISTINCT作者
从TEMP;
(希望你的id是自动增量)
更新临时表
更新temp_table INNER JOIN创建了一个ON temp_table.author = a.name SET author_id = a.id
将值插入您的图书表。
插入书籍(author_id
,title
)
SELECT author_id,
标题
从TEMP;
希望这有帮助。
答案 1 :(得分:0)
如果你使用mysql而不是使用书籍表 author_id 键的添加索引来定义关系,你将存储作者表主键将books表author_id字段作为外键。这个东西创建了作者表id(主键)和books表author_id键之间的关系。