大神快来,这是我做的一个项目的我自己写的mysql表,请问里面有什么错误的地方,有哪些值得优化的?

这是我自己做的一个项目的表。有点多,请问有哪些值得优化的地方呢?稍微有点长,求大神带我飞起来


CREATE TABLE tbl_myr_user( userId INT UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT ' 用户的id,自增长', username VARCHAR(45) NOT NULL COMMENT ' 用户名', password VARCHAR(32) NOT NULL COMMENT ' 用户密码', email VARCHAR(128) UNIQUE NOT NULL COMMENT ' 用户邮箱,唯一的。按理说作为手机来说,手机号码才是作为唯一索引的', phoneNumber VARCHAR(16) UNIQUE COMMENT ' 手机号', birthday DATE NOT NULL, gender TINYINT NOT NULL DEFAULT 0 COMMENT ' 0女1男', homeland VARCHAR(10) NOT NULL COMMENT ' 家乡,一旦注册将不会更改', residence VARCHAR(10) NOT NULL COMMENT ' 现居地', wantWhere VARCHAR(10) NULL COMMENT ' 想去哪 ', registerDate DATE NOT NULL COMMENT ' 注册日期', smallAvatar VARCHAR(255) NOT NULL COMMENT ' 必须设定一个', bigAvatar VARCHAR(255) NOT NULL COMMENT ' 用户头像大图', qrcode VARCHAR(255) NULL COMMENT ' 用户的二维码', isStudent TINYINT(1) NOT NULL DEFAULT 1 COMMENT ' 0表示不是学生', wentWhere VARCHAR(255) COMMENT ' 去过哪。可以有形容这些地方的语句', md5 VARCHAR(32) NOT NULL COMMENT ' md5值.用来判断用户的资料或者Plan等是否有变化', sessionId VARCHAR(32) NOT NULL COMMENT ' 当前用户所对应的SessionId', iemi VARCHAR(15) NOT NULL )AUTO_INCREMENT=100001; CREATE TABLE tbl_myr_plan( planId INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, userId INT UNSIGNED NOT NULL, createTime INT UNSIGNED NOT NULL, destination VARCHAR(45) NOT NULL COMMENT '目的地。这个目的地应该是存在于数据库的。比如不能输入火星。在客户端校验地名', city VARCHAR(10)NOT NULL COMMENT ' 景点所对应的城市', startDate DATE NOT NULL COMMENT ' 计划的开始日期', endDate DATE NOT NULL COMMENT ' 结束日期', transportation TINYINT(1) NOT NULL COMMENT '交通工具', together TINYINT NOT NULL COMMENT '和谁', seek TINYINT(1) NOT NULL COMMENT '找人还是提供建议', type TINYINT(1) NOT NULL COMMENT '度假,游玩,出差,返乡', images TEXT NULL COMMENT ' 计划的图片,采用json直接保存', flightNumber VARCHAR(45) NULL COMMENT ' 航班号或者车次号,如果是本地游则可以不需要', postscript VARCHAR(255) NULL COMMENT ' 补充说明' ); CREATE TABLE tbl_myr_refresh ( userId INT UNSIGNED NOT NULL PRIMARY KEY , geohash VARCHAR(10) NOT NULL, latitude VARCHAR(20) NOT NULL, longitude VARCHAR(20) NOT NULL, refreshTime INT UNSIGNED NOT NULL COMMENT ' 用户在请求数据的时候刷新的时间', status TINYINT(1) COMMENT ' 用户当前的状态' ); /** guide是根据城市来自动归类的。 **/ CREATE TABLE tbl_myr_share ( shareId INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, content VARCHAR(255) NULL COMMENT ' 用户想要说的话', createTime INT NULL, location VARCHAR(45) NOT NULL COMMENT ' 拍照片的时的位置,不是当前的位置', city VARCHAR(30) NOT NULL, score TINYINT(1) DEFAULT 0 COMMENT '对这个地点评分', userId INT UNSIGNED NOT NULL, images TEXT NULL COMMENT ' 采用json字符串来存储图片位置。因为只读写一次', guideId INT UNSIGNED ); CREATE TABLE tbl_myr_guide( guideId INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, userId INT UNSIGNED , city VARCHAR(30) NOT NULL COMMENT ' 当前guide的城市', createTime INT NULL, level VARCHAR(45) NULL COMMENT ' 当前guide的级别' ); CREATE TABLE tbl_myr_relationship ( priUserId INT UNSIGNED NOT NULL COMMENT ' 主userId', subUserId INT UNSIGNED NOT NULL, type TINYINT NOT NULL COMMENT ' 0表示这是被拉黑,1表示是关注Ta', createTime INT UNSIGNED NOT NULL COMMENT '发生关系的时间', PRIMARY KEY (priUserId, subUserId,type) ); /** 每天限制输入三次。这样保证准确性。 */ CREATE TABLE tbl_myr_train ( userId INT UNSIGNED NOT NULL PRIMARY KEY, flightNumber VARCHAR(45) NOT NULL COMMENT ' 航班号或者车次号', ); CREATE TABLE tbl_myr_share_comment ( commentId INT UNSIGNED NOT NULL PRIMARY KEY , shareId INT UNSIGNED NOT NULL, createTime INT UNSIGNED NULL, userId INT UNSIGNED NULL, content VARCHAR(255) NULL COMMENT ' 如果是文字就是文字。如果是语音的话这里就是URL链接', replyId INT UNSIGNED NULL DEFAULT 0 COMMENT ' 0表示这是新的评论,否则表示的是回复' ); CREATE TABLE tbl_myr_version ( upateDate DATE NOT NULL, isForced TINYINT(1) COMMENT ' 是否强制用户更新', newestVersionId VARCHAR(5), updateContent VARCHAR(1000) COMMENT ' 客户端更新了哪些内容' );
阅读 4.5k
2 个回答

建议对用户表进行一下拆分 用户详情部分 和基本信息
经常会被查询的放在一个表,不经常查询的放在一个表

你这第一张表,建议拆分下,感觉冗余度有点高,不建议把照片,二维码这些直接存在用户表里

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题