2016-02-04 204 views
-1

对于MySQL数据库我有两个类似的表:如何规范化MySQL数据库表

1.st表 track_tag(2万行)

ID(INT),track_id(INT)标签(VARCHAR)

2.nd表 标签(150.000行)

ID(INT),标签(VARCHAR)

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

+0

每个'track_id'是否对应一个唯一的'tag'?如果是这样,那么只需从'track_tag'中移除'tag'列。 –

+0

最快的方法是什么?设计?两秒钟。实际执行和移动数据?更长的时间。 – Coderchu

回答

1

假设你在生产工作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方式。如果您的数据库已经过去归一化,可能已经出于性能原因(归一化优化了存储,而不是性能)。它也可能需要重新设计(这是而不是快)。

0

你的标签表是罚款为列:ID(INT),标签(VARCHAR)

注:假设id字段是在这里就可以了主键其他明智的创建索引。

但变化track_tag表按如下─

ID(INT),track_id(INT),TAG_ID(INT)

注:TAG_ID场应该在这里建立索引。

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