如何规范化 mysql 数据库 table

How to normalize mysql database table

对于 mysql 数据库,我有两个相似的 tables:

1.st table track_tag(200 万行)

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

2.nd table 标签(150.000 行)

id (int), 标签(varchar)

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

假设您不是在生产数据库上工作(因此长运行查询和dropping/re-creating表之类的东西是可以的)-那么我认为 最快的 方法是使用 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 就大功告成了!

然而,这可能不会(并且可能 不会 BEST 方式。如果您的数据库在这一点上是非规范化的,那么它可能已经出于性能原因已经完成(规范化优化存储,而不是性能)。它也可能需要完全重新设计(快)。

您的标签 table 适用于以下列:id (int), tag(varchar)

注意:假设 id 字段是这里的主键,否则在其上创建索引。

但是改变track_tag table如下-

id(整数),track_id(整数),tag_id(整数)

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

也不清楚这里的 track_id 字段是什么。