1

我在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 条记录。

4

2 回答 2

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

也许您需要在运行最后一个之前添加以下步骤update

  1. 在字段上添加索引user_item_text.username以使更新运行更快
  2. 唯一索引users.username而不是普通索引
  3. user_item_index.user_id应该有FK

希望能帮助到你。

附言。我没有测试查询。他们只是向您展示一般方法。

于 2012-09-15T08:00:42.390 回答
1

创建表,然后将插入与选择结合使用。据我所知,可以使用表格进行插入。

例如:用户和主键是自增

    Insert into users (username) Select username from user_item_text

http://dev.mysql.com/doc/refman/5.1/de/insert-select.html

于 2012-09-15T07:49:41.457 回答