对于MySQL数据库我有两个类似的表:如何规范化MySQL数据库表
1.st表 track_tag(2万行)
ID(INT),track_id(INT)标签(VARCHAR)
2.nd表 标签(150.000行)
ID(INT),标签(VARCHAR)
我想标准化第一个表标记列与第二个表的主键。 解决这个问题的最快方法是什么?
对于MySQL数据库我有两个类似的表:如何规范化MySQL数据库表
1.st表 track_tag(2万行)
ID(INT),track_id(INT)标签(VARCHAR)
2.nd表 标签(150.000行)
ID(INT),标签(VARCHAR)
我想标准化第一个表标记列与第二个表的主键。 解决这个问题的最快方法是什么?
假设你不在生产工作DB(因此之类的长时间运行的查询和删除/重新创建表是OK) - 那么我认为最快的方法是使用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方式。如果您的数据库已经过去归一化,可能已经出于性能原因(归一化优化了存储,而不是性能)。它也可能需要重新设计(这是而不是快)。
你的标签表是罚款为列:ID(INT),标签(VARCHAR)
注:假设id字段是在这里就可以了主键其他明智的创建索引。
但变化track_tag表按如下─
ID(INT),track_id(INT),TAG_ID(INT)
注:TAG_ID场应该在这里建立索引。
也不清楚什么是track_id字段在这里。
每个'track_id'是否对应一个唯一的'tag'?如果是这样,那么只需从'track_tag'中移除'tag'列。 –
最快的方法是什么?设计?两秒钟。实际执行和移动数据?更长的时间。 – Coderchu