数据库设计系列5---关系建模

简介:
标示了数据库系统的实体之后,下一步骤就是标示实体之间的关系,以及存在于关系之上的约束。这种约束的例子包括:一个分公司必须有多名会员,每个分公司都必须有员工,关系上的约束类型称为多样性。多样性的定义为:一个实体中可能和相关实体的一个存在关联的实体事件的数目。
       最常用的关系是度为2的二元关系,二元关系上的多样性约束一般分为一对一,一对多,多对多三种。使用以下的业务规则来考查这三种类型的关系,一名员工管理一个分公司,一个分公司有许多员工,演员出演某部影片。对于每个业务规则,我们说明在没有明确制定的情况下找到其中的多样性约束,并说明怎样在ER模型中表示他们。
1.        一对一关系是最常见的关系,比如一名员工管理一个分公司,但是并不是所有的员工都有分公司可以管理,如下图表示:
一个员工管理一个单位,找出多样性通常需要用样例数据检查特定事务规则的数据之间的关系,可以从填好的表格,报表甚至从与用户的讨论中得到样例数据。为了得出正确的结论,强调被检查和讨论的样例数据能够真实地代表所有数据是非常重要的。
       为了图形化表示1:1关系的,在关系的两端放上,0..1或者1..1表示他们之间的描述关系,为了表示一个员工管理01个公司,在Branch的一端放上0..1的字样,为了表示一个分公司必须由一个员工管理,在Staff的一端放上1..1,在上图中左边的   表示0..1,同时也表示是可选参与,即当Staff的一个实体确定时,他所管理的分公司可以有,或者没有。而在右边的  表示当一个Branch确定的时候,必须有一个Staff员工来进行管理,即参与。
2.一对多关系也比较常见,比如一个公司有多名员工的情况就属于一对多的关系。
为了表示 Branch Has Staff ,我们在实体 Staff 的一端标记 1..* ,表示一个公司 1 到多多名员工,而一个员工只属于一个分公司,在上图中,   表示 1..*, 如果知道多样性约束的最大值和最小值,则可以显示这些信息,例如一个分公司有 2-10 个员工,可以标记 2..20
1.        多对多约束,角色和拥有的权限之间的关系是一个典型的多对多关系,一个角色可以拥有多个权限,一个权限可以被分配到不同的角色中。使用 UML 图形的表示如下图所示:
为了图形化表示多对多的关系,在互相关联的实体分别标记 0..* ,如上图中的   所示,
1.        复杂关系的多样性约束。一般来说, n 元关系的多样性约束代表关系中其他 n-1 元关系固定的情况下某个实体潜在的实体事件的数目,
以上所描述的约束中,如果其他 n-1 元关系确定的情况下,某个实体的参与个数如果大于等一,则为强制参与,否则为可选参与,在一个关系中参与的实体的数目,成为关系的基数。
2.        关系中相关的性质称为关系上的属性,比如在课程和学生之间存在多对多的关系,在多对多的关系中存在分数这个属性,学生对应的某个课程有考试成绩。
ER 模型中的设计问题:
        ER 模型中可能存在如下的两种陷阱,扇形陷阱和深坑陷阱。
        扇形陷阱:从第三个实体与扇出的两个实体之间有 1..* 的关系,但是扇出的两个实体之间应该有直接关系以提供必要的关系,实际却没有,其形状如下图所示:
