数据模型设计

数据:是符号。例如 张三

模型:现实世界事与物特征的抽象与模拟。如飞机模型、空气动力模型。

数据模型:通过对现实世界的事与物主要特征的分析、抽象,为信息系统的实施提供数据存取的数据结构以及相应的约束。 数据模型的要素由操作、数据结构以及约束。通常情况下我们在数据模型设计的时候考虑最多的是数据结构而忽视了其他两个要素。

根据数据模型的应用层次可以分为概念数据模型模型(概念模型)、逻辑数据模型(数据模型)、以及物理数据模型(物理模型)。

概念模型:从业务的角度来考虑问题,主要用来描述事与物的概念化结构,其用途是统一业务概念,作为业务人员和技术人员之间沟通的桥梁。其描述方法有ER图、Merise图、Barker图等。在建立概念模型的过程中主要考虑的是现实世界中的事与物以及他们之间的关系而不用关注事与物的具体属性。

逻辑数据模型:从数据库的角度来考虑问题,在概念模型的基础上对事与物属性的细化以及对象整合。其描述方法有ER图。在这个层面数据模型可以分为层次、网状、关系模型。

物理模型:面向具体的物理计算环境。

 设计数据模型主要考虑的因素:

1:是否满足现有的业务需求。

2:是否易于应对未来的可能的业务变更。好的扩展性、很强的灵活性。

3:是否高效。对开发人员来是否简单高效,运行是否高效。

 设计数据模型的感悟:

1:关于扩展性: 可以通过横表转纵表的方式。 视图可以为开发人员提供一个接口屏蔽底层具体实现的复杂性同时提高系统的扩展性。

2:关于数据源 :要有元数据的概念同样的数据尽量在一个源头去取,这对数据的维护以及数据一致性都很有好处。

3:关于抽象: 抽象是我们分析问题解决问题非常重要的手段,抽象能力的高低充分体现了数据模型设计人员的水平。        

4:关于动静分离: 动静是相对的没有绝对的动与静。在实体属性的选取、表空间等方面考虑动态数据与静态数据分离。 用一个例子来说明这个问题吧。 在电子商务系统中从灵活的角度来看后端管理系统会涉及多个表,但是对于前端展现来说如果从多个表获取数据的话那么在高并发的情况下会严重的影响性能。于是乎就有了发布这个环节。发布的目的除了对信息进行审核外,还把相关的信息发布到一个表或者缓存中再或者生成静态页面,如果使用oralce的话还可以使用物化视图。

5:关于数据字典: 要重视数据字典这对开发人员理解数据模型的设计以及以后的维护都非常重要。
6:如何进行数据模型设计

【01】首先是要了解业务然后建立概念模型,确定实体以及实体关系。

【02】在概念模型的基础上生成逻辑模型,确定实体属性,标准化数据(消除多值字段达到第一范式;消除部分依赖达到第二范式;消除传递依赖达到第三范式)。

【03】模型验证:通过具体的业务来验证模型是否能满足要求。

【04】在逻辑模型的基础上生产物理模型。

7:三少: 整个模型中表应该尽量的少;在一个表中字段应该尽量的少同时复合主键字段应尽量的少
8:如果在大数据量或者高并发的情况下,要充分考虑数据库的压力,事先要考虑哪些表可能是热表。要尽量的降低模块的耦合。如果使用的是oracle RAC 的话要考虑一下多实例竞争的问题,不同的模块访问不同的实例。
9:一定要做压力测试、要做充分的压力测试,要不上线后会死的很惨,移动总部的一个web项目应为没有做充分的压力测试,导致上线后不的不挂维护页面,动用了n多的资源去解决问题。

转载于:https://www.cnblogs.com/yxzhangustcer/archive/2010/03/10/1682345.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优课在线 嵌入式系统(胡威)2018春季测验 参考解析

