[MySQL] 这个字段怎么设计合理?

2013-02-22 11:46:12 +08:00
 andybest
目前要在用户表设计一个字段储存用户的头衔

无法直接用enum来解决,因为有30%的用户是自定义头衔,也就是说他可以在头衔上设置任何字

另外70%的用户头衔仅分为两种:未验证用户、普通用户

如果我用 varchar(10) 来解决这个头衔字段,则数据库中包含了大量的 “未验证用户” ,占了不少没必要的空间。

请问下各位有什么好的方法和建议来解决这个问题?

谢谢!
3177 次点击
所在节点    问与答
11 条回复
kingwkb
2013-02-22 12:01:43 +08:00
单独一张表
id, name

用户表增加一个头衔字段保存头衔id
andybest
2013-02-22 12:05:49 +08:00
@kingwkb 感谢,很有启发!这应该是最好的设计方案了吧?
meta
2013-02-22 13:31:49 +08:00
汗,这不就是第二范式么,每本书上都有写的。
atom
2013-02-22 13:32:09 +08:00
会不会过度设计了呢?
数据库中包含了大量的 “未验证用户” ,在起步阶段,个人认为可以接受这样的浪费
qiuai
2013-02-22 13:33:00 +08:00
=。=在数据量达到10W之前。根本没必要考虑这个。
meta
2013-02-22 13:37:27 +08:00
楼上的两位,这个不是浪不浪费的问题,如果不分成两个表是存在删除异常的,设想一下,如果当前某个头衔只有一个用户有,那么把这个用户删除的时候,这个头衔也不在了。
plprapper
2013-02-22 13:41:56 +08:00
用一些特殊定义的符号 做为保留含义就好了 比如未验证


没必要多开一个表
andybest
2013-02-22 13:49:41 +08:00
@atom
@qiuai

非起步阶段,用户数大于1kw,目前仅user一个表就占了8G磁盘空间,
所以才考虑优化结构
andybest
2013-02-22 13:54:19 +08:00
@meta 能说下使用 "第二范式" 怎么解决这个问题吗?

谢谢!
qiuai
2013-02-22 14:34:53 +08:00
@andybest 哦、没有超大数据量mysql数据库规划经验,不发表意见了.
brucexin
2013-02-23 17:28:55 +08:00
同意@plprapper, 用特殊字符表示“未验证”和“普通”,也是一种不错的做法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/61031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX