说到关系,那就不得不提两个东西:

1、E—R图,也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型
2、关系模式:是对关系的描述
    关系模式可以用五元组形式表示:R(U,D,Dom,F),其中R:表示关系名,U:表示属性集合,D表示属性域(来自那个域),Dom: 属性向域的映像集合,F:表示函数依赖。但是一般情况下,我们通常把关系模式表示为:R(U)或者R(A,B)(其中A、B代表U中的属性)比如说,关系模式class(class_No,classRoom_No,director,grade),班级的关系模式中:班级号、教室号、班主任、年级都是class的属性。
    那么,我们的学生信息管理系统里面要怎么去画这个E-R图呢?
首先:我们的student数据库里面有6张表,分别是,User、class、course、gradecourse、student、result。
 然后、逐一分析一下:
    1、student、result、course表。
    

转换成关系模式,就是
    R_student(姓名、性别、学号、入学日期、班级)
    R_course (课程编号、课程、类型、描述)
    R_result (学号课程、result)
黄色表示主键、斜体加粗表示外键。

2、class、student表:
    
转换成关系模式就是:
    R_student(姓名、性别、学号、入学日期、班号
    R_class (班号、年级、教室、班主任)
班号在student表中是外键,在class表中是主键。

3、course、class、gradecourse表。
    

    转换成关系模式就是:
    R_class(班号、年级、班主任、教室)
    R_course(课程名、课程编号、类型、描述)
    R_gradecourse (年级课程名
通过class表得到年级、通过course表得到课程名组合成gradecourse表。
    
到这,基本上六张表的关系就差不多了。之所以分析各张表的相互关系,是因为在敲学生信息管理系统的过程中,有一个疑问一直困扰着我:在修改一张表的数据时,他会涉及到其他表中的数据,这个时候我们需要保持数据的一致性!!!在这里主要是指:参照完整性!
        简单的来说,参照完整性就是指表间主外键关系。
        参照完整性属于表间规则。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一不改其二,就会影响数据的完整性:例如修改父表中关键字值后,子表关键字值未做相应改变;删除父表的某记录后,子表的相应记录未删除,致使这些记录成为孤立记录;对于子表插入的记录,父表中没有相应关键字值的记录;等等。对于这些设计表间数据的完整性,统称为参照完整性。

参照完整性则是相关联的两个表之间的约束,具体的说,就是从表中每条记录外键的值必须是主表中存在的,因此,如果在两个表之间建立了关联关系,则对一个关系进行的操作要影响到另一个表中的记录。

如果实施了参照完整性,那么当主表中没有相关记录时,就不能将记录添加到相关表中。也不能在相关表中存在匹配的记录时删除主表中的记录,更不能在相关表中有相关记录时,更改主表中的主键值。也就是说,实施了参照完整性后,对表中主键字段进行操作时系统会自动地检查主键字段,看看该字段是否被添加、修改、删除了。如果对主键的修改违背了参照完整性的要求,那么系统就会自动强制执行参照完整性

     比如:学籍表中,我们发现它涉及到了班号、如果此时用户输入一个class表里没有的班号,这就造成了数据的冗余,产生大量无用的数据。这时怎么处理???为了保证数据的完整性。有两个办法可以解决这个问题。第一:在软件中限制用户的输入,不让用户自己随意的输入,直接从现有的表里选择数据或者设置判断。第二:在数据库中设置规则、约束。
    虽然,这次在学生信息管理系统中我没有去实现和完善这块内容。但是,基本还是了解了这方面的知识了,期待机房中能用上这些
                            水平所限,博客纰漏之处,望斧正!感激不尽!


最新文章

  1. bzoj 2434 阿狸的打字机 fail树的性质
  2. 解读sencha touch移动框架的核心架构(二)
  3. LDA(文档主题模型)
  4. [ASE][Daily Scrum]11.30
  5. opencv6.4-imgproc图像处理模块之直方图与模板
  6. HTTP 错误 500.21 - Internal Server Error 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”
  7. JS - Constructor还可以这样用
  8. map遍历
  9. dede 设置为全动态浏览
  10. Knockout应用开发指南 第三章:绑定语法(2)
  11. Android处理延迟加载的方法
  12. Win7 VS2017 NASM编译FFMPEG(2018.12.22)
  13. webstorm更改scss输出路径
  14. percona mysql server5.7基于gtid的主从复制
  15. tail命令 输出文件后n行,默认查看文件的后10行
  16. 转:【专题四】自定义Web浏览器
  17. 学习笔记-AngularJs(二)
  18. 9.Solr4.10.3数据导入(post.jar方式和curl方式)
  19. Oracle多表关联如何更新多个字段
  20. IT运维助力业务增值

热门文章

  1. ViperX 300 Robot Arm 机械臂 “5自由度和360°全方位旋转”
  2. 第三章节 BJROBOT 角速度校正 【ROS全开源阿克曼转向智能网联无人驾驶车】
  3. python 文章集合
  4. Kafka知识总结及面试题
  5. 为什么Elasticsearch不适合做数据存储?(转学习使用)
  6. 转 linux终端 字符界面 显示乱码 .
  7. CentOS7 普通用户绕过root登录
  8. Solon rpc 之 SocketD 协议 - 消息应答模式
  9. 4.k8s存储之Volume、PV、PVC和StatefulSet
  10. 【高级排序算法】1、归并排序法 - Merge Sort