如何设计自己的数据库

贡献者: niceNI天

其实这个经验分享并不仅仅针对MySQL,之所以加上这个关键字其实是为了给搜索引擎看的,呵呵。这篇文章的目标是为了拓宽新手的思路,对于老鸟可能没什么帮助了。文章主要涉及以下方面的内容:数据完整性约束的意义:数据的第一道防线;避免冗余字段:请不要认为这是一种弹性或者灵活性的体现;请尽可能的收集数据:这是一种境界;为什么建立索引:不仅仅是速度; 事务、触发器与存储过程:这是一扇门;

1很多新手创建的数据库非常的简单,一堆字段扔进去就搞定了,反正脚本会搞定一切。但是,你有没有反思过一个问题,写脚本的也是人,是人就会犯错误,犯了错误就可能搞乱数据,而数据是一切应用的基础。因此,我建议你们能够静下来,细心的,花费更多的时间来研究如何更好地设计数据库结构

2这是我的第一个建议,每个表必须具有主键,而且最好是使用单独的一个字段作为主键,这样从根源上扼杀了出现两条完全相同的数据的可能性。例如用户信息表中,除了用户编号以外,其登录名称也应该是唯一的,不要指望以后可以在程序中处理这个情况,现在就做,只要把它标记为唯一键,就算程序中忘了判断也不会让错误的数据被存储进来。

3请努力使用与数据匹配的类型和适当的长度,虽然你可以把时间保存为varchar类型,但是明显还是datetime类型更好,因为你不可能把2013-02-30之类的日期保存到datetime类型的字段中。字段的长度也是需要考虑的,过长虽然比过短带来的麻烦小很多,但是浪费了很多空间。

1尽量为字段设置默认值,例如字段is_read用来表示用户是否已经阅读过这条留言,1表示已读,请为它设一个默认值0来代表未读,而不是在日后的查询语句中通过is_read <> 1或者is_read = IS NULL OR is_read = 0来判断。

2你必须理解和开始使用外键,并且明白外键约束的用法,这是维护数据完整性很重要的一环。建立外键的同时你会对程序的业务逻辑有更清晰的认识。正确的使用它防止误删具有依存关系的数据,同时通过级联删除保证在删除的时候不留下任何垃圾。

3千万不要认为冗余字段能够使数据表更有弹性、更灵活。首先来说冗余的字段必然都是允许为NULL的,因为没有适合的代码为这些字段赋值(如果有的话那就不是冗余字段了,对吗)。这只会增加数据表的体积。事实上修改表结构仅需几分钟,真正的麻烦还是来自于为新字段添加相应的业务逻辑。

2

2

1 2 3 4 5