读图数据库实战笔记02_图数据建模

news2024/11/28 14:29:59

1. 概念

1.1. 实体

1.1.1. 通常用名词来表示

1.1.2. 描述一个领域中的事物或者事物类型

1.1.2.1. 汽车
1.1.2.2. 用户
1.1.2.3. 地理位置

1.1.3. 在逻辑模型和技术实现过程中,实体通常会变成“顶点”

1.2. 关系

1.2.1. 用动词(或动词短语)来表示

1.2.2. 描述实体之间的互动

1.2.2.1. 一辆卡车移动到一个位置”场景里的移动
1.2.2.2. “一个人加了另一个人为好友”

1.2.3. 在逻辑模型和技术实现过程中,关系通常会变成“边”

1.2.4. 边和关系并不一定是相同的东西。虽然用在概念模型中的实体和关系和用在逻辑模型中的顶点和边经常有很强的相关性,但它们之间并不总是一一对应的

1.3. 属性

1.3.1. 用名词来表示

1.3.2. 通常在实体或关系的上下文中出现,描述实体或关系的特性

1.4. 访问模式

1.4.1. 描述在领域中互动的疑问或方法

1.4.2. 互动疑问

1.4.2.1. 这辆卡车会去哪儿
1.4.2.2. 谁是这个人的好友

1.4.3. 在逻辑模型和技术实现过程中,访问模式通常会变成“查询”

1.5. 基数(cardinality)

1.5.1. 一个集合中元素的数量

1.6. 多重性(multiplicity)

1.6.1. 对一个集合可以拥有的最小基数和最大基数的说明

1.6.2. 一对多、零对多、多对多

1.6.3. 用来约束相关实体的数量

2. 唯一性

2.1. 数据的唯一性指,在一个数据集中,如何度量指定数据重复的次数

2.2. 唯一性被定义为两个顶点之间允许的、具有指定标签的边的数量

2.3. 边的不正确的唯一性定义是图建模过程中最普遍的问题之一,而且经常引发查询问题

2.4. 正确地设计数据模型,以正确反映边的唯一性

2.5. ataStax Enterprise Graph和JanusGraph,会把边的唯一性的显式定义作为模式定义的一部分

2.6. 单独唯一指零条或一条边

2.6.1. 两个实例顶点之间只有唯一具有指定标签的边

2.6.2. 优先使用单独唯一性

2.7. 多重唯一指超过一条边

2.7.1. 两个实例顶点之间可以有一条或多条具有指定标签的边

2.7.2. 只在特殊需要时才考虑多重唯一性

2.8. 单独唯一性显然比多重唯一性普遍得多

2.9. 不恰当的唯一性

2.9.1. 返回太少的数据

2.9.1.1. 当一条边被定义为单独唯一的,但事实上应该是多重唯一的时,就会发生这种情况

2.9.2. 返回重复的数据

2.9.2.1. 当一条边被定义为多重唯一的,但事实上应该是单独唯一的时候,就会发生这种情况

2.9.3. 糟糕的查询性能

2.9.3.1. 用多重唯一的边取代本来可以用单独唯一表示的边是导致查询性能变差的首要原因
2.9.3.1.1. 数据库不得不做更多事情来从一个带有多条边的查询中返回数据

3. 数据建模

3.1. 将真实世界的实体和关系转换为相应的软件表示

3.2. 图数据的建模过程相较于关系数据库,我们的思维方式必须从“实体第一”(更准确地说,是“实体唯一”)转变为“实体加关系”

3.3. 物理数据模型大多数时候就是我们要查询的结果

3.4. 概念模型是最终用户与软件开发人员的沟通桥梁

3.5. 数据设计过程中的失误将在代码实现过程中引起更难修复的问题

3.6. 所有实现都意味着一定程度的代码编写、测试和数据加载

3.7. 构建包含复杂领域中的高度关联数据、可以在生产环境运行的应用程序

3.8. 要采取的方式会降低这种风险,并把数据模型变化所带来的痛苦降到最低

