数据的反规范化架构

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 【6月更文挑战第13天】 本文介绍数据库设计包括规范化和反规范化。优化设计和应用规范化规则确保高效且准确的数据存储。

1 规范化设计

设计合理的数据库使您可以访问最新、准确的信息。因为正确的设计对于实现使用数据库的目标至关重要。

一个基本原则是,减少重复冗余的数据,虽然现代很多数据表设计不得不设置冗余信息。

另一个基本原则是,保证数据的正确性和完整性以及可扩展。 如果数据被保存得不正确,那么从这里提取的信息将是无用的信息。

question_ans.png

2 关系数据库定义

规范五个范式:1NF,2NF,3NF,BCNF, 4NF

常用的前三个定义

1NF 若关系模式 R 的每一个分量是不可再分的数据项,则关系模式 R属于第一范式

2NF 若关系模式 REINF,且每一个非主属性完全依赖主键时,则关系式R是第二范式

3NF 即当2NF 消除了非主属性对码 (候选键) 的传递函数依赖,则称为 3NF

BCNF Boyce Codd Normal Form,巴克斯范式 当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。

4NF 4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。
注意:如果只考虑函数依赖,关系模式最高的规范化程度是BCNF;如果考虑多值依赖,关系模式最高规范化程度是4NF。

主键(PrimaryKey):或称主键,若一个关系有多个候选码,则选定其中一个作为主码

外键(Foreign Key):如果关系模式R中的属性或属性组不是该关系的键,但它是其他
关系的码,那么该属性集对关系模式R而言是外键。

主属性(Prime Attribute):包含在任何候选码中的属性称为主属性。不包含在任何候选
码中的属性称为非主属性(Non-Prime Attribute)。

目或度(Degree);目或度指的是一个关系中属性的个数。

候选键:不含有多余属性的超键称为 候选键,是超键的最小子集。例如:学号,身份证号

函数依赖定义: 设R(U)是属性U的关系模式,X,Y是U的子集,对于R(U)的任意一个可能的关系r,r的任意两个元组在X上属性值相等,那么在Y上的属性值也相等,称“X函数确定Y” 或Y函数依赖X,记为 X->Y. X称为这个函数依赖的决定属性组,也称为决定因素。

2 反规范化设计

方法

    增加冗余列

增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。

    增加派生列

增加派生列指增加的列可以通过表中其他数据计算生成。 \n它的作用是在查询时减少计算量,从而加快查询速度。

    重新组表

重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。

    水平分割

按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用:范围,列表,哈希。

    垂直分割

对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中, 在查询时减少 I/0 次:冷,热列拆表。

保障数据一致性方式:

    触发器
    事务机制保证
    应用保证
    批处理脚本

反规范化优缺点:

优点:避免进行表之间连接操作,可以提高数据操作的性能
缺点:数据重复存储,浪费磁盘空间。可能导致数据不一致

3 数据设计步骤

一个基本的步骤如下:

1 确定数据库的用途    

这有助于您为其余步骤做好准备。

2 查找和组织所需信息    

收集您可能希望在数据库中记录的所有类型的信息,例如产品名称和订单号。

3 将信息划分为表格    

将您的信息项划分为主要实体或主题,例如产品或订单。然后,每个主题都变成一个表。

4 将信息项转换为列    

确定要在每个表中存储哪些信息。每个项目都将成为字段,并在表中显示为一列。例如,“雇员”表可能包含“姓氏”和“雇用日期”等字段。

5 指定主键    

选择每个表的主键。主键是用于唯一标识每一行的列。例如,产品 ID 或订单 ID。

6 设置表关系    

查看每个表,并确定一个表中的数据与其他表中的数据之间的关系。根据需要向表添加字段或创建新表以阐明关系。

7 优化您的设计    

分析您的设计是否存在错误。创建表并添加一些示例数据记录。看看你是否能从你的表格中获得你想要的结果。根据需要对设计进行调整。

8 应用规范化规则    

应用数据规范化规则以查看表的结构是否正确。根据需要对表进行调整.

4 小结

关于关系型数据库的经典设计工具可见此文 。规范化设计减少数据冗余,确保正确性和完整性,如1NF-4NF范式。反规范化通过增加冗余列、派生列等提高查询效率,但可能引发数据不一致。设计步骤涉及确定用途、组织信息、划分表格、指定主键和设置关系。

目录
相关文章
|
1月前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
53 8
|
1月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
287 7
|
1月前
|
数据采集 搜索推荐 数据管理
数据架构 CDP 是什么?
数据架构 CDP 是什么?
52 2
|
4月前
|
机器学习/深度学习 数据采集 人工智能
揭秘!47页文档拆解苹果智能,从架构、数据到训练和优化
【8月更文挑战第23天】苹果公司发布了一份47页的研究文档,深入解析了其在智能基础语言模型领域的探索与突破。文档揭示了苹果在此领域的雄厚实力,并分享了其独特的混合架构设计,该设计融合了Transformer与RNN的优势,显著提高了模型处理序列数据的效能与表现力。然而,这种架构也带来了诸如权重平衡与资源消耗等挑战。苹果利用海量、多样的高质量数据集训练模型,但确保数据质量及处理噪声仍需克服。此外,苹果采取了自监督与无监督学习相结合的高效训练策略,以增强模型的泛化与稳健性,但仍需解决预训练任务选择及超参数调优等问题。
159 66
|
3月前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
55 5
|
2月前
|
存储 大数据 数据处理
洞察未来:数据治理中的数据架构新思维
数据治理中的数据架构新思维对于应对未来挑战、提高数据处理效率、加强数据安全与隐私保护以及促进数据驱动的业务创新具有重要意义。企业需要紧跟时代步伐,不断探索和实践新型数据架构,以洞察未来发展趋势,为企业的长远发展奠定坚实基础。
|
4月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
4月前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
4月前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
76 0
|
4月前
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
51 0