繁体   English   中英

如何规范化mysql数据库表

[英]How to normalize mysql database table

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

1.st表track_tag (200万行)

id(int),track_id(int),标记(varchar)

第2个表格标签 (150.000行)

id(int),标记(varchar)

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

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

例如:

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就可以了!

然而,这可能不是 (也可能 不会 )的最好的方式。 如果此时将数据库取消规范化,则可能是出于性能方面的考虑(规范化优化存储而非性能)。 可能还需要重新设计(这并不很快)。

您的标签表可以使用以下列:id(int),tag(varchar)

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

但是请按照以下方式更改track_tag表-

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

注意:tag_id字段应在此处建立索引。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM