例一、假设有以下表:
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. mysql中使用instr替换like

    使用内部函数instr,可代替传统的like方式查询,并且速度更快. instr函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 实例: SELECT o. ...

  2. java: file/outputStream/InputStream 复制文件

    java i/o 复制文件 public static void main(String[] args) throws Exception { // TODO 自动生成的方法存根 if(args.le ...

  3. Mysql 高级部分

    MySQL 高级部分   (1)索引(index)..................................................................... 1 (2) ...

  4. poj2114树分治

    题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vect ...

  5. Node.js 常用工具 (util.inherits)

    util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherits(constructor ...

  6. Nat123域名设置使用

    可以设自己的域名映射到内网ip:  http://www.nat123.com/Pages_18_294.jsp 暂时还没学习使用,先保存一下

  7. 《Effective C++》——条款20:宁以pass-by-reference-to-const替换pass-by-value

    切割(slicing)问题 请看下面代码: class Window { public: ... std::string name()const; //返回窗口名称 virtual void disp ...

  8. js改变select的选中项不触发select的change事件

    // test var selectEl = document.querySelector('select') var buttonEl = document.querySelector('butto ...

  9. MongoDB shell基本操作

    shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的.使用shell 命令,需要启动mongo.exe.mongodb百科 常用shel ...

  10. NOI模拟赛 #4

    好像只有一个串串题可以做... 不会 dp 和数据结构啊 QAQ 10 + 20 + 100 = 130 T1 一棵树,每个点有一个能量的最大容量 $l_i$ 和一个增长速度 $v_i$,每次可以选一 ...