数据库表结构设计规范-浅谈,为啥是浅谈呢,因为主要的观点还是来自原微信公共账号的一篇文章,稍微加了一些自己的看法。
谁来进行数据库的设计?
肯定是具体的开发工程师来进行,开发同学的话,第一业务熟悉度比较高,第二结合OO和ORM的思想,能有比较好的运用关系型数据库的特性。如果是DBA同学的话,虽然对于数据库本身了解比较多,但是对于业务了解较少,很难有比较客观的设计。但是业务上线或者运行期间,需要DBA同学能够重度的加入进来,针对一些性能点和不合理的点进行优化,同事也可以在上线前,针对SQL进行review,在萌芽阶段,就杜绝掉高危的SQL。这样的协作,应该会比较高效。
关系型数据库之父总结的12条规则是什么(找了几条有用的列举了一下)?
信息法则 关系数据库中的所有信息都用唯一的一种方式表示——表中的值。
保证访问法则 依靠表名、主键值和列名的组合,保证能访问每个数据项(这一条其实是数据库表的可读性约束)。
空值的系统化处理 支持空值(NULL),以系统化的方式处理空值,空值不依赖于数据类型。
数据的物理独立性 不管数据库的数据在存储表示或访问方式上怎么变化,应用程序和终端活动都保持着逻辑上的不变性。
数据的逻辑独立性 当对表做了理论上不会损害信息的改变时,应用程序和终端活动都会保持逻辑上的不变性。
数据完整性的独立性 专用于某个关系型数据库的完整性约束必须可以用关系数据库子语言定义,而且可以存储在数据目录中,而非程序中。
分布独立性 不管数据在物理是否分布式存储,或者任何时候改变分布策略,RDBMS的数据操纵子语言必须能使应用程序和终端活动保持逻辑上的不变性。
数据库中到底要不要搞触发器等逻辑?
在应用系统的划分中,应用系统用于编写业务逻辑,承载所有的业务逻辑,然后数据库用来持久化数据,同时提供查询功能,这时候如果有业务逻辑冗余在数据库中,一来数据库干了他不擅长的事情,二来业务逻辑比较分散,导致后续的维护成本变大,如果数据库就是存数据的系统,那就让他尽量保持单一吧。
那些数据不适合放在关系型数据库中?
1、图片后者文件,不适合放在关系型数据库中,可以找第三方存储介质,然后数据库中存储路径即可;
2、临时性的数据或者生命周期很短的数据,例如web应用中的session数据,存活周期很短,没有必要在数据库中持久化存储;
3、日志文件等信息,日志文件保留,对于系统运行的可追溯和可回溯,起到很大的作用,但是不适合保存在数据库中,可以把日志的分析结果或者统计计算进行保留;
数据库中的列的顺序,怎么样比较好?
列的顺序对于表来说无关紧要,但是从习惯上来说,采用“主键+外键+实体数据+非实体数据”这样的顺序对列进行排序显然能得到比较好的可读性。
关于范式和反范式,怎么样比较好?
范式的规范说明,每个字段只包含最小的信息属性,同时模型含有主键,非主键字段依赖主键,模型非主键字段不能相互依赖。
范式化模型的好处在于数据没有冗余,更新非常容易,缺点就是多模型Join的情况下,性能会有问题。
反范式模型的有点在于数据在存储层面有很好的可读性,确定是更新需要维护冗余数据。
范式设计的目的,在于消灭重复数据,避免编写不必要的,用来使重复数据同步的代码,保持表的瘦身,以及减从一张表中读取数据时需要进行的读操作数量, 最大化聚集索引的使用,从而可以进行更优化的数据访问和联结,减少每张表使用的索引数量,因为维护索引的成本很高。
数据库主键,是采用自增还是系统指定的逻辑?
这个可以根据业务场景进行,在大多数情况下使用数据库的自增作为主键,问题不大,但是如果面临分库分表的情况想,这时候就需要有一定的逻辑了,例如同一个表,00和01连个物理表,数据库的主键,是不能重复的。另外,每张表都需要有一个对用户而言有意义的自然键,在特殊情况下也许找不到这样一个项,此时可以使用复合键。这个键在程序中并不会使用其作为唯一标识,但是却可以在对数据库直接进行查询时使用。这样系统生成加业务含义两个结合,在系统和业务设计上做了权衡。
数据库的外键,是仅仅在应用系统中维护,还是数据库层面做强校验(来自知乎:mysqlops)?
外键是否采用看业务应用场景,以及开发成本的,大致列下什么时候适合,什么时候不适合使用:
1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,且不能轻易地水平扩展;若是把数据一致性的控制放到事务中,也即让应用服务器承担此部分的压力,而引用服务器一般都是可以做到轻松地水平的伸缩;
2.传统行业
1>.软件应用的人数有限,换句话说是可控的;
2>.数据库服务器的数据量也一般不会超大,且活跃数据有限;
综合上述2句话描述,也即数据库服务器的性能不是问题,所以不用过多考虑性能的问题;另外,使用外键可以降低开发成本,借助数据库产品自身的触发器可以实现表与关联表之间的数据一致性和更新;最后一点,使用外键的方式,还可以做到开发人员和数据库设计人员的分工,可以为程序员承担更多的工作量;
如何结合业务场景去做数据库设计?
常见的业务场景,可以列举如下,
1、这个表结构是否是核心业务数据,是核心还是过程性的,这决定了对于这个表的关注情况;
2、数据库表的读写情况,以及读写的比例情况;
3、数据总量情况以及增量情况,例如每天新增多少数据,保存过去多少天的数据;
4、数据的散列情况,列入数据表字段很多,但是一条记录中有数据的列不多,或者是全部都有,这种都会影响到性能情况;
如何提升insert的效率?
1、可以考虑使用多值插入,类似这种形式,insert into XXX_table() values(),(),(),但是要注意SQL语句形成文本的大小不要超过数据库的限制;
2、提交事务,可以批量提交,例如如果ORM框架使用的是iBatis,可以考虑使用batchInsert功能,这样的SQL语句是分开的,但是提交是一次性的;
3、总体,就是减少和数据库之间的交互,避免没必要的网络开销;
PS:
参照信息来自公众账号信息如下
『数据库开发』分享 数据库 相关技术文章、工具资源、精选课程、热点资讯,欢迎关注。微信号:{ DBDevs }
相关推荐
孙允中临证实践录.pdf
Rqalpha-myquant-learning对开源项目Rqalpha的改造,在应用上面更适合个人的应用。学习量化策略,对量化策略进行开发调试。2018-05-25程序更新集成大鱼金融提供的分钟线回测Mod,用来提供Jaqs分钟线数据源,测试程序通过。目前的改造情况1.增加ats.main.py,来驱动起回测,使程序可以使用pycharm进行开发调试2.增加批量回测功能3.在AlgoTradeConfig中进行配置回测的策略和所需要的参数信息,参数信息通过excel文件进行配置4.在ats.main.py中设置参数为batch,运行回测,会将输出的.csv文件放在cvsResult目录下,将回测的图片保存在picResult目录下。5.读取回测的.csv文件,提取账户信息,可以将不同参数回测的结果输出在同一张图片上,更加清晰的看清同一个策略,不同参数所带来的变化。6.从广发信号站点获取历史交易信号(站点已停止,此处无法继续)7.增加通用函数的封装,现阶段增加了对TA_LIB的调用封装(未完整完成)8.增加了对增量资金定投的情况的模拟,用
航班背景随着国内民航的不断发展,航空出行已经成为人们比较普遍的出行方式,但是航班延误却成为旅客们比较头疼的问题。台风,雾霾或飞机故障等因素都有可能导致大面积航班延误的情况。大面积延误给旅客出行带来很多不便,如何在计划起飞前2小时预测航班延误情况,让出行旅客更好的规划出行方式,成为一个重大课题。要求提前2小时(航班计划起飞时间前2小时),预测航班是否会延误3小时以上(给出延误3小时以上的概率)
comsol变压器绝缘油中流注放电仿真,使用PDE模块建立MIT飘逸扩散模型。 模型到手即用,提供MIT鼻祖lunwen中文版,及相关学习笔记资料。 流注放电,绝缘油,油纸绝缘。
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
云南大数据交通太阳的云南大数据交通
comsol激光打孔(不通)水平集两相流仿真模型,涉及温度场流场水平集, 模型为复现模型,仅供学习,可自己更材料功率等参数 爽快确认模型无误并收送变形几何三维打孔模型或水平集抛光模型。
哈工深 自适应滤波课堂笔记
Django框架实现学生信息管理系统 总体概括 注册流程 首先进行输入用户名(邮箱)、密码以及验证码,输入完之后点击注册按钮。如果输入的不正确,提示错误信息。 如果一切信息填写正确无误,调用STMP模块发送激活邮件,用户必须要点击接收到邮箱链接,进行邮件激活后才方可登陆。 即使注册成功,没有激活的用户也不能登陆,用户以get的方式直接重定向到注册页面。 注册登录: 用户能在系统中进行登陆注册和忘记密码进行找回的功能。 个人中心:修改头像,修改密码,修改邮箱,可以看到我的信息。 日志记录: 记录后台人员的操作,方便发现BUG和查看各项调用进行时间。 导航栏:学生信息中有基本信息、年级及成绩信息的模块,能够排序筛选等功能。 多选操作: 可以选择多条记录进行删除操作,还可以在课程列表页可以对不同课程进行排序。 数据页码: 可以设置各项数据在每一页中显示的数量多少,进行翻页功能。 模块列表页: 能够有过滤器功能,在范围内进行查看数据。还能将数据导出为csv,x
车辆主动悬架防侧翻控制 利用Simulink和Carsim进行联合仿真,搭建主动悬架以及防倾杆模型,在不同转角工况下进行仿真试验,设置滑模等控制器计算维持车辆侧倾稳定性所需的力矩,将力矩分配到各个悬架实现控制效果。 控制效果良好,保证运行成功。 项目报告撰写请单独。
计算机系毕业设计
资源描述: HTML5实现好看的MT外卖订餐网站源码,好看的酷炫的MT外卖订餐网站源码,酷炫的MT外卖订餐网站源码模板,HTML酷炫的MT外卖订餐网站源码,内置酷炫的动画,界面干净整洁,页面主题,全方位介绍内容,可以拆分多个想要的页面,可以扩展自己想要的,注释完整,代码规范,各种风格都有,代码上手简单,代码独立,可以直接运行使用。也可直接预览效果。 资源使用: 点击 index.html 直接查看效果
MDPI下的sensors模板,.docx格式
新医林改错《内经·素问》分册.pdf
命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork基金2.0命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork环境准备运行环境Python3 所需的软件包requests prettytable colorama基金自选修改my_jijin.txt文本文件,每行都是一个您关注的基金代码启动方式python3 main.py
NiuCloud-Admin-SAAS 是一款快速开发SaaS通用管理系统后台框架, 前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构,后台结合PHP8、Java SDK、Python等主流后端语言搭建是一款快速可以开发企业级应用的软件系统。
脉振方波高频注入代码+增强型滑膜esmo代码,永磁同步电机高频注入程序 资料为C代码一份,大厂代码,可运行,经典流传; 配套一篇代码对应的说明文档,详细算法说明; 脉振方波注入方法相对于脉振正弦信号注入的形式,信号处理的过程少了一些滤波器 ,计算更简单,并且由于信号频段较高,可以实现更高的动态响应能力。 增强滑膜控制;
逆变器下垂控制,微电网逆变器孤岛下垂控制,波形输出完美
multisim学习电路基础视频共42讲(个人觉得超赞)5G提取方式是百度网盘分享地址
基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。项目初始化npm install启动开发环境npm run dev项目打包上线npm run buildLints和fixes文件npm run lint