设为首页 收藏本站
查看: 614|回复: 0

[经验分享] mysql数据库开发的经验教训

[复制链接]

尚未签到

发表于 2016-10-18 10:10:23 | 显示全部楼层 |阅读模式
1、数据库设计需要在深入理解需求之后,确定设计方案,并详细考虑到实现每一个功能的实现思路。在开始代码前最好将数据库确定了,本次失误:由于需求改变及初期设计不完善两个原因导致中期连续的更新数据库。引起团队开发人员的反感和郁闷。
2、数据命名需要建立一个统一的命名规则。个人选择的一套规则:
a)数据库表的命名以是名词的复数形式且都为小写,如cities, categories, friends等等
i.如果表名由几个单词组成,则单词间用下划线("_")分割,如subscribed_pois,poi_categories等
ii.表名尽量用全名
iii.表名限制在30个字符内。当表的全名超过30字符时,可用缩写来减少表名的长度,
b)字段名为小写
i.字段名为有意义的单词,或单词的缩写
ii.如果字段由几个单词组成,则单词间用下划线("_")分割,如client_id,post_code等
iii.字段名限制在30个字符内。当字段名超过30字符时,可用缩写来减少字段名的长度,如description --> desc;information --> info;address --> addr等
c)主键、外键命名规则
i.主键按照PK_<table>的规则命名,其中<table>为数据库表名
ii.唯一键按照UK_<table>_<column>的规则命名,其中<table>为数据块表名,<column>为字段名
iii.外键按照FK_<pppp>_<cccc>_<nn>的规则命名,其中<pppp>为父表名,<cccc>为子表名,<nn>为序列号
d)索引命名规则
i.索引须按照IDX_table_<column>_<column>,其中<table>是建立索引的表名,<column>是建立索引的字段名
ii.索引名限制在30个字符内。当索引名超过30字符时,可用缩写来减少索引名的长度,如description --> desc;information --> info;
3、数据库引擎的选择,使用mysql的数据库的都知道,mysql数据库有10种左右的数据库引擎,每种的特点各不相同。这里数据库主要用来查询、修改和更新数据的。因此我们选择使用innodb引擎。【我对各个引擎并不是十分了解,只是大概记得innodb适合应用于数据修改查询频繁的场景,MyISAM比较适合用来做数据分析使用,具体选择各位针对自己应用特点查询选择】
4、数据库编码设置,由于我们是中文网站,我们将数据库的编码统一设置成utf-8格式。这个也是根据个人选择吧,其实应该可以选择gbk的。
5、数据库设计工具,我使用的设计建模工具是PowerDesigner。用过之后感觉确实简单易用。
6、数据库设计时需要注意问题。
     数据库结构争取一次到位,也就是数据库有多少张表,各个表之间的关系时应该考虑周全避免修改,尤其应当避免下面情况的发生:在写实现代码逻辑时才发现现有的数据库设计无法实现或者实现很麻烦的情况。出现这样的情况是数据库设计的缺陷,也容易影响开发者的士气,因为此时数据库结构上的修改以为着需要修改大量的相关代码。建议宁愿晚开工写代码也要多花时间详细分析数据库结构设计是否能满足功能的需求。【当时我们过这个功能需求时,就有些粗心导致后期修改,非常影响士气,大家应该知道程序员是最懒的一种人群。】
    表的设计,确定数据库建模时表的基本属性列,对于部分非基础信息属性可以后期设计时再添加,这个修改起来影响相对较小。当然如果能够一次全部确认最好。Varchar长度的选择在满足条件的情况下最好选择字节的整数倍。
    添加适当冗余数据,并不是满足第三范式的数据库是最好的,相反在数据库的中添加适当的冗余数据,会有很多好处这个看自己的分析和需要。比如我在users表中添加了friend_num,fan_num,blog_num统计数据列。这样在查询用户信息时,就不需要对用户关系表和博客表做统计查询操作。统计数据的修改可以使用触发器来实现。
     拆分表格,当一张表包含的数据列较多时,可以将一张表拆分为两张表。拆分原则是将经常使用【查询和修改】数据列放在一张表里,而相对变化较少的数据放在了另一张表中。比如我将users表拆分成users和user_infos两张表,users中存储的是经常查询或修改的数据信息,而user_infos表中存储的则是相对较少使用或者可以为空的数据。
    建立合适的索引,索引不是越多越好,视需要建立
7、记录数据库修改内容和时间:每当需要修改数据库时,最好能够记录修改的内容【表结构,列属性,存储过程,触发器等等,当然如果能够记录修改原因更好】,命名的时候用时间来命名。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287844-1-1.html 上篇帖子: PowerDesigner设置MYSQL主键自动增长的方法 下篇帖子: (转)Mysql按条件计数的几种方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表