文档章节

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

learn_more
 learn_more
发布于 2015/05/09 18:29
字数 1252
阅读 330
收藏 5
点赞 1
评论 0

    对于一个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
粉丝 90
博文 240
码字总数 210196
作品 0
深圳
程序员
Web自动化测试-实战项目通关版

http://v.youku.com/vshow/idXMjE1NjU1ODky.html 注意:在优酷上视频,由于在上传时,优酷自动压缩了视频大小,所以会不清楚,我们的视频是高清视频。 课程介绍 本套课程将带您一起学习自动化...

华章小编辑 ⋅ 2010/11/18 ⋅ 0

SDCC 2017·上海站震撼来袭,首批讲师和议题大公开

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

玄学酱 ⋅ 04/19 ⋅ 0

应届生面试:面试官比较在乎的代码量项目还是实操基础?

一般来说,花半年时间培养人 ,希望你能留2年以上的公司看个人能力和基础。 希望你能马上上手做项目,对你期望不高的看项目。 但往往是把基础好的人带起来有项目经验后跑掉了。 而有项目经验...

⋅ 2017/12/22 ⋅ 0

架构师向左,项目经理向右?[转]

最近开始了新一轮的换工作历程,投简历也集中在了架构师和项目经理这两个角色中,当然,架构师很多时候跟项目经理,team leader,高级软件工程师是重合的,当然,我指的是国内了,所谓的架构师就是更...

jqbmaster ⋅ 2012/05/26 ⋅ 13

用户历史数据统计,如何更好的设计数据库

首先 系统已经编写成功,并且运行良好。 但是现在要统计用户在历史信息,比如在 “一天前用户都经验经验所所是 多少??”,用户在一个月前都昵称是什么??等等 可是刚开始开发系统时候未考...

fmxzhou ⋅ 2011/06/20 ⋅ 1

Java程序员应该掌握哪些技术?

Java是热门的语言之一,2014年7月份TIOBE编程语排名Java排名第二,仅在C语言之后。Java可以用来开发web应用和桌面应用,更重要的是Java具有跨平台性:write once, run everywhere。 Java相对...

荔枝壳 ⋅ 2014/07/28 ⋅ 14

0设计经验,如何找到一份UX设计师的工作?

UX (User Design) 设计师作为全球最受欢迎的高薪工作之一,截止至2017年,一名高级用户体验设计师的年薪已平均高达86,071美元,这也是为什么广大年青工作者争相进入UX设计行业的原因。但是,...

mo311 ⋅ 02/27 ⋅ 0

Delphi开发能力自我评测

Delphi开发能力自我评测日期:2008年11月23日 作者: 人气:3159 查看:[大字体 中字体 小字体](注:以下内容都是作者个人的学习经验和体会,仅代表个人观点。针对Win32下的Delphi程序开发而...

vga ⋅ 2016/08/09 ⋅ 0

基于SpringBoot构建个人博客

最近心血来潮,想与大家分享一下SpringBoot应用实战,以一个简单的博客项目来带领大家使用SpringBoot,让大家体会SpringBoot的简单。 本系列视频总共分为8节,会手把手教大家写一个博客系统,...

水门_ ⋅ 2017/12/18 ⋅ 0

博客园Android客户端--AndroidCnblogs

欢迎加入博客园Android客户端的开发,我是作者walkingp。这份代码是博客园Android客户端的全部源码,同时包含了部分设计图及数据库设计文档,目前博客园Android客户端已经发布了两个版本,由...

walkingp ⋅ 2012/06/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 6分钟前 ⋅ 0

前阿里P8架构师:精准定制Java架构师学习计划!

可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,除了掌握J...

java高级架构牛人 ⋅ 8分钟前 ⋅ 0

zookeper学习

https://blog.csdn.net/u012152619/article/category/6470028

~少司命~ ⋅ 10分钟前 ⋅ 0

Spring MVC ,JSON,JQuery,不懂JQuery,跳过了

/spring-mvc-study/src/main/webapp/course_json.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD ......

颖伙虫 ⋅ 10分钟前 ⋅ 0

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

阿里云云栖社区 ⋅ 11分钟前 ⋅ 0

mahout demo

package com.datamine.CollaborativeFiltering.mysql; import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; import org.apache.mahout.cf.taste.impl.recommend......

xiaomin0322 ⋅ 12分钟前 ⋅ 0

red hat openstack 12配置要求

安装 openstack 之前,一般要规划整个系统中,到底要多少台机器来参与openstack, 根据rhosp12的官方文档: 最低要求是3台物理机,1台作为director,一台作为 controller ,一台作为computer....

tututu_jiang ⋅ 13分钟前 ⋅ 0

Rocket-Chip在GitHub上的各个源码

在github上通过搜索Rocket-chip可以得到36个结果:其中 https://github.com/freechipsproject/rocket-chip https://github.com/ucb-bar/riscv-boom https://github.com/ucb-bar/fpga-zynq (......

whoisliang ⋅ 19分钟前 ⋅ 0

【HAVENT原创】CentOS 6.5 下 Nginx 的安装与配置

nginx是轻量级的Web服务器、反向代理服务器及邮件服务器,具有占用内存少,并发能力强的优点,已被广泛应用。本文介绍目前最新版本 1.12.2 的安装。 各版本nginx下载地址:http://nginx.org/...

HAVENT ⋅ 25分钟前 ⋅ 0

查看linux系统重启之前的log -- last_kmsg

当 Linux Kernel 出现 BUG 的时候,后走入 panic flow,这个时候由于 Kernel 出现了严重的问题,adbd 也无法响应 adb 连接请求,这个时候想透过读取 Kernel Log Buffer 来看 Kernel Log 是不...

zyzzu ⋅ 26分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部