一、单选题 (共 20.00 分) μCOS-II操作系统属于( )。 A.一般实时操作系统 B.非嵌入式实时操作系统 C.占先式实时操作系统 D.非占先式实时操作系统 正确答案:C 寄存器R13除了可以做通用寄存器外,还可以做( &#xff0…

JBoss Wildfly 8.1上的HawtIO

HawtIO为基于JVM的中间件提供了令人赞叹的视觉效果。 它是应用程序的统一控制台,否则将不得不构建自己的糟糕的Web控制台。 老实说,它们的构建方式各不相同,技术不同,用户体验不同,并且都围绕一种可怕的方式来尝试在QA…

Maven打包时去掉项目版本号

Maven打包时去掉项目版本号 Maven打包后&#xff0c;jar或war文件名里带有版本号信息&#xff0c;如projectname0.0.1-SNAPSHOT.jar等&#xff0c;怎么去掉呢&#xff1f; 解决办法&#xff1a; 打开项目pom.xml文件&#xff0c;在<build> </build>标签内加入如下…

jsp实现上一页下一页翻页功能

前段时间一直忙于期末考试和找实习&#xff0c;好久没写博客了。 这段时间做了个小项目&#xff0c;包含了翻页和富文本编辑器Ueditor的两个知识点,Ueditor玩的还不是很深&#xff0c;打算玩深后再写篇博客。 要实现翻页功能&#xff0c;只需要设置一个pageIndex即可&#xf…

学习笔记之postgresql

/*************************************************************************创建人&#xff1a;LYK 创建时间&#xff1a;2019/05/05 14:47IDE: vs2013 库版本&#xff1a;32位 静态库数据库管理平台 pgAdmin III -- postgresql 注意事项&#xff1a;1&#xff0c;添加头文件…

Delphi关于多线程同步的一些方法

(注&#xff1a;本文为转载 http://hi.baidu.com/navy1130/blog/item/468fcdc448794fce38db49ee.html)线程是进程内一个相对独立的、可调度的执行单元。一个应用可以有一个主线程&#xff0c;一个主线程可以有多个子线程&#xff0c;子线程还可以有自己的子线程&#xff0c;这…

自定义Cassandra数据类型

在博客文章《 从Java连接到Cassandra》中 &#xff0c;我提到了用Java 实现的Cassandra Java开发人员的一个优势是能够创建自定义 Cassandra数据类型 。 在这篇文章中&#xff0c;我将详细介绍如何执行此操作。 Cassandra具有许多内置的数据类型 &#xff0c;但是在某些情况下…

Linux下如何查看版本信息

Linux下如何查看版本信息 Linux下如何查看版本信息&#xff0c; 包括位数、版本信息以及CPU内核信息、CPU具体型号等等&#xff0c;整个CPU信息一目了然。一些常用的 Linux 命令 1、# uname &#xff0d;a &#xff08;Linux查看版本当前操作系统内核信息&#xff09; [hadoopa…

Docker的安装及注意事项

Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#…

基于CSS的个人网页

前端时间做的CSS作业&#xff1a;基于CSS的个人网页 基于CSS的个人网页 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>吴广林的个人博客</title><link rel"styles…

不重复int数组里找不存在的值

有这么一道题&#xff0c;一个int数组叫A&#xff0c;里面的数是不重复的&#xff0c;从中拿出一个值&#xff0c;剩下的数组就B&#xff0c;问拿出的是哪个数。 一般人都能想到把A数组值相加&#xff0c;假设和为sum1&#xff0c;再把B数组值相加&#xff0c;设其和为sum2&…

Java验证(javafx)

验证是核心javafx框架所缺少的一件事。 为了填补这一空白&#xff0c; controlsfx中已经存在一个第三方验证库 。 但是&#xff0c;我有一个问题&#xff1a;它不是在考虑FXML的情况下创建的。 这并不是说它不是一个很好的库&#xff0c;只是错过了这个细节&#xff0c;对我来说…

WAP自助建站 我编程之路的启蒙

如题所示的这篇文章是我心血来潮在网上搜索到的&#xff0c;写的挺让我感同身受的&#xff0c;不妨先看一下原文吧。 原文 不知是偶然还是“冥冥定数”&#xff0c;最后一次访问娃派建站&#xff08;wap.ai&#xff09;已有数十月之久了&#xff0c;突然心血来潮想看看曾经的建…

React事件绑定几种方法测试

前提 es6写法的类方法默认没有绑定this&#xff0c;不手动绑定this值为undefined。 因此讨论以下几种绑定方式。 一、构造函数constructor中用bind绑定 class App extends Component {constructor (props) {super(props)this.state {t: t}// this.bind1 this.bind1.bind(…

初始socket模块和巧解粘包问题

1.什么是socket&#xff1f; 两个进程如果需要进行通讯最基本的一个前提能够唯一的标示一个进程&#xff0c;在本地进程通讯中我们可以使用PID来唯一标示一个进程&#xff0c;但PID只在本地唯一&#xff0c;网络中的两个进程PID冲突几率很大&#xff0c;这时候我们需要另辟它径…

100325 雨

回家以后怎么样&#xff1f; 感冒没有严重吧&#xff1f; 你也多喝水 我好些了 鼻涕不像昨天那么多了 就是嗓子疼 药吃了 喝了不少水了转载于:https://www.cnblogs.com/loverain/archive/2010/03/25/1694567.html

Java的挥发性修饰符

不久前&#xff0c;我编写了一个Java servlet过滤器&#xff0c;该过滤器在其init函数中加载配置&#xff08;基于web.xml的参数&#xff09;。 筛选器的配置缓存在私有字段中。 我在字段上设置了volatile修饰符。 后来&#xff0c;当我检查Sonar公司以查看是否在代码中发现任…

webpack常用loader和plugin及打包速度优化

优化 或 也可以用&#xff1a; 备用&#xff1a; 慎用的配置&#xff0c;用的不好会增加打包时间&#xff1a; 代码丑化插件&#xff1a; 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

nvl 函数

nvl(oie.is_eval,N) <> Y 理解成 oie.is_eval <> Y 转载于:https://www.cnblogs.com/wangchuanfu/p/10818274.html

在自定义HttpHandler中如何使用Session

今天我写了一段程序在HttpHandler中使用Session。结果Session对象报错&#xff0c;“未将对象引用设置到对象的实例”&#xff0c;我郁闷半天&#xff0c;不知道怎么回事。结果我google了一下&#xff0c;原来也有人碰到过这种情况哦。呵呵。网上也有很多人说出了这些问题。解决…