当前位置: 首页 > news >正文

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

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. 这个模型看起来合理吗?是的

相关文章:

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

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. 用动词(或动词短语&#…...

竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

对Happens-Before的理解

Happens-Before Happens-Before 是一种可见性模型,也就是说,在多线程环境下。原本因为指令重排序的存在会导致数据的可见性问题,也就是 A 线程修改某个共享变量对 B 线程不可见。因此,JMM 通过 Happens-Before 关系向开发人员提供…...

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双…...

Java面试八股文之暑假合集

八股文暑假合集 基础篇二分查找 java基础篇7月12号面向对象和面向过程的区别重载和重写String 7月13号自动装箱和拆箱静态方法构造方法成员变量和局部变量对象引用和对象实例返回值 与equals(重要)hashcode()和equals()HashMap 7月16号线程,进程和程序final关键字的…...

竞赛选题 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

机器学习第一周

一、概述 机器学习大致会被划分为两类:监督学习,无监督学习 1.1 监督学习 监督学习其实就是,给计算机一些输入x和正确的输出y(训练数据集),让他总结x->y的映射关系,从而给他其他的输入x&a…...

大数据采集技术与预处理学习一:大数据概念、数据预处理、网络数据采集

目录 大数据概念: 1.数据采集过程中会采集哪些类型的数据? 2.非结构化数据采集的特点是什么? 3.请阐述传统的数据采集与大数据采集的区别? ​​​​​​​ ​​​​​​​4.大数据采集的数据源有哪些?针对不同的数…...

MySQL - 为什么索引结构默认使用B+树,而不是其他?

B-Tree的缺点: 范围查询效率相对较低:虽然B-Tree支持范围查询,但在实际操作中可能需要进行多次树遍历,性能较差。磁盘空间利用不高:B-Tree中的非叶子节点也存储数据,导致磁盘空间利用率相对较低。更复杂的平…...

信息系统项目管理师教程 第四版【第3章-信息系统治理-思维导图】

信息系统项目管理师教程 第四版【第3章-信息系统治理-思维导图】...

2023.NET技术沙龙知识学习笔记

目录 一.Bootstrap Blazor UI组件库企业级应用介绍1.Blazor是什么2.为什么要用Blazor3.Bootstrap Blazor是什么 二.使用WebAssembly运行、扩展.NET应用程序1.WebAssembly简介2.WebAssembly的起源3.为什么选择二进制格式?4.WebAssembly与传统JavaScript的对比5.执行速…...

Golang教程——配置环境,再探GoLand

文章目录 一、Go是什么?二、环境配置验证配置环境变量 三、安装开发者工具GoLand四、HelloGolang 一、Go是什么? Go(也称为Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言旨在提供一种简单、高…...

C++之lambda匿名、using、typedef总结【全】(二百四十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

基于SpringBoot的个人博客系统

基于SpringBootVue的个人博客系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 系统公告 博客详情 后台发文 摘要 基于Spring Boot的个人博客系统是一种…...

javascript中的继承

基本术语 本文中,proto [[Prototype]] 原型链 基本思想: 构造函数生成的对象有一个指针(proto)指向构造函数的原型。如果将构造函数1的原型指向另一个构造函数2的实例,则构造函数1的实例__proto__.proto 指向了构…...

智能问答技术在百度搜索中的应用

作者 | Xiaodong 导读 本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队,共同探索智能问答技术的发展方向,文末有简历投递方式。 全文6474字,预计阅读时…...

STM32F4X SDIO(一) SD卡介绍

STM32F4X SDIO(一) SD卡介绍 SD卡分类外观分类容量分类传输速度分类 在之前的章节中,讲过有关嵌入式的存储设备,有用I2C驱动的EEPROM、SPI驱动的FLASH和MCU内部的FLASH,这类存储设备的优点是操作简单,但是缺…...

10分钟了解JWT令牌 (JSON Web)

10分钟了解JSON Web令牌(JWT) JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。今天给大家介绍JWT的原理和用法。 1.跨域身份验证 Internet服务无法与用户身份验证分开。一般过程如下。 1.用户向服务器发送用户名和密码。…...

【经验总结】ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文

目录 前言 正文 1.CanNM状体机分析 2.ComM状态机分析 3.解决方案 4.总结 前言...

基于Android 10系统的ROC-RK3399-PC Pro源码编译

基于Android 10系统的ROC-RK3399-PC Pro源码编译 一、开发环境搭建二、下载Android 10 SDK三、编译Android 10 SDK ROC-RK3399-PC Pro资料下载处:https://www.t-firefly.com/doc/download/145.html一、开发环境搭建 Android 10 SDK的编译对PC机的要求不低&#xff…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...