【发布时间】:2016-04-06 06:32:39
【问题描述】:
我正在将旧的(未规范化的)数据库迁移到新版本。
现在我有这个中间结果:
创建表收件人(
id int NOT NULL AUTO_INCREMENT,
电子邮件 VARCHAR(255),
主键(id),
唯一索引(`电子邮件`),
) 引擎=创新;
创建表评论(
# 现在这总是 NULL:
fk_recipient INT,
# 临时解决方案。请注意,此字段不是唯一的:
tmp_email VARCHAR(255) 非空,
# ...
外键(`fk_recipient`)参考收件人(id);
) 引擎=INNODB;
两个表都填写了正确的数据:
- 在表
comment中有数百万个具有正确tmp_email和fk_recipient = null的cmets(注意:电子邮件不是唯一的) -
recipient表中有数十万个 UNIQUE 电子邮件地址。
我需要做什么:
我想删除comment.tmp_email 列,而是将comment.fk_recipient 指向表recipient 中的相应行。
我目前的做法(使用 PHP):
- 获取所有 cmets
- 遍历所有 cmets:
- 在
recipient表中查找右行 - 设置右外键
- 在
... DROP COLUMN tmp_email
这需要很长时间,让我想知道是否没有本地 MySQL 方法可以做到这一点?
【问题讨论】:
标签: mysql foreign-keys database-normalization