德国建设部网站台州网站设计飞速

pingmian/2025/10/7 22:03:04/文章来源:
德国建设部网站,台州网站设计飞速,网站开发部,中国公司100强排名在建立数据设计模型时#xff0c;我们需要注意表设计与类设计之间的差别#xff0c;这事实上是数据模型与对象模型之间的差别。 数据模型与对象模型 我们首先来分析在设计时对冗余的考虑。前面在讲解数据分析模型时就提及#xff0c;在确定数据项模型时#xff0c;需要遵…在建立数据设计模型时我们需要注意表设计与类设计之间的差别这事实上是数据模型与对象模型之间的差别。 数据模型与对象模型 我们首先来分析在设计时对冗余的考虑。前面在讲解数据分析模型时就提及在确定数据项模型时需要遵循数据库理论的设计范式其中一个目的是避免数据冗余。但是避免了数据冗余并不意味着代码能支持重用。例如员工表与客户表都定义了“电子邮件”这个属性列。该属性列在业务含义上是完全相同的但在数据表设计时却只能分属于两个表不同的列因为对于数据表而言“电子邮件”列其实是原子的属于 varchar 类型。 如果针对业务概念建立对象模型需要遵循“高内聚低耦合”的设计原则如果发现多个属性具有较强的相关性需要将其整合起来共同定义一个类。例如国家、城市、街道和邮政编码等属性它们都与地址相关共同组成完整的地址概念在对象模型中就可以定义 Address 类。 在数据模型中关系数据表并不支持自定义类型在设计时又需要支持一范式1NF即确保数据表的每一列保持原子性就必须将这个内聚的组合概念进行拆分。例如地址就不能作为一个整体被定义为数据表的一个列因为系统需要访问地址中的城市信息如果仅设计为一个地址列就违背了一范式。这时地址在数据模型中就成了一个分散的概念。若要保证其概念完整性唯一的解决方案是将地址定义为一个独立的数据表但这又会增加数据模型的复杂性更会因为引入不必要的表关联而影响数据库的访问性能。正如 Jimmy Nilsson 所说“关系模型是用来处理表格类型的基本数据的这既有好的一面也有坏的一面。面向对象模型很善于处理复杂数据。” 针对同样的业务概念我们可以对比数据模型与对象模型之间的差异。例如员工、客户与地址的数据模型如下图所示 虽然员工与客户都定义了诸如 country、city 等地址信息但它们是分散的并被定义为数据表提供的基本类型无法实现两个表对地址概念的重用。对象模型就完全不同了它可以引入细粒度的类型定义来体现丰富的领域概念封装归属于自己的业务逻辑同时还提供了恰如其分的重用粒度 对比这两个模型组成数据模型的数据表是一个扁平的数据结构数据表中的每一列都是数据库的基本类型而组成领域模型的类则具有嵌套的层次结构。在设计时更倾向于建立细粒度对象来表达一个高度内聚的概念如 Address 与 ZipCode 类。 在建立数据设计模型时与数据表对应的持久化对象往往难以表达业务的约束规则。例如运输Shipping与运输地址ShippingAddress满足“每个 Shipping 必须**有且只有一个 **ShippingAddress”这一业务规则。在数据模型中可以通过在运输与运输地址之间创建关系来表达例如在可视化的 ER 图中用虚线代表任选用实线代表强制。但这种关系连线虽然表达了这种约束关系却没法显式地体现这一业务概念除非在数据模型图中采用注解来说明。如果采用对象模型就可以通过引入 ShippingSpecification 这个类型来体现这种约束逻辑。 从设计模型看构成数据模型主体的数据库与数据表明显存在粒度和边界的局限性。这种局限性在一定程度上影响了数据建模的质量。关系数据库的设计范式并没有从类型复用的角度去规定数据表的设计由于关系表不支持自定义类型无法支持 Jimmy Nilsson 所说的“复杂数据”因此可以认为在数据模型中数据表才是最小的复用单元。由于建立一个数据表存在 I/O 成本会影响数据库的访问性能因而在数据模型中通常不建议为细粒度但又是高内聚的数据类型单独建立数据表如前面给出的“地址”的例子。换言之关系数据库的设计范式仅仅从数据冗余角度给予了设计约束如果照搬数据模型去建立类模型就有可能无法避免代码冗余。 对于一个数据库而言关系数据库的表结构是扁平的数据表之间可以建立关联也可以隐式地通过一对多的关系表达具有层级的父子关系但数据模型自身却无法体现这种层次。下图是 Apache OFBiz 项目中关于运输相关的数据模型 这个数据模型一共定义了 31 张数据表这些表对应的业务概念上存在主从关系以及强弱不同的耦合关系。例如Shipment 表显然是主表诸如 ShipmentAttribute、ShipmentStatus、ShipmentType 与 ShipmentItem 等都是围绕着 Shipment 表建立的从表。但是数据模型自身却无法体现这种主从关系。我们之所以能识别出这种主从关系其实是基于对数据表名的语义推断。通过语义推断我们也能判断 Shipment 与 ShipmentItem 等表之间的关系要明显强于 Shipment 与 PicklistBin、Picklist、PicklistRole 等表之间的关系但数据模型并没有清晰地表达这种边界。 究其原因在关系数据库的数据模型中数据库是最大的复用单元。设计数据库时往往是一个库对应一个子系统或者一个微服务而在数据库和数据表之间缺少合适粒度的概念去维护数据实体的边界。它缺少领域驱动设计引入的聚合Aggregate、模块Module等各种粒度的边界概念。显然扁平的关系型数据结构无法体现领域概念中丰富的概念层次。 NoSQL 的数据设计模型 NoSQL 数据库的设计模型就截然不同了尤其是文档型的 NoSQL 数据库能够通过定义嵌套关系的无模式数据表相当自然地体现对象图Object Graph的结构。因此在针对 NoSQL 数据库建立数据设计模型时就可以直接运用领域建模的设计原则如引入聚合的概念来设计表模型。 Martin Fowler 在文章 Aggregate Oriented Database 中指出NoSQL 数据库需要有效地将数据存储在分布式集群之上而他则建议存储的基本数据单元应为领域驱动设计中的聚合Aggregate聚合的粒度天然地满足了诸如数据分片这样的分布式策略。Martin Fowler 以订单为例说明了关系数据库与 NoSQL 数据库的不同如下图所示 一个订单对象在关系数据库中需要被分解为多张数据表但对于诸如 MongoDB、Elasticsearch 这样的数据库则可以认为是一个聚合。因此在设计 NoSQL 的数据模型时可以运用领域驱动设计中聚合的设计原则。 我在设计一个报表系统的报表元数据管理功能时选择了 Elasticsearch 作为存储元数据的数据库。在设计元数据管理的数据模型时就通过聚合来思考元数据中 ReportCategory、Report 与 QueryCondition 三者之间的关系。 从业务完整性看Report 虽属于 ReportCategory但二者之间并没有强烈的约束关系即不存在业务上的不变量Invariant。ReportCategory 可以没有 Report成为一个空的分类我们也可以撇开 ReportCategory单独查询所有的 Report。倘若我们将 Report 放到 ReportCategory 聚合中由于 Report 可能会被单独调用聚合的边界保护反而成为了障碍这样的设计并不合理。因此ReportCategory 和 Report 应该属于两个不同的聚合。 分析 QueryCondition 与 Report 之间的关系又有不同。当 QueryCondition 缺少 Report 对象后还有存在意义吗答案一目了然没有 Report就没有 QueryCondition。皮之不存毛将焉附因此可以确定 Report 与 QueryCondition 应属于同一个聚合。于是我们得到如下模型 这样设计获得的模型显然是一个领域模型。当我们将其以 JSON 的格式持久化到 Elasticsearch 的数据表时又可以认为该模型同时就是 Elasticsearch 的数据模型。 这种面向文档的嵌套层次结构与对象模型更为相配并在多数时候采用 JSON 结构来表达数据结构。JSON 数据结构在许多产品和项目中得到运用一些传统的关系型数据库也开始向这个方向靠拢。例如目前流行的开源关系数据库如 MySQL 和 PostgreSQL都已支持 JSON 这样的文档型数据结构。

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

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

