如何规范化 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 字段是什么。
对于 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 字段是什么。