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

数据建模标准-关系建模

数据模型定义:DAMA数据治理体系中将数据模型定义为一种文档形式,数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介;

作用:记录数据需求和建模过程中产生的数据定义;

数据建模方法:

常见的数据建模方法是关系建模、维度建模、面向对象建模、基于事实建模、基于时间建模和非关系型建模;

本章重点梳理关系建模方法:

关系建模定义:是一种通用的数据建模方法,关系建模的基本思想是通过将数据表示为关系模型,提高数据的结构化和可理解性;

关系建模按照陈氏符号表示法主要涉及以下几个步骤:

  1. 识别实体:实体的识别逻辑参考5W1H逻辑;

  1. 识别实体的主键:根据实体的定义和标准,确定存储颗粒度,识别实体的主键;
  2. 定义属性:为每个实体定义属性,也就是实体所对应的描述性标签;
  3. 确定关系:关系类型可以分为以下几类

a.多对多的关系类型:不同的原材料加工成多种产成品;

b.1对多的关系类型:多个原材料只能用于一个产品的生产;

c.1对1的关系类型:一个原材料加工成一个产成品;

基于识别出来的实体、关系、属性设计相关的数据模型;

实例:

以下是在线书店的ER图示例:

1.识别出的实体包含:客户、订单、书

2.识别实体的主键:客户的主键是客户id,订单的主键时订单id,书的主键是书的id;

3.定义属性:

a.客户的属性包含名称、email、密码、地址;

b.订单的属性包含订单日期、订单金额、订单的采购数、订单总价格;

c.书的属性包含标题、作者、ISBN、书的单价、书类型;

4.确定关系:

客户和订单的关系:1对多;

订单和书的关系:多对多;

陈氏符号(Chen's Notation)是由美国计算机科学家彼得·陈(Peter Chen)在1976年提出的,用于描述实体-关系(ER)模型的一种图形表示方法。这种表示方法在数据库设计和信息系统分析中被广泛使用。以下是陈氏符号的一些基本元素和规则:

  1. 实体(Entity):
    • 实体用矩形表示,矩形内写上实体的名称。
    • 实体可以是现实世界中的对象,如人、地点、物品等。
  1. 属性(Attribute):
    • 属性用椭圆表示,并通过线连接到它们所属的实体。
    • 属性是描述实体特征的数据项,如人的名字、年龄等。
  1. 关系(Relationship):
    • 关系用菱形表示,并通过线连接到它们涉及的实体。
    • 关系描述实体之间的联系,如“学生”和“课程”之间的“选课”关系。
  1. 键(Key):
    • 键是用于唯一标识实体实例的属性或属性集。
    • 在陈氏符号中,主键通常用下划线标记。
  1. 基数(Cardinality):
    • 基数描述实体间关系的数量约束,如“一个学生可以选多门课程,但一门课程可以被多个学生选”。
    • 基数可以用“1”、“0..1”、“*”等符号表示。
  1. 参与度(Participation):
    • 参与度描述实体在关系中的角色,可以是“部分参与”(Partial Participation)或“全参与”(Total Participation)。
    • 参与度可以用“O”(全参与)和“o”(部分参与)表示。
  1. 弱实体集(Weak Entity Set):
    • 弱实体集是指没有足够属性来形成主键的实体集。
    • 弱实体集用双线矩形表示,并且它们的关系称为识别关系。
  1. 外键(Foreign Key):
    • 外键是用于在两个实体集之间建立联系的属性或属性集。
    • 在陈氏符号中,外键通常用箭头指向它们所指向的实体。

相关文章:

  • Airtest的控制手机滑动位置偏差修正方法总结
  • yearrecord——一个类似痕迹墙的React数据展示组件
  • 鸿蒙架构之AOP
  • WordPress 主题技巧:给文章页增加“谁来过”模块。
  • 处理uniapp刷新后,点击返回按钮跳转到登录页的问题
  • 手机数据恢复篇:如何从 Android 设备内恢复数据
  • 【leetcode】 字符串相乘(大数相乘、相加)
  • STM32的TIM1之PWM互补输出_死区时间和刹车配置
  • 内容安全(深度行为检测技术、IPS、AV、入侵检测方法)
  • arcgis怎么选取某个指定区域地方的数据,比如从全国乡镇数据选取长沙市乡镇数据
  • Blackbox AI:你的智能编程伙伴
  • SQL概述及其规则与规范
  • 【BUG】已解决:NOAUTH Authentication required
  • ctfshow-web入门-php特性(web127-web131)
  • VulnHub:CK00
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java小白进阶笔记(3)-初级面向对象
  • Java应用性能调优
  • JSDuck 与 AngularJS 融合技巧
  • Koa2 之文件上传下载
  • nginx 配置多 域名 + 多 https
  • rc-form之最单纯情况
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue-loader 源码解析系列之 selector
  • win10下安装mysql5.7
  • windows下如何用phpstorm同步测试服务器
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 排序(1):冒泡排序
  • 我有几个粽子,和一个故事
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • $(selector).each()和$.each()的区别
  • (ZT)出版业改革:该死的死,该生的生
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (接口自动化)Python3操作MySQL数据库
  • (算法)N皇后问题
  • (转)关于多人操作数据的处理策略
  • (转)可以带来幸福的一本书
  • (转)树状数组
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @ConditionalOnProperty注解使用说明
  • @RequestBody与@ModelAttribute
  • @Transactional类内部访问失效原因详解
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [000-002-01].数据库调优相关学习
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [ARC066F]Contest with Drinks Hard
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [IE编程] 如何获得IE版本号
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [Nuget]使用Nuget管理工具包
  • [office] 如何在Excel中拉动单元格时表头不变形- #学习方法#职场发展#经验分享
  • [Python人工智能] 四十二.命名实体识别 (3)基于Bert+BiLSTM-CRF的中文实体识别万字详解(异常解决中)