博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库的设计原则
阅读量:5845 次
发布时间:2019-06-18

本文共 710 字,大约阅读时间需要 2 分钟。

之前在大学期间也学过三大范式清楚理论,但是在实际的工作中关于一些表的设计还是模棱两可;我方思自己应该是设计中的一些原则丢了,今天重新复习,将丢掉的原则找回来。

数据库设计的三大范式:

第一范式 1NF:

数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;


自己的理解:主要是在列的维度看,在建立表的时候要保证每一列的值都是单一的、简单的; 如:手机号、邮箱; 如果出现一列如地址列不仅出现了地址还出现了电话,这样的设计存在违反第一范式

第二范式 2NF:

满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情


自己理解:主要是在单表的维度看,比如说一张订单表,一张订单表只能描述订单的信息,而且要知道订单的信息,只能通过订单id查询。

第三范式 3NF:

必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)

自己理解:只要是从多表联合的情况来看, 比如一个订单表关联产品只能关联产品的id去查找产品的信息,不能包括初产品id外的其他产品信息。

小结: 通常情况下这种设计能够保证数据库表结构的简洁,表的关系对开发人员友好,但实际中我们开发的产品是给用户服务的,用户需要更好的体验其中就包括了响应速度,我们在范式原则设计的标志,需要关联各种关系进行查询,这样的情况导致了性能方面出现问题,导致出现矛盾。

结合实际情况:

  • 在符合范式的基础上我们可以根据用户的操作,对于热点的一些数据,可以进行逆范式的设计;通过逆范式的实际来减少关联表的查询,从而提高响应速度,实际中多加权衡。

转载地址:http://sshcx.baihongyu.com/

你可能感兴趣的文章
DNS区域委派与转发
查看>>
Windows Server 2008 RemoteApp---发布应用程序
查看>>
白帽子技术分析会话劫持实战讲解
查看>>
我的友情链接
查看>>
yum的三种方式
查看>>
人生苦短我用python(02)动态加载模块
查看>>
马哥学习----李洋个人笔记----安全和加密
查看>>
常用宏定义
查看>>
Redis分布式缓存安装和使用
查看>>
mysql lamp 配置命令总结
查看>>
rails logger 和 session, cookies, request方面的笔记
查看>>
《linux c编程指南》学习手记2
查看>>
PHP环境搭建:Windows 7下安装配置PHP+Apache+Mysql环境教程以及注意事项
查看>>
20天精通 Windows 8:系列课程资料集
查看>>
html5 <figure> 标签
查看>>
linux的I/O多路转接select的fd_set数据结构和相应FD_宏的实现分析
查看>>
Mysql数据库InnoDB存储引擎的隔离级别
查看>>
TextView 不用获取焦点也能实现跑马灯
查看>>
开源监控软件 Hyperic 的两种插件
查看>>
TOMCAT
查看>>