表之间关系,如何实现?
2010-10-02 11:27
169 查看
成绩表:
学号 姓名 语文 数学 物理 总分
----—— ---- ---- ---- ---- ———
210801051 李四 74 84 94
210801052 张三 74 83 93
学生表:
学号 姓名 性别 所在系 备注
----—— ---- ---- ---- ----
210801051 李四 男 计科 无
210801052 张三 男 计科 无
课程表:
编号 课程名 课时 学分 备注
---- ---- ---- ---- ----
1 数学 48 2
2 英语 48 2
其中成绩表里面的学号,姓名是学生表里面的。
课程名是课程表里面的。
问题:
当学生表增加学生,或者课程表增加课程的时候,
成绩表如何自动增加呢?
不同意1楼和2楼的说法,触发器不是这样用的
楼主的数据结构设计就有问题,
其实不存在你所谓的"成绩表"
无论是增加学生还是增加课程科目,没有发生过的考试,成绩都是null,不能当做0分
而从数据结构上说,这样的null是业务逻辑,又不是硬生生塞入数据库的,
事实上用户的数据结构应该是:考试成绩明细表,结构如下:
1.考试成绩明细Id(主键)
2.学生Id(外键)
3.课程科目Id(外键)
4.考试成绩
5.考试时间
输出的时候,根据各表联合查询并将各科目行专列交叉输出
所以,楼主问题的实质是:合理的设计数据结构,然后用恰当的查询输出
而不是多步操作,更不需要触发器这样的系统事务来处理
差不多是这样,
不过,一般实体字段不会在数据库中多次出现,都是通过Id以外键的方式映射的,
楼主你还是买本数据库设计的入门资料看看吧,
你连最基本的关系型数据库的知识都没有,现在学校都不教这些吗?那他们教什么呢?
学号是肯定应该出现在成绩表中的,而且课程编号应该在成绩表中而不是课程名称,成绩表中应该是双主键,有这些主键了用不用ID都可以,还有你要实现的功能就应该是用触发器,很简单的,多看看书,就几条语句,具体格式我给忘了,但表的关系肯定没问题
差不多是这样,
不过,一般实体字段不会在数据库中多次出现,都是通过Id以外键的方式映射的,
楼主你还是买本数据库设计的入门资料看看吧,
你连最基本的关系型数据库的知识都没有,现在学校都不教这些吗?那他们教什么呢?
[/Quote]
刚刚开数据库这门口的,很多都不会的,还请谅解呀,呵呵!行转列有点难哦,
那用触发器可以吗?是不是简单点呢,谢谢!
来源:足球直播
学号 姓名 语文 数学 物理 总分
----—— ---- ---- ---- ---- ———
210801051 李四 74 84 94
210801052 张三 74 83 93
学生表:
学号 姓名 性别 所在系 备注
----—— ---- ---- ---- ----
210801051 李四 男 计科 无
210801052 张三 男 计科 无
课程表:
编号 课程名 课时 学分 备注
---- ---- ---- ---- ----
1 数学 48 2
2 英语 48 2
其中成绩表里面的学号,姓名是学生表里面的。
课程名是课程表里面的。
问题:
当学生表增加学生,或者课程表增加课程的时候,
成绩表如何自动增加呢?
不同意1楼和2楼的说法,触发器不是这样用的
楼主的数据结构设计就有问题,
其实不存在你所谓的"成绩表"
无论是增加学生还是增加课程科目,没有发生过的考试,成绩都是null,不能当做0分
而从数据结构上说,这样的null是业务逻辑,又不是硬生生塞入数据库的,
事实上用户的数据结构应该是:考试成绩明细表,结构如下:
1.考试成绩明细Id(主键)
2.学生Id(外键)
3.课程科目Id(外键)
4.考试成绩
5.考试时间
输出的时候,根据各表联合查询并将各科目行专列交叉输出
所以,楼主问题的实质是:合理的设计数据结构,然后用恰当的查询输出
而不是多步操作,更不需要触发器这样的系统事务来处理
差不多是这样,
不过,一般实体字段不会在数据库中多次出现,都是通过Id以外键的方式映射的,
楼主你还是买本数据库设计的入门资料看看吧,
你连最基本的关系型数据库的知识都没有,现在学校都不教这些吗?那他们教什么呢?
学号是肯定应该出现在成绩表中的,而且课程编号应该在成绩表中而不是课程名称,成绩表中应该是双主键,有这些主键了用不用ID都可以,还有你要实现的功能就应该是用触发器,很简单的,多看看书,就几条语句,具体格式我给忘了,但表的关系肯定没问题
差不多是这样,
不过,一般实体字段不会在数据库中多次出现,都是通过Id以外键的方式映射的,
楼主你还是买本数据库设计的入门资料看看吧,
你连最基本的关系型数据库的知识都没有,现在学校都不教这些吗?那他们教什么呢?
[/Quote]
刚刚开数据库这门口的,很多都不会的,还请谅解呀,呵呵!行转列有点难哦,
那用触发器可以吗?是不是简单点呢,谢谢!
来源:足球直播
相关文章推荐
- 如何在Lua与C/C++之间实现table数据的交换
- 业务用例, 业务用例场景与业务用例实现之间的关系
- 如何使用两台主机实现三个网段之间互通且三个网段均可联网
- 关于如何减缓、解除hibernate与domain之间的强关系限制以及与mybatis简单对比
- JSP如何与数据库交互?即JSP与后台Servlet之间的关系,如何交互
- Jimoshi_Spring 框架学习(一)--Spring实现IOC思想、javabean对象、Spring对象和对象之间关系
- 如何处理好合伙之之间的关系
- 全局组、域本地组、通用组到底有什么区别?它们之间的关系如何?
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
- 如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
- 如何用rownum实现大于、小于逻辑?(返回rownum在4—10之间的数据)
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
- 全局组、域本地组、通用组到底有什么区别?它们之间的关系如何?
- 我该如何理解进程与页之间是什么关系???
- 线程概念,状态及状态之间的关系,实现多线程方法,实现同步线程的方式
- Maven学习笔记二eclipse如何使用 Maven、Maven目录pom.xml文件的解析、maven 和maven项目之间的关系
- 如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- 如何实现程序与浏览器之间的拖放(转)
- 如何通俗地解释 CGI、FastCGI、php-fpm 之间的关系?