4. 建模步骤

4.1. 理解问题

4.1.1. 昨天的完美应用在明天看来就是功能不全的

4.1.2. 早期在理解业务问题、用例和通用领域术语上进行大量时间投资,是建立好的数据模型的基础

4.1.2.1. 这将降低你在后期大幅修改设计的风险

4.1.3. 领域和范围

4.1.3.1. 每个业务问题都可以无限扩展,所以把范围定义得越精确,我们离成功就越近
4.1.3.2. 定义了业务问题的边界
4.1.3.2.1. 该应用程序能为用户带来什么
4.1.3.2.2. 该应用程序需要记录哪些类型的信息才能完成这些任务
4.1.3.2.3. 谁是应用程序的用户
4.1.3.2.3.1. 聚焦在传统意义的最终用户上
4.1.3.2.3.2. 不包括系统管理员、客户服务人员,以及其他负责对复杂的技术解决方案提供运维的人员

4.1.4. 业务实体

4.1.4.1. 找出应用程序的基础构件,以及这些构件之间的关系
4.1.4.2. 定义良好的关系不仅需要名字,还需要对关系如何连接实体以及定义关系所需的各种潜在属性有一定的理解
4.1.4.3. 这个应用程序会运用哪些要素或事物
4.1.4.4. 这些要素之间有什么关系
4.1.4.5. 每个实体有哪些关键数据

4.1.5. 功能

4.1.5.1. 进入概念模型时,会把功能变成访问模式
4.1.5.1.1. 为系统构建查询
4.1.5.2. 人们将如何使用系统
4.1.5.3. 要为用户解答哪些疑问

4.2. 构建概念数据模型

4.2.1. 白板模型

4.2.2. 花点儿时间理解和定义业务领域是非常重要的

4.2.3. 对实体进行识别和归类

4.2.3.1. 先从领域中提取实体
4.2.3.2. 从寻找名词开始
4.2.3.3. 应该用单数名词来命名所有的实体
4.2.3.3.1. 每个实体代表某项的单个实例
4.2.3.3.2. 对于图数据建模来说,单数的名称更合适

4.2.4. 识别实体间的关系

4.2.4.1. 确定关系,即怎么做
4.2.4.2. 不要小看这种为了聚焦于手头上的首要任务而设的虚拟“想法停车场”
4.2.4.3. 不是在功能性疑问的回答中寻找名词,而是寻找动词
4.2.4.4. 会把每个动词和相应的实体名字进行合并
4.2.4.4.1. 格式是“名词-动词-名词”或“实体-关系-实体”

4.3. 构建逻辑数据模型

4.3.1. 大部分图数据库是没有模式的

4.3.2. 把那些实体和关系转换成图的概念——顶点、边和属性

4.3.3. 步骤

4.3.3.1. 把实体转换成顶点
4.3.3.1.1. 从概念模型中识别所有相关的实体
4.3.3.1.1.1. 作为一个通用规则,我们通过在功能疑问清单中寻找名词的方式来为应用程序找出实体
4.3.3.1.1.2. 因为名词代表实物或逻辑元素,所以它们通常是在应用程序中解决问题所需实体的最佳标识
4.3.3.1.2. 以标签的形式给顶点一个名字,该标签在图模型中是此类实体的唯一标识
4.3.3.1.2.1. 模型图中的标签用于对代表类似概念的顶点进行分组和归类
4.3.3.1.2.2. 决定标签的名字并不是小事
4.3.3.1.2.3. 好的标签名要简短、清晰和准确
4.3.3.1.2.4. 把顶点的标签命名为单数名词是最佳实践
4.3.3.1.2.5. 尽量用通用的名字作为标签名也是一种最佳实践
4.3.3.1.2.6. 标签和属性命名规则的一致性对于应用程序的维护至关重要
4.3.3.1.2.7. 一致性为开发人员和系统管理员提供了可预测性
4.3.3.1.2.8. 统一使用小写单数单词作为标签的名字
4.3.3.1.2.9. 在图数据库中,每个顶点仅关联一个标签通常是比较稳妥的做法