相关文章

本地网站建设软件网站内容优化细节

游戏存档 0.建立游戏存档类 1.建立存档 命名要用规律,读档时根据命名调用 2.读取存档 这里是用存档时间(秒)验证是否有存档成功。 两种鼠标位置射线检测方法 两种适用性未使用大量项目验证,为个人观点 1.适用于游戏中 2.适用于…

广州市南沙建设局网站什么是网站建设有哪些具体内容

文章目录 栈,堆stack object的生命周期static local object的生命周期global object的生命周期heap objects 的生命期new:先分配memory,再调用构造函数delete: 先调用析构函数,再释放 memory动态分配所得的内存块,in V…

dw做网站首页代码有没有catia做幕墙的网站

一、章节内容概述 把管理科学的潜力转变为绩效,主要取决于管理者。要做到这一点,管理者必须理解管理科学是什么以及能够做什么。管理者必须明白,管理科学固有的特殊局限性在很大程度上源于自身的起源和历史。但最重要的是,管理者…

织梦可以做移动网站吗自己做网站引用别人的电影

我们在使用python过程中,为了避免错误删除,会选择做好一个序列后可以插入另外的序列中做为新序列的一部分内容。方便完成一些复杂的工程或多个片段分别编辑后再串成一个完整工程的操作。之前小编向大家介绍了在序列中起到累计作用的reduce函数(https://w…

制作微网站的平台有哪些建各企业网站多少钱

标哥是我的大学老师。标哥也是我们很多学生公认上课非常好的老师,最近标哥突然想见见我这个年轻仔,让我去广州见见他,当然,并不是说他不能来深圳,见面的时候标哥特意给我们解释了一遍,我肯定是能理解他的良…

thinkphp 网站模版合肥html5网站建设

AI智能开发!网站一键复刻!设计稿秒变成品! 相信对很多关注低代码和AI技术的小伙伴来说, 都觉得像这些还只是停留在概念上的技术,很难落地实践。 但是在「织信」已经全部都做到了! 无图无真相&#xff0…

嘉定品牌网站建设做学校网站的济南公司

程序员要保持身心健康,可以注意以下几个方面: 饮食健康:保持均衡的饮食,多吃蔬菜水果,减少油腻和高热量食物的摄入。同时,适当饮水,避免因长时间坐着工作而导致的脱水。尽量不要吃街边摊、大排…

网页源代码提取文件网站优化成功案例

【判断题】重合断面的轮廓线用细实线绘制。【单选题】阿萨德法师法啥【单选题】三相桥式交叉连接电路为限制脉动环流需要( )平衡电抗器【单选题】地方搞活动风格化大发光火【填空题】若s是int型变量,且s6,则表达式s%2(s1)%2的值为________。【填空题】负反馈的作用是( )。【单选…

html网站开发语言建网站 必须学html吗

Functions and Getting Help 在本课中,我们将讨论函数:调用它们,定义它们,并使用Python的内置文档查找它们。 在某些语言中,定义函数必须要有特定的参数,每个参数都具有特定类型。 Python函数允许更灵活。…

邯郸哪个公司做网站好wordpress中文版手册

一、需求分析 旅游网站通常具有多种功能,以下是一些常见的旅游网站功能: 酒店预订:旅游网站可以提供酒店预订服务,让用户搜索并预订符合其需求和预算的酒店房间。 机票预订:用户可以通过旅游网站搜索、比较和预订机票…

大型门户网站建设工作总结网站建设公司做销售好不好

目录SIFT是什么?尺度空间理论SIFT特征点提取SIFT特征点描述SIFT是什么? SIFT ,即尺度不变特征变换( Scale-invariant feature transform,SIFT) ,一种特征描述方法。具有 尺度鲁棒性 旋转鲁棒性 光照鲁棒性 SIFT本身包括了特征点筛选及特征点…

网站建设模板删不掉仙侠手游代理平台

机器学习综述 摘要 本文主要参考中科院自动化研究所复杂系统与智能科学实验室王珏研究员《关于机器学习的讨论》,讨论机器学习的描述,理论基础,发展历史以及研究现状。 关键字:机器学习,科学依据,发展脉络 0引言 20世纪…

长沙房产集团网站建设能翻到国外的浏览器

一、排查过程 问题发现是因为当时接到了内存UMP报警信息,如下: 通过查看PFinder发现内存一直在增长,没有停止迹象,触发fullGC也并没有下降趋势: 当机立断,先立即去NP上摘除了此台机器流量,然后…

网站建设素材库网络营销策划书ppt

注意:转化之前先将移动硬盘中的内容进行备份 1、点击桌面上的【前往】,选择【实用工具】 2、在列表中选择【磁盘工具】 3、在左侧选中你的磁盘,点击右侧上方的【抹掉】,注意:将永久抹掉储存在上面的所有数据,因此需要…

大学的网站设计重庆装修公司哪家口碑最好

ADC工作原理: 1、输入通道: 2、转换序列: A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组) 规则组最多可以有16个转换,注入组最多有4个转换 规则组和注入…

