如何规范化mysql数据库表

时间:2016-02-04 04:59:49

标签: mysql normalization

对于mysql数据库,我有两个类似的表:

1.st table track_tag (200万行)

id(int),track_id(int),tag(varchar)

2.表 标记(150.000行)

id(int),tag(varchar)

我想用第二个表的主键规范化第一个表标记列。 解决这个问题的最快方法是什么?

2 个答案:

答案 0 :(得分:1)

假设您在生产数据库上工作(因此长时间运行的查询,删除/重新创建表等都可以) - 那么我认为最快的方式是使用Create Table AS SELECT statement

例如:

CREATE TABLE track_tag_V2 AS SELECT track.id AS id, track.track_id, tag.id AS tag_id
FROM track_tag track, tag
WHERE track.tag = tag.tag
;

然后(假设结构符合您的喜好)只需DROP track_tag然后RENAME track_tag_V2 to track_tag即可完成!

但是, <和 强>方式。如果您的数据库已经非标准化到此时,可能已经出于性能原因(标准化优化存储而非性能)。它也可能需要进行全面的重新设计(快速)。

答案 1 :(得分:0)

你的标签表适用于列:id(int),tag(varchar)

注意:假设id字段在这里是主键,其他方面就是创建索引。

但是按照以下更改track_tag表 -

id(int),track_id(int),tag_id(int)

注意:tag_id字段应在此处编入索引。

此处还不清楚track_id字段是什么。