如一个工头负责多个工程,同时也管理多个民工,他们都是一对多的关系,民工和工程之间应该有直接的关系表明某个民工在某个工程上工作,但是却没有明确的说明。解决的办法是在工程和民工之间添加一个关系,表示民工在那个工地上工作。
深坑陷阱:一个模型,假设他们之间存在关系,但是这些实体之间不存在路径。深坑陷阱存在的地方是存在可选参与的关系组成了相关实体之间的路径,例如一个公司分配了若各个汽车,部分员工可以使用汽车,这样就有了如下的关系
由于并不是所有的员工都是用汽车,根据这个模型并不能看出来公司拥有多少员工,或者员工属于哪个公司。解决办法是在公司和员工之间添加一个关系,表明公司和员工之间的关系。
扇形陷阱和深坑陷阱之间的区别不是很好理解,在实际的设计中也很少出现此类陷阱。大致有个了解就可以了,不需要深究。
本文转自凌辉博客51CTO博客,原文链接http://blog.51cto.com/tianli/49417如需转载请自行联系原作者

lili00okok
相关文章
|
API
国外地区经纬度查询免费API接口教程
此接口用于查询国外地区的经纬度信息,支持POST和GET请求方式。需提供用户ID、用户KEY、省级名称及具体地点。返回数据包括地区名称(中英文)、国家代码及经纬度等详细信息。示例请求与响应数据详见文档。
790 29
|
NoSQL Redis 数据安全/隐私保护
Redis 6.0 新特性详解
艺术致敬! 一、众多新模块(modules)API   Redis 6中模块API开发进展非常大,因为Redis Labs为了开发复杂的功能,从一开始就用上Redis模块。Redis可以变成一个框架,利用Modules来构建不同系统,而不需要从头开始写然后还要BSD许可。
10392 27
|
4月前
|
SQL 人工智能 Apache
字节跳动:Apache Doris + AI 一站式融合数据引擎的探索与实践
随着人工智能技术在业务中的渗透,我们逐渐意识到:AI 不仅是提升效率的工具,更是重构数据处理与消费方式的核心驱动力。在这一背景下,我们思考:**能否构建一款「AI + Data」一站式融合的数据引擎?** 它不仅能够统一处理文本、音视频等非结构化数据与传统结构化数据,还能为算法工程师提供流畅的数据开发体验,实现数据处理与 AI 模型无缝衔接,并能确保数据处理负载与在线服务负载完全隔离。这是 2024 年末启动 DataMind 项目的初衷。
316 0
字节跳动:Apache Doris + AI 一站式融合数据引擎的探索与实践
|
4月前
|
人工智能 监控 算法
别再做SEO了!2025最新GEO优化公司排行榜,AI时代流量密码全揭秘!
2025年,生成式AI重塑流量格局,GEO(生成式引擎优化)正取代传统SEO。用户从“搜索”转向“对话”,信息由AI主动推荐。GEO通过结构化内容、信任信号构建与多平台适配,让品牌成为AI眼中的“权威专家”。选择服务商需关注技术透明度、行业理解与定制化能力。未来属于能被AI理解和信任的品牌。
|
运维 安全 Linux
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
721 12
|
9月前
|
机器学习/深度学习 自然语言处理 算法
文心4.5系列模型,正式开源!
6月30日,百度文心大模型4.5正式开源,魔搭社区在开源首日快速接入文心大模型,提供真正可用、好用、可落地的大模型解决方案,现已面向广大企业、开发者下载体验!
503 1
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
OpenSearch 视频 RAG 实践
本文介绍了 OpenSearch LLM 版中视频 RAG 的具体实现流程。
895 4
|
运维 Serverless 数据处理
函数计算产品使用问题之ComfyUI界面没有显示Manager按钮是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
SQL DataWorks 分布式数据库
实时计算 Flink版产品使用合集之如何与SQLServer实时对接
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
机器学习/深度学习 并行计算 Java
谈谈分布式训练框架DeepSpeed与Megatron
【11月更文挑战第3天】随着深度学习技术的不断发展,大规模模型的训练需求日益增长。为了应对这种需求,分布式训练框架应运而生,其中DeepSpeed和Megatron是两个备受瞩目的框架。本文将深入探讨这两个框架的背景、业务场景、优缺点、主要功能及底层实现逻辑,并提供一个基于Java语言的简单demo例子,帮助读者更好地理解这些技术。
1446 2