4.3.3.1.2.9.1. 这是Apache TinkerPop项目的做法

4.3.3.1.2.9.1.1. Neo4j和Amazon Nepture,支持一个顶点有多个标签

4.3.3.1.2.9.2. 模式继承中,一个顶点有多个标签是合适的

4.3.3.2. 把关系转换成边
4.3.3.2.1. 边会包含方向、唯一性这些在关系数据库中没有的特性
4.3.3.2.2. 寻找关系
4.3.3.2.2.1. 从概念数据模型中识别相关的关系
4.3.3.2.3. 命名边的标签
4.3.3.2.3.1. 为边命名,作为图数据模型中某个关系的唯一标签
4.3.3.2.3.2. 边首尾连接的是同一个顶点

4.3.3.2.3.2.1. 这种边叫作环

4.3.3.2.4. 为边分配方向
4.3.3.2.4.1. 以定义始末顶点类型
4.3.3.2.4.2. 从一个顶点(出顶点)出发,到另一个顶点(入顶点)
4.3.3.2.5. 确定边的唯一性
4.3.3.2.5.1. 根据这条边在两个指定顶点间存在的次数,确定边的唯一性
4.3.3.2.5.2. 描述了具有相同标签的边从一个顶点的实例连接到另一个顶点的实例的次数
4.3.3.2.5.3. 描述了两个顶点间允许的、具有指定标签的边的最大数量
4.3.3.2.5.4. 多重唯一(multiple uniqueness)
4.3.3.2.5.5. 单独唯一(single uniqueness)
4.3.3.2.5.6. 并不是在描述一条边的特性,而是在描述一组边的特性
4.3.3.3. 寻找属性,并将其分配到顶点和边上
4.3.3.3.1. 属性是用来描述顶点或边的特性的键-值对
4.3.3.3.2. 和列不同,应用程序不会在图数据库中向属性插入默认值或null值
4.3.3.3.3. 保存null值或为属性赋予默认值是没有必要的
4.3.3.3.4. 为顶点和边都赋予属性的能力,正是图数据库和关系数据库的另一个本质区别

4.4. 检查模型

4.4.1. 顶点和边读起来像一个句子吗?是的

4.4.2. 是否有不同的顶点标签或边标签具有相同的属性?没有

4.4.3. 这个模型看起来合理吗?是的

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

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

相关文章

SpringCloud 微服务全栈体系(六)

第八章 Gateway 服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管…

RK3568平台 IIC子系统框架

