您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数据库表设计的几条准则
数据库表设计的几条准则数据库表设计的几条准则前言:数据库设计在平时的工作是必不可少的,良好的表设计可以让我们查询效率更高,加快网站访问速度,提升用户体验,并且方便于我们查询数据。本篇博客就来聚焦一下,如何设计出高可复用,优良的表结构,从而在实际的工作中使我们写出更好的代码。数据库表设计的几条黄金准则:一:字段的原子性解释:保证每列的原子性,不可分解,意思表达要清楚,不能含糊,高度概括字段的含义,能用一个字段表达清楚的绝不使用第二个字段,可以用两个字段表达清楚的绝不使用一个字段二:主键设计解释:主键不要与业务逻辑有所关联,最好是毫无意义的一串独立不重复的数字,常见的比如UUID或者将主键设置为Auto_increment;三:字段使用次数解释:对于频繁修改的字段(一般是指状态类字段)最好用独立的数字或者单个字母去表示,不用使用汉字或者英文四:字段长度解释:建表的时候,字段长度尽量要比实际业务的字段大3-5个字段左右(考虑到合理性和伸缩性),最好是2的n次方幂值。不能建比实际业务太大的字段长度,这是因为如果字段长度过大,在进行查询的时候索引在B-Tree树上遍历会越耗费时间,从而查询的时间会越久;但是绝对不能建小,否则mysql数据会报错,程序会抛出异常;五:关于外键解释:尽量不要建立外键,保证每个表的独立性。如果非得保持一定的关系,最好是通过id进行关联六:动静分离解释:最好做好静态表和动态表的分离。这里解释一下静态表和动态表的含义,静态表:存储着一些固定不变的资源,比如城市/地区名/国家。动态表:一些频繁修改的表七:关于code值解释:使用数字码或者字母去代替实际的名字,也就是尽量把name转换为code,因为name可能会变(万一变化就会查询处多条数据,从而抛出错误),但是code一般是不会变化的.另一方面,code值存储的字符较少,也能减少数据库的压力八:关于Null值解释:不要有null值,有null值的话,数据库在进行索引的时候查询的时间更久,从而浪费更多的时间!九:关于引擎的选择解释:关于引擎的选择,innodb与myisam,myisam的实际查询速度要比innodb快,因为它不扫面全表,但是myisam不支持事务,没办法保证数据的Acid。选择哪个这就要看自己对于效率和数据稳定性方面的实际业务的取舍了十:资源存储解释:数据库不要存储任何资源文件,比如照片/视频/网站等,可以用文件路径/外链用来代替,这样可以在程序中通过路径,链接等来进行索引十一:与主键相关解释:根据数据库设计三大范式,尽量保证列数据和主键直接相关而不是间接相关十二:关系映射解释:多对一或者一对多的关系,关联一张表最好通过id去建立关系,而不是去做重复数据,这样做最大的好处就是中间的关系表比较清楚明白。十三:预留字段解释:在设计一张表的时候应该预制一个空白字段,用于以后的扩展,因为你也不是确定这张表以后不会扩展。十四:留下单一字段确定是否可用解释:通过一个单一字段去控制表是否可用,比如通常起名为isVaild,预制的含义为0为有效,1为无效,这样便于以后我们去剔除数据或者重整数据,使其成为boolean性质的数据更加便于我们去操控。总结:本篇博文主要介绍了关于数据库设计的几条准则,如何设计出高可复用的数据库和条例清晰的数据库表是我们一直要关注的话题,在实际的开发中,谨遵以上的准则,起码保证自己的表设计出来的标准性,将会大大提升我们的工作效率。荣耀的背后刻着一道六大范式第一范式:对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性.第二范式:要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键。主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成。一旦创建,主键无法改变,外键关联一个表的主键。主外键关联意味着一对多的关系.第三范式:前提必须遵循2NF,要求非主键列互不依赖,消除传递依赖。BCNF范式:前提必须遵循3NF,要求主键列互不依赖。第四范式:禁止多值依赖。第五范式:第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余.第一范式用来消除某个表列存储多个值的冗余现象。第二范式用来处理冗余数据的删除问题。第三范式用来消除没有直接依赖于第一范式和第二范式形成的非主键列。BCNF范式用来消除没有直接依赖于第一范式和第二范式形成的主键列。第四范式用来消除多值依赖。第五范式用来处理消除所有的业务冗余,以独立的表来表达每一个业务需求。
本文标题:数据库表设计的几条准则
链接地址:https://www.777doc.com/doc-7855846 .html