【问题标题】:Data Normalization in mysqlmysql中的数据规范化
【发布时间】:2012-09-08 05:57:47
【问题描述】:

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

【问题讨论】:

    标签: mysql database-design relational-database normalization


    【解决方案1】:

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

    例如: 用户和主键是自增

        Insert into users (username) Select username from user_item_text
    

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

    【讨论】:

      【解决方案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

      希望对你有帮助。

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

      【讨论】:

        猜你喜欢
        • 2012-03-08
        • 2011-12-16
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 2013-08-21
        相关资源
        最近更新 更多