【DDIA笔记】【ch2】 数据模型和查询语言 -- 多对一和多对多

简介: 【6月更文挑战第7天】该文探讨数据模型,比较了“多对一”和“多对多”关系。通过使用ID而不是纯文本(如region_id代替"Greater Seattle Area"),可以实现统一、避免歧义、简化修改、支持本地化及优化搜索。在数据库设计中,需权衡冗余和范式。文档型数据库适合一对多但处理多对多复杂,若无Join,需应用程序处理。关系型数据库则通过外键和JOIN处理这些关系。文章还提及文档模型与70年代层次模型的相似性,层次模型以树形结构限制了多对多关系处理。为克服层次模型局限,发展出了关系模型和网状模型。

多对一和多对多

是一个对比各种数据模型的切入角度。

region在存储时,为什么不直接存储纯字符串:“Greater Seattle Area”,而是先存为region_id -> region name,其他地方都引用region_id?

  1. 统一样式:所有用到相同概念的地方都有相同的拼写和样式

  2. 避免歧义:可能有同名地区

  3. 易于修改:如果一个地区改名了,我们就不用去注意修改所有引用他的地方

  4. 本地化支持:如果翻译成其他语言,可以只翻译名字表

  5. 更好搜索:列表可以关联地区,进行树形组织

类似的概念还有:面向抽象编程,而非面向细节。

关于用ID还是用文本,作者提到了一点:ID对人类是无意义的,无意义的意味着不会随着现实世界的将来的改变而改动。

这在关系数据库表设计时需要考虑,即如何控制冗余,会有几种范式来消除冗余。

文档型数据库很擅长处理一对多的树形关系,却不擅长处理多对多的图形关系。如果其不支持Join,则处理多对多关系的复杂度就从数据库侧移动到了应用侧。

如,多个用户可能在一个组织工作过,如果我们想找出同一个学校和组织工作过的人,如果数据库不支持Join,则需要在应用侧进行循环遍历来Join。
2024-06-06-20-44-00-image.png

文档 vs 关系

  1. 对于一对多关系,文档型数据库将嵌套数据放在父节点中,而非单拎出来放另外一张表

  2. 对于多对一和多对多关系,本质上,两者都是使用外键(文档引用)进行索引。查询时需要进行join或者动态跟随。

文档模型是否在重复历史?

层次模型

20世纪70年代,IBM的信息管理系统IMS。

几个要点:

  1. 树形组织,每个子节点只允许有一个父节点

  2. 节点存储数据,节点有类型

  3. 节点之间类似指针方式连接

可以看出,它与文档模型很像,也因此很难解决多对多的关系,并且不支持Join。

为了解决层次模型的局限性,人们提出了各种解决方案,最突出的是:

关系模型和网状模型

目录
相关文章
|
3月前
|
存储 SQL 缓存
优化ClickHouse查询性能:最佳实践与调优技巧
【10月更文挑战第26天】在大数据分析领域,ClickHouse 以其卓越的查询性能和高效的列式存储机制受到了广泛的关注。作为一名已经有一定 ClickHouse 使用经验的开发者,我深知在实际应用中,合理的表设计、索引优化以及查询优化对于提升 ClickHouse 性能的重要性。本文将结合我的实践经验,分享一些有效的优化策略。
220 3
|
7月前
|
负载均衡 数据管理
ClickHouse的分布式查询流程
ClickHouse的分布式查询流程
|
8月前
|
SQL 人工智能 关系型数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 文档模型中Schema的灵活性
【6月更文挑战第8天】网状模型是层次模型的扩展,允许节点有多重父节点,但导航复杂,需要预知数据库结构。关系模型将数据组织为元组和关系,强调声明式查询,解耦查询语句与执行路径,简化了访问并通过查询优化器提高效率。文档型数据库适合树形结构数据,提供弱模式灵活性,但在Join支持和访问局部性上不如关系型。关系型数据库通过外键和Join处理多对多关系,适合高度关联数据。文档型数据库的模式灵活性体现在schema-on-read,写入时不校验,读取时解析,牺牲性能换取灵活性。适用于不同类型或结构变化的数据场景。
63 0
|
8月前
|
SQL JSON NoSQL
【DDIA笔记】【ch2】 数据模型和查询语言 -- 关系模型与文档模型
【6月更文挑战第6天】关系模型是主流数据库模型,以二维表形式展示数据,支持关系算子。分为事务型、分析型和混合型。尽管有其他模型挑战,如网状和层次模型,但关系模型仍占主导。然而,随着大数据增长和NoSQL的出现(如MongoDB、Redis),强调伸缩性、专业化查询和表达力,关系模型的局限性显现。面向对象编程与SQL的不匹配导致“阻抗不匹配”问题,ORM框架缓解但未完全解决。文档模型(如JSON)提供更自然的嵌套结构,适合表示复杂关系,具备模式灵活性和更好的数据局部性。
65 0
|
4月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2月前
|
SQL Unix OLAP
ClickHouse安装教程:开启你的列式数据库之旅
ClickHouse 是一个高性能的列式数据库管理系统,适用于在线分析处理(OLAP)。本文介绍了 ClickHouse 的基本使用步骤,包括下载二进制文件、安装应用、启动服务器和客户端、创建表、插入数据以及查询新表。还提到了图形客户端 DBeaver 的使用,使操作更加直观。通过这些步骤,用户可以快速上手并利用 ClickHouse 的强大性能进行数据分析。
103 4
|
4月前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
5月前
|
存储 SQL 缓存
数据库测试|Elasticsearch和ClickHouse的对决
由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。
数据库测试|Elasticsearch和ClickHouse的对决
|
4月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
8月前
|
DataWorks API 调度
DataWorks产品使用合集之在调度配置配置了节点的上游节点输出,没办法自动生成这个flow的依赖,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。