CREATE TABLE `message` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `text` varchar(250) DEFAULT NULL,
  `uname` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
这是一个类似微薄的消息表:
     `uname`说了一句话`text`现在考虑的问题是用户名uname可能会改变,那么表中所有该用户的`uname`就必须跟着改变,担心更新的效率。
我想到存一个uid,它并不会变。但这样就还需要根据uid再查到uname,更加麻烦这种情况通常大家是怎么做的?

解决方案 »

  1.   

    `message`:去掉unam
    增加1个对照表(username)
    uid uname
     再连接查询
      

  2.   

    这个很好。message表中存uid即可。查询时连接查询。
      

  3.   

    能给大概写给例子吗? SQL不太了解
      

  4.   

    大致写一下
    CREATE TABLE `message` (
      `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
       uid int NOT NULL ,
      `text` varchar(250) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8CREATE TABLE `username` (uid int NOT NULL ,uname varchar(250),PRIMARY KEY (`uid`))select * from `message` a inner join 
    `username` b on a.uid=b.uid
      

  5.   

    如果将引擎修改为INNODB的,还可以利用外键约束,保证数据的完整性
      

  6.   

    这种情况大多用UID来关联,连接的方式查询