E-R图的画法

很久没有进行数据库设计了,今儿要画E-R图竟然全忘记了。只依稀记得一个图形的含义,赶紧的学习学习。这里转载一篇。留为后用。
转自:http://blog.csdn.net/DiscussQuestions/archive/2008/09/14/2928044.aspx

以自底向上设计概念结构的方法为例,它通常分为两步: 
第一步:首先要根据需求分析的结果(数据流图、数据字典等)对现实世界的数据进行抽象, 
设计各个局部视图即分E-R图。                                                   
第二步:集成局部视图。 
概念结构是对现实世界的一种抽象,一般有三种抽象:           
⑴分类       ( is   member   of  ) 
⑵聚集       ( is   part   of ) 
⑶概括       ( is   subset   of ) 
设计分E-R图的步骤是:⑴选择局部应用 
在需求分析阶段,通过对应用环境和要求进行详尽的调查分析,用多层数据流图和数据字典描述了整个系统。 
设计分E-R图的第一步,就是要根据系统的具体情况,在多层的数据流图中选择一个适当层次的(经验很重要)数据流图,让这组图中每一部分对应一个局部应用,我们即可以以这一层次的数据流图为出发点,设计分E-R图。 
一般而言,中层的数据流图能较好地反映系统中各局部应用的子系统组成,因此人们往往以中层数据流图作为设计分E-R图的依据 
⑵逐一设计分E-R图 
每个局部应用都对应了一组数据流图,局部应用涉及的数据都已经收集在数据字典中了。现在就是要将这些数据从数据字典中抽取出来,参照数据流图, <1> 标定局部应用中的实体, <2> 实体的属性、标识实体的码, <3> 确定实体之间的联系及其类型(1:1、1:n、m:n)。 
<1> 标定局部应用中的实体 
现实世界中一组具有某些共同特性和行为的对象就可以抽象为一个实体。对象和实体之间是 "is   member   of "的关系。例如在学校环境中,可以把张三、李四、王五等对象抽象为学生实体。 
对象类型的组成成分可以抽象为实体的属性。组成成分与对象类型之间是 "is   part   of "的关系。例如学号、姓名、专业、年级等可以抽象为学生实体的属性。其中学号为标识学生实体的码。 
<2> 实体的属性、标识实体的码 
实际上实体与属性是相对而言的,很难有截然划分的界限。同一事物,在一种应用环境中作为 "属性 ",在另一种应用环境中就必须作为 "实体 "。一般说来,在给定的应用环境中: 
⑴属性不能再具有需要描述的性质。即属性必须是不可分的数据项。 
⑵属性不能与其他实体具有联系。联系只发生在实体之间。 
<3> 确定实体之间的联系及其类型(1:1、   1:n、   m:n)。 
根据需求分析,要考察实体之间是否存在联系,有无多余联系 
(二)、   合并分E-R图,生成初步E-R图。 
各分E-R图之间的冲突主要有三类:属性冲突、命名冲突和结构冲突。 
1.属性冲突             (1)   属性域冲突,即属性值的类型、取值范围或取值集合不同。 
例如:属性“零件号”有的定义为字符型,有的为数值型。 
(2)   属性取值单位冲突。   例如:属性“重量”有的以克为单位,有的以公斤为单位。 
2.命名冲突           (1)   同名异义。                       不同意义对象相同名称。 
(2)   异名同义(一义多名)。同意义对象不相同名称。“项目”和“课题” 
3.结构冲突     
(1)   同一对象在不同应用中具有不同的抽象。例如 "课程 "在某一局部应用中被当作实体,而在另一局部应用中则被当作属性。 
(2)   同一实体在不同局部视图中所包含的属性不完全相同,或者属性的排列次序不完全相同。 
(3)   实体之间的联系在不同局部视图中呈现不同的类型。 
例如实体E1与E2在局部应用A中是多对多联系,而在局部应用B中是一对多联系;又如在局部应用X中E1与E2发生联系,而在局部应用Y中E1、E2、E3三者之间有联系。 
解决方法是根据应用的语义对实体联系的类型进行综合或调整。 
(三).修改与重构,生成基本E-R图 
分E-R图经过合并生成的是初步E-R图。之所以称其为初步E-R图,是因为其中可能存在冗余的数据和冗余的实体间联系,即存在可由基本数据导出的数据和可由其他联系导出的联系。冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难,因此得到初步E-R图后,还应当进一步检查E-R图中是否存在冗余,如果存在,应设法予以消除。修改、重构初步E-R图以消除冗余,主要采用分析方法。除此外,还可以用规范化理论来消除冗余。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
在YOLOv5-seg中,输出层是一个3D张量,其维度为(batch_size, num_classes, grid_size, grid_size),其中batch_size是输入像的数量,num_classes是类别数量(包括背景),grid_size是分割后的特征的大小。 为了可视化输出层,我们可以将每个类别的分割结果可视化为一张灰度像。对于每个类别,我们可以将其在输出层中的对应通道取出,并使用插值法将其还原到原始像大小。然后,我们将每个类别的灰度像叠加在一起,得到最终的分割结果。 具体实现方式可以参考以下代码: ```python import torch import torchvision.transforms.functional as TF import matplotlib.pyplot as plt # 假设output是模型输出的输出层,size是输入像的大小 output = torch.randn((batch_size, num_classes, grid_size, grid_size)) size = (512, 512) # 对每个类别进行可视化 for c in range(num_classes): # 取出对应通道 channel = output[:, c, :, :].unsqueeze(1) # 将通道还原到原始像大小 channel = torch.nn.functional.interpolate(channel, size=size, mode='bilinear', align_corners=False) # 转换为灰度像 channel = torch.sigmoid(channel).squeeze(1) # 将灰度像叠加在一起 if c == 0: seg_map = channel else: seg_map += channel # 可视化分割结果 seg_map = TF.to_pil_image(seg_map) plt.imshow(seg_map) plt.show() ``` 上述代码将输出层中每个类别的分割结果可视化为一张灰度像,并将所有类别的灰度像叠加在一起,得到最终的分割结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值