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

对于一个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。

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

时间: 2024-10-26 23:43:24

数据库设计的一些个人经验的相关文章

数据库设计教程系列——相关知识点整理

一.教程概述 此数据库设计教程是笔者参考网上资料.相关书籍,以及加上自己多年做数据库设计相关工作的经验积累写就. 数据库设计教程在网上已经有大量类似的资料,并且该领域有不少专业书籍,珠玉在前,心有戚戚. 但这作为唯心六艺之一,我还是希望能够在整理知识的同时,写出自己的一些内容,如果能够对读者 有所帮助,那就最好不过了,谢谢. 本教程主要基于关系型数据库进行讲解,对于维度数据库也会视情况有所涉猎. 下面是整个教程涉及的知识点整理,在撰写教程的过程中,如果有改动,也会调整更新此图. 二.知识点整理

数据库设计中的一些原则

1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体. 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体. 这里的实体可以理解为基本表.明确这种对应关系后,对我们设计录入界面大有好处. [例1]:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表.社会关系表.工作简历表.   这就是"一张原始单证对应多个实体"的典型例子. 2.

Typecho数据库设计

主体结构 单用户博客数据量如何 Typecho的定位是单用户blog系统,在我们设计它的数据库之前有必要对个人博客系统的负载情况做一些评估.我有一个朋友,是一个勤奋的blogger,alexa排名在十万以上,日IP在10w左右.他选择了wordpress作为主要系统,我们知道wordpress系统的一个主页乐观的估计也有20余次查询.但这依然无法阻挡这款程序的流行,在去年对全球top10 blogger所使用的系统调查中,wordpress比其他系统有着明显的优势.很显然,wordpress的负

11 个重要的数据库设计规则

英文原文: 11 Important Database designing rules 简介 在您开始阅读这篇文章之前,我得明确地告诉您,我并不是一个数据库设计领域的大师.以下列出的 11 点是我对自己在平时项目实践和阅读中学习到的经验总结出来的个人见解.我个人认为它们对我的数据库设计提供了很大的帮助.实属一家之言,欢迎拍砖 : ) 我之所以写下这篇这么完整的文章是因为,很多开发者一参与到数据库设计,就会很自然地把 “三范式” 当作银弹一样来使用.他们往往认为遵循这个规范就是数据库设计的唯一标准

写给开发者看的关系型数据库设计

目录 一 Codd的RDBMS12法则——RDBMS的起源 二 关系型数据库设计阶段 三 设计原则 四 命名规则 数据库设计,一个软件项目成功的基石.很多从业人员都认为,数据库设计其实不那么重要.现实中的情景也相当雷同,开发人员的数量是数据库设计人员的数倍.多数人使用数据库中的一部分,所以也会把数据库设计想的如此简单.其实不然,数据库设计也是门学问. 从笔者的经历看来,笔者更赞成在项目早期由开发者进行数据库设计(后期调优需要DBA).根据笔者的项目经验,一个精通OOP和ORM的开发者,设计的数据

数据库设计原则(摘抄)

注:     设计数据库是实现实际业务的重要一步,合理设计表结构,规划表字段,建立合理关系为后期减少了开发,运营,维护成本.认真了解和学习设计知识是必要的,如下摘抄了部分经验总结. 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体. 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体. 这里的实体可以理解为基本表.明确这种对应关系后,对我们设计录入界面大有好处

(zz)数据库设计中的14个技巧

1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实 体,或多张原始单证对应一个实体.这里的实体可以理解为基本表.明确这种对应关系后,对我们设计 录入界面大有好处. [例1]:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表.社会 关系表.工作简历表.这就是“一张原始单证对应多个实体”的典型例子. 2. 主键与外键

[转]数据库设计中的常用技巧

本文介绍了数据库设计中的14个技巧,这是许多人在大量的数据库分析与设计实践中,逐步总结出来的-- 下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的.对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握.并逐步做到:在应用中发展,在发展中应用. 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个

数据库设计(理解篇)

1. 原始单据与实体之间的关系(原始单据可以理解为整个录入界面的数据,这里的实体可以理解为基本表) 可以是一对一.一对多.多对多的关系. 在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体(基本表). 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体. 明确这种对应关系后,对我们设计录入界面大有好处. [例1]:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表.社会关系表.工作简历表.这就是“一张原始单