文档章节

数据库设计的一些个人经验

learn_more
 learn_more
发布于 2015/05/09 18:29
字数 1252
阅读 386
收藏 5

    对于一个Java程序员来说,数据库是必须会基本使用的,那么在使用过程中会不会因为很多次设计不合理而走了很多弯路呢?下面就是我的一些个人数据库设计等的经验,希望对自己后续学习有用。

    1、数据库外键约束

    多表之间关联时,大多是通过外键关联,外键关联我们可以在数据库中创建约束,这样的话,不满足外键约束是不能插入数据库的。然而我们项目中有这样一个问题:项目的事务是加载Controller的方法中的,也就是对每一个请求方法是一个数据库事务,这时,如果我们在事务中是这样操作的,首先插入主表一条记录,那么主表的主键ID可以获取到,然后通过主表的主键ID插入关联表又一条记录,这条件记录用了主表的ID做为外键,最后提交事务。整个动作完成,看似没问题,其实是有问题的。在PostgreSQL下,程序以为你是脏读数据,因为我的事务还没提交那么主键ID就不算生效,那么外键约束必然冲突(Sqlserver不会)。面对这种问题该如何解决呢?

1)其一:外键约束不用强制添加,这种约束是逻辑上的,没必要强加在表中,操作的时候明白这种约束就好。

2)其二:对每个操作都进行事务提交,这种方式很不好,原因是本来一个操作,你却分成几个操作来完成不满足操作的原子性。

3)其三:修改数据库的级别,允许脏读


    2、关于操作时间字段

    对于一些记录操作信息的关系,应该都要又是时间字段,因为他不是资源,他是一种操作审计信息,每个操作都应该有一个时间点,如果有时间点记录,那么信息将会容易整理!


    3、大文件存储

    对于字节文件或者图片,个人建议不要存储在数据库字段中,虽然至今也没有说明从数据库中获取数据比从文件流中获取数据要慢,但是如果存储在数据库中会遇到诸多问题,如下:

1)测试Sql时,经常采用select * from tbl_operator , 这个会把所有数据查询出来,感觉那些大数据查出来相对较慢

2)数据库备份时,或者数据传输时,往往就是这些大数据占用大量的时间,一旦这里出了点错误,整个又回滚。


    4、数据库关联表

1)数据库中关联表的设计一定要注意,建表的时候,可以有重复,但是要保持ID关联的唯一性,也就是任何关联查询都必须用ID。

2)关联表想要关联的时候一定要使用ID,所以设计时只要知道需要关联那么一定要加一个ID。

3)建单表的时候,如果一张表有些字段经常需要查询、有些字段经常需要修改,那么我们应该把这张表纵向分割成两张表,这样的话,在某些经常被改写的字段不会影响查询速度。

4)关联表可以有大的重复,这样做的目的就是保证查询的速度,但是一数据一致性为前提。虽然他违背了数据的三范式,但是他却提高了查询效率,想要解决数据一致性,可以通过后台代码约束;也可以通过触发器建立约束。

5)数据库关联表一对多的时候绝对不能用一的这方去存储多的那方,有时候为了方便,居然把一的那方用一个字段存储多的那方的ID,这些ID就算有逗号隔开,也是极其不方便的。想想也知道,我们我们如何通过这么多的ID去关联呢,有逗号在这里怎么都不好关联。


    5、关于Boolean与int的选择

    个人建议不要使用Boolean类型,因为值太少,导致扩展性太差;关于存储空间的问题,我没有深究,网上也没看到很标准的答案,总之,在这个空间重于时间的世界里,我们应该使用int 替代Boolean。


    以上都是一些个人愚见,如果有什么错误的地方,欢迎指正!



© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

互联网产品数据库设计服务!数据即资产

[服务描述] IT软件信息系统的本质其实在于数据库这块,数据才是一个企业的核心价值所在。关于数据库的设计,在大学学习数据库的时候,听到诸如“第一范式”、“第二范式”、“第三范式”、“...

万里虎
2016/07/20
27
0
[北京]我想要应聘一个PHP开发工程师职位

个人简历 个人资料: 姓名: 白寅辰 电话:15810291302 Email: Skabya@163.com 生日:1990-06-09 身份证:110101199006092013 学历:大专 教育背景: 2005年9月至2008年7月就读于北京市仪器仪...

白寅辰
2012/02/18
499
0
新书出版 |《数据库程序员面试笔试真题库》

新书出版 《数据库程序员面试笔试真题库》 新书出版 《数据库程序员面试笔试真题库》 书名: 数据库程序员面试笔试真题库 作者:李华荣 定价: 69.00元 出版社名称: 机械工业出版社 出版时间:...

小麦苗
2018/08/07
99
0
[济南]求个PHP职位

1.分布式架构师,LeapsPHP开发框架以及YUNCMS内容管理系统以及SuperWebBench(一个快速易用的Web性能测试器)创始人; 2.丰富的web开发经验;精通PHP编程,有6年以上PHP编程工作经验; 3.精通...

灵魂架构师
2013/02/15
456
3
SDCC 2017·上海站震撼来袭,首批讲师和议题大公开

时隔一年,2017年3月17-19日,SDCC 2017·上海站震撼来袭,特开设了三大主题会场,分别是互联网运维开发实战峰会、数据库核心技术与应用实战峰会和互联网应用架构实战峰会,为期三天,为软件...

玄学酱
2018/04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

笔试编程

二维数组中的查找 Q: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一...

沙门行道
27分钟前
61
0
nginx配置访问日志

[root@localhost vhost]# vi proxy.conf server{ listen 80; server_name www.123.com; location / { proxy_pass http://10.133.254.205:8080/; pr......

oschina130111
44分钟前
43
0
免费的https证书能不能用?

在https加密协议备受推崇的时代,站长们都纷纷在为自己的网站部署https证书,没有部署的也差不多都在计划中。而市面上的https证书有免费和付费之分,难免有些用户会为了节约成本而去选择免费...

安信证书
54分钟前
55
0
RN 热更新Node服务cpu占用从80% 优化到20% 记录

RN 热更新Node服务cpu占用从80% 优化到20% 记录 先看优化前后结果对比 优化前 优化后 先聊下背景,过年前半路接手团队的 RN的热更新的服务端开发,服务端采用的是 Express + Mysql,是拿 gith...

hucheng9110
今天
57
0
看懂了责任链模式,你就能明白很多

前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近在看项目代码的时候发现「责任链模式」,于是想花点时间来写写什么是责任链...

Java3y
今天
122
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部