例一、假设有以下表:
T1(a1,a2, a3, a5)
T2(a3,a4)
T3(a5, a6)
T4(a3, a5, a7)
其中带下划线的属性标识为所在关系模式的主码
T1中的a3是参照T2的外码
T1中的a5是参照T3的外码
T4中的a3是参照T2的外码
T4中的a5是参照T3的外码
请将上述关系模式用适当的E-R图表示出来,并用下划线标注出作为实体主码的属性。

分析易知:
假如有实体t1,t2,t3,t4则
T1(a1,a2,)
T2(a3,a4)
T3(a5, a6)
T4( a7)
t4中仅仅只有a7所以可以认为是联系的属性(用T4来表示联系)
所以易知t1和t2之间存在一个联系(用T1来表示)

下面是E-N图:

例二、在某数据库中,相关表的建表语句如下:
create tableT1(
a1 int primary key,
a2 int,
a3 int foreign key references T2(a3)
);
create tableT2(
a3 int primary key,
a4 int,
a5 int foreign key references T2(a3)
);
create tableT3(
a1 int,
a3 int,
a6 int,
primary key (a1, a3),
a1 foreign key references T1(a1),
a3 foreign key references T2(a3)
);
请画出相应的E-R图,使得可以从该E-R图推导出上述表定义,其中实体和联系的名称可以自定,实体的主码属性请使用下划线标明。

分析:
化简表如下:
tableT1(a1,a2,a3)    a1为主键,a3为外键(T2表的主键)
tableT2(a3,a4,a5)    a3为主键引用T2表中的主键(也就是a3)
tableT3(a1,a3,a6)    a1,a3为联合主键,并且a1,a3分别是外键

假如有实体t1,t2,t3,t4则
tableT1(a2)    
tableT2(a4)    
tableT3(a6)

我们看tableT1表
表中只含有一个a2,所以可以认为它是联系的一个属性
并且存在一个含有a1的属性的实体我们记为t1
存在一个含有a3的属性的实体我们记为t3

同理我们看tableT2表
易知T2中只含有a4,所以我们可以认为它是一个联系的属性
并且存在一个含有a3,a5属性的实体我们记为t2

现在看tableT3
易知T3中只含有a6,所以我们可以认为它是一个联系的属性

所以可画E-N图:
       

例三、设某教学管理系统,其查询模块需要提供如下功能:
Ⅰ.查询系信息,列出各系编号、系名和系办公电话;
Ⅱ.查询某系教师的信息,列出教师号、教师名、工资和聘用日期;
Ⅲ.查询某教师讲授的课程信息,列出课程号、课程名和学分;
Ⅳ.查询讲授某门课程的教师信息,列出教师名和职称;
Ⅴ.查询某门课程的先修课程信息,列出先修课程号和先修课程名。

系统有如下业务规则:
Ⅰ.一个系可聘用多名教师,一名教师只能受聘于一个系;
Ⅱ.一名教师可讲授多门课程,一门课程可由多名教师讲授;
Ⅲ.一门课程可以有多门先修课程,也可以没有先修课程

(1)根据以上查询功能与业务规则,用E-R图描述该系统的概念模型。
(2)将ER图转换为满足3NF的关系模式,并说明每个关系模式的主码和外码。
一个系可以聘用多名教师,一名教师只能受聘于一个系,所以系实体与教师实体有联系;
一名教师可以讲授多门课程,一门课程可由多名教师讲授,所以教师实体与课程实体有联系;
一门课程可以有多门先修课程,所以课程间也有联系。

所以我们可以作出以下E-N图:

所以:
系(系编号,系名,系办公电话)无外码
教师(教师号,教师名,工资,聘用日期,职称,系编号)外码:系编号
课程(课程号,课程名,学分,教师号)外码:教师号
先修(先修课程号,先修课程名,课程号)外码:课程号

SQL基础E-R图画法的更多相关文章

  1. SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念

    SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...

  2. 《SQL基础教程》+ 《SQL进阶教程》 学习笔记

    写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...

  3. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  4. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. SQL基础--&gt; 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  7. 黑马程序员:Java基础总结----GUI图形化界面

    黑马程序员:Java基础总结 GUI图形化界面   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流!   GUI(Graphical User Interface)图形化界 ...

  8. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

  9. [SQL] SQL 基础知识梳理(七)- 集合运算

    SQL 基础知识梳理(七)- 集合运算 目录 表的加减法 联结(以列为单位) 一.表的加减法 1.集合:记录的集合(表.视图和查询的执行结果). 2.UNION(并集):表的加法 -- DDL:创建表 ...

  10. 数据库学习---SQL基础(一)

     数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) SQL(struct query language)结构化查询语言:一种专门与数据库通信的语言, ...

随机推荐

  1. Merge 2

    在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge ...

  2. spring boot: @EnableScheduling开启计划任务支持,@Scheduled计划任务声明

    spring boot: @EnableScheduling开启计划任务支持, @Scheduled计划任务声明 package ch2.scheduler2; //日期转换方式 import jav ...

  3. 计算机_软件技巧_01_优雅地再word中插入代码

    二.参考资料 1.如何优雅的在 Microsoft word中插入代码

  4. MAMP mac下启动Mysql

    MAMP mac下启动Mysql /Applications/MAMP/Library/bin/mysql -u root -p 初始密码 root:

  5. hdoj-1013-Digital Roots(九余数定理)

    题目链接 #include <iostream> using namespace std; int main() { string a; int b; ") { b = ; ;i ...

  6. boost库 bind/function的使用

    Boost::Function 是对函数指针的对象化封装,在概念上与广义上的回调函数类似.相对于函数指针,function除了使用自由函数,还可以使用函数对象,甚至是类的成员函数,这个就很强大了哈 # ...

  7. Audiophobia(Floyd算法)

    个人心得:这在一定途径上完成查询方面还是很吃力,得多锻炼空间能力,不能再每次都看到就后退,要全力应对, 那怕被虐的不要不要的. 这题主要是求俩个端点中所有路径中最大构成的集合中最小的数值,其实开始思想 ...

  8. [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  9. 快速沃尔什变换(FWT)学习笔记

    概述 FWT的大体思路就是把要求的 C(x)=A(x)×B(x)  即 \( c[i]=\sum\limits_{j?k=i} (a[j]*b[k]) \) 变换成这样的:\( c^{'}[i]=a^ ...

  10. 序章:为什么学习使用kotlin、及kotlin的一些碎碎念

    为什么使用kotlin? 当然是因为项目目前的开发语言是kotlin啊! 一方面是想能够尽快适应项目,另一方面,kotlin这门语言独特的语法,确实很吸引我,也让我意识到java代码在某些程度上的繁琐 ...