一.简介 IIC只有两条线,一条串行数据线SDA;一条是时钟线SCL。使用SCL,SDA这两条线就实现了设备之间的数据交互。 I2C通信可以一对一(1个主设备对1个从设备),也可以一对多(1个主设备对多个从设…

React Router初学者入门指南(2023版)

React Router,简单来说,是一个帮助处理React应用程序中导航和路由的库。它是用于管理React中路由的最流行的路由工具。如果你对路由的概念不熟悉,可以将其视为在网站的不同部分之间导航的过程。例如,当你进入网站的“联系我们”部…

UE5实现相机水平矫正

UE5实现相机水平矫正 思路,用HIT获得基于相机视角的 离散采样点,然后根据距离相机距离进行权重分析。 距离越近,采样约中心,即越接近人眼注意点,最后算出加权平均高度,赋予给相机,相机将水平旋…

C++ -- 深入理解多态

前言:多态的概念,通俗地来讲就是多种形态。当我们要完成某个行为的时候,不同的对象去完成时会产生不同的状态,这就叫做多态。具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。多态在C的类和对象中…

python裁剪图片

我原本想找到一个小一点的彩色人脸数据集,但是都没有找到合适的 但是我找到了一个人脸数据集的封面 于是我把这两个图片裁开,得到了6464张彩色人脸照片 from PIL import Image# 打开大图 big_image Image.open(female.jpg) # 获取大图的宽度和高度 wid…

windows 系统不设置密码也能远程登陆

前言 如果windows系统不设置密码,默认情况下是不能远程登陆的 解决办法 按下winr,输入gpedit.msc 再回车 点击windows设置 ----安全设置 ------本地策略-----安全选项 设置为禁用 远程就可以不输入密码了

PMI-ACP(103:1-16)

英文名:ACP 外文名:Agile Certified Practitioner 中文名:敏捷管理专业人士资格认证 是由 美国项目管理协会 PMI Project Management Institute 发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证。 一年开展4次考…

摆玩具[算法赛](差分)

本题链接:用户登录 题目: 样例: 输入 5 2 2 5 7 10 13 输出 8 思路: 由题意,这是一个递增的数组,其次要求最小的极差,对 数组 进行分成 k 个分段数组。 由于是一个递增的数组&#xf…

postgresql14管理(六)-备份与恢复

定义 备份(backup):通过物理复制或逻辑导出的方式,将数据库的文件或结构和数据拷贝到其他位置进行存储; 还原(restore):是一种不完全的恢复。使用备份文件将数据库恢复到备份时的状…

4.多层感知机

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

C语言十进制转其它进制

短除法介绍 短除法: 主要功能为将十进制数据转为其它进制的数据,假设我们要转换为 X 进制,那么具体的流程如下: 十进制数字不断除以 X,直到商为 0 记录每次计算得到的余数 将余数倒序输出,即为对应的 X 进…

C# 递归算法使用简介_常用整理

一、递归简介 递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。 递归本质是循环&a…

正五边形的周长 题解

描述 已知一个正五边形的一条边的长度是a,计算输出该正五边形的周长。 输入 一行一个正整数a,表示该正五边形的边长。a的数值不会超过int的范围。 输出 一行一个正整数,表示这个该正五边形的周长,也就是5条边加起来的和。 输入样…

计网小题题库整理第一轮(面向期末基础)(1)

整理了一部分选择和填空,比较基础。计网的核心在于:背就完事~ 一.填空题 在采用电信号表达数据的系统中,数据有数字数据 和 模拟数据 两种。域名系统 DNS 是一个 分布式数据库 系统。TCP/IP 的网络层最重要的协议是 IP 互连网协议&#xff0…

STM32GPIO有几种模式,

一:GPIO有八种模式 输入: GPIO_Mode_AIN 模拟输入 GPIO_Mode_IN_FLOATING 浮空输入 GPIO_Mode_IPD 下拉输入 GPIO_Mode_IPU 上拉输入 输出 GPIO_Mode_Out_OD 开漏输出 GPIO_Mode_Out_PP 推挽输出 GPIO_Mode_AF_OD 复用开漏输出 GPIO_Mode_AF_PP 复用推挽…

数组与链表算法-单向链表算法

目录 数组与链表算法-单向链表算法 C代码 单向链表插入节点的算法 C代码 单向链表删除节点的算法 C代码 对单向链表进行反转的算法 C代码 单向链表串接的算法 C代码 数组与链表算法-单向链表算法 在C中,若以动态分配产生链表节点的方式,则可以…

标准ACL,扩展ACL,基本ACL,高级ACL

其实标准ACL,扩展ACL,基本ACL,高级ACL是同一个概念的不同名称,区别在于: 思科路由器支持标准ACL和扩展ACL两种类型的访问控制列表,没有”基本ACL“和”高级ACL“的概念,而华为路由器都支持 编号范围&…

2024年天津中德应用技术大学专升本自动化专业基础考试大纲

天津中德应用技术大学自动化专业(高职升本科)2024年专业基础考试大纲 一、试卷类型(仅供参考) 试卷卷面成绩共200分,考试时间为2小时。内容包含电工基础30%,电子技术30%,电机原理与拖动40%。试…

PLC程序常用模块

常用程序块 中继复位(使用特殊中继SM)初始化置位(set)初始化急停互锁按时断电模块(按下按钮,1s后自动断电)一次性开关循环的几种方法并联常开点定时器循环(串联常闭,断电…