日期:2014-05-16  浏览次数:20945 次

求教表的设计
SQL code
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,更加麻烦

这种情况通常大家是怎么做的?

------解决方案--------------------
探讨

`message`:去掉unam
增加1个对照表(username)


uid uname
再连接查询

------解决方案--------------------
大致写一下
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=utf8

CREATE 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