2012-09-15 165 views
1

我有一个表在MySQL:数据标准化在MySQL

user_item_text 
    username, item, text 

我希望将数据归到三个表:

users 
    user_id, username 

items 
    item_id, item_name 

text 
    text_id, text_name 

如何使用现有的user_item_text表中创建三个表格描述如何?大约有800000条记录。

回答

2

这里是如何处理一代表 “用户” 的例子:

create table users(
    user_id int not null auto_increment, 
    username varchar(50), 
    primary key(user_id), 
    index ind_user_username(username) 
) engine = XXX; 

insert into users(username) select distinct username from user_item_text 

alter table user_item_text add user_id integer null 

update user_item_text uit join users u on uit.username = u.username 
set uit.user_id = u.user_id 

alter table user_item_text drop column username 

也许你会在运行最后一次之前需要添加以下步骤:

  1. 上字段中添加索引进行更新的运行速度
  2. users.username唯一索引,而不是普通的指数
  3. user_item_index.user_id应该有FK

希望它能帮助。

ps。我没有测试查询。他们只是向你展示一般方法。