福州房地产网站建设wordpress 去掉rss

Go 一、Windows下安装Go1、下载Go2、配置环境变量3、下载Jetbrain下的GoLang4、编写hello world5、编译和执行 二、Go语言介绍1、开发文档2、Go语言核心开发团队3、为什么要创建Go4、Go语言发展史5、Go语言特点6、Golang执行过程6.1 执行过程分析6.2 编译是什么 7、开发注意事项…

成都市网站建设费用及企业Wordpress 分表分库

golang 引入swagger(iris、gin) 在开发过程中,我们不免需要调试我们的接口,但是有些接口测试工具无法根据我们的接口变化而动态变化。文档和代码是分离的。总是出现文档和代码不同步的情况。这个时候就可以在我们项目中引入swagge…

天津网站建设费用电脑可以做网站主机么

C编译环境和预处理(非常详细,建议收藏) 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么? 2.2 运行环境 三、预处理详解3.1 预定义…

Python用数据库做网站做一个网站能卖多少钱

1. 外部类 (写在pulic修饰的类外面) 2. 静态内部类(写在类的里面) 3. 局部内部类(写在方法里面) 4. 匿名内部类 5. 函数式接口。lambada表达式。public class LambdaDemo01 {/*** 2. 静态内部类*/static class Love02 implements Lover {Overridepublic void love() {System.ou…

交换机做网站在招聘网站里做电话销售

java的封装,继承,多态 1 封装 1.1 封装 指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的…