部门--用户(1....n)
部门--试卷(1....n)
试卷--结果(1...n)
用户--结果(1...1)
...
其它关系略...
试卷属于部门,考试结果属于用户,因此,这想要实现部门的修改删除直接导致用户和试卷的修改删除,用户的修改删除直接导致考试结果的修改删除,所以我这样建立它们的关系:
部门ID---级联更新/删除---用户表DeptID
| 用户表ID-------级联更新/删除----
| |
|-----级联更新/删除---试卷表DeptID |
试卷表ID |
| |
| 结果表UserID
|----级联更新/删除----结果表ExamID
这样的关系很明显形成了一个循环级联,那么我该如何进行该关系的设计呢?向各位大侠请教!!!
13 个解决方案
#1
个人感觉最好避免级联删除和更新,这一类触发器对于今后的开发,测试,维护,数据移植都很麻烦。
如果这些业务逻辑要放在数据库里面,可以写成存储过程,必要的时候再去调用,或者放在客户端也可以。
毕竟在实际的删除和更新前需要很多必要的检查和确认才能执行。
另外,对于 部门--试卷(1....n) 这个关系,
如果不是我理解有误的话,我觉得每一份试卷应该属于一个用户,当然试卷有个部门的属性是可以的。
删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联。
如果这些业务逻辑要放在数据库里面,可以写成存储过程,必要的时候再去调用,或者放在客户端也可以。
毕竟在实际的删除和更新前需要很多必要的检查和确认才能执行。
另外,对于 部门--试卷(1....n) 这个关系,
如果不是我理解有误的话,我觉得每一份试卷应该属于一个用户,当然试卷有个部门的属性是可以的。
删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联。
#2
谢谢一楼的回复,不爱熬夜就表熬了弟兄,
对于 部门--试卷(1....n) 这个关系
我没有讲清楚项目的需求,整个系统是一个在线考试系统,部门是分级管理的,每个部门都可以独立创建试卷,对本部门及其子部门人员进行考核,也就是说试卷有个属性是它属于哪个部门.
对于您说的解决办法(删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联),用户与考试结果的关系通过程序来实现其级联更新/删除.那么意思就是无法完全使用数据库关系来保证了,看来也只能如此了.
对于 部门--试卷(1....n) 这个关系
我没有讲清楚项目的需求,整个系统是一个在线考试系统,部门是分级管理的,每个部门都可以独立创建试卷,对本部门及其子部门人员进行考核,也就是说试卷有个属性是它属于哪个部门.
对于您说的解决办法(删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联),用户与考试结果的关系通过程序来实现其级联更新/删除.那么意思就是无法完全使用数据库关系来保证了,看来也只能如此了.
#3
这个级联应该没有问题啊
做末节点表应该是用户考试成绩表(用户ID,成绩ID,成绩数据)吧,如果是这样这个级联没有问题
做末节点表应该是用户考试成绩表(用户ID,成绩ID,成绩数据)吧,如果是这样这个级联没有问题
#4
就结构,我不认为与问题。
但是就级联的删除我觉得要做适当调整,删除一般情况不要做物理删除。
但是就级联的删除我觉得要做适当调整,删除一般情况不要做物理删除。
#5
用户与考试结果的关系通过程序来实现其级联更新/删除.那么意思就是无法完全使用数据库关系来保证了,看来也只能如此了.
-------------------------------------
部门与试卷,用户与考试结果等这些关系可以通过主外键关联以确保其完整性。
更新和删除的实现则有不同方法:触发器,存储过程,客户端代码...
只是个人觉得用触发器去实现对于今后的维护比较麻烦一些。
-------------------------------------
部门与试卷,用户与考试结果等这些关系可以通过主外键关联以确保其完整性。
更新和删除的实现则有不同方法:触发器,存储过程,客户端代码...
只是个人觉得用触发器去实现对于今后的维护比较麻烦一些。
#6
如果各表我都加一个Deleted字段,1表示删除,如何级联将其关联表中的Deleted字段也置为1呢?是否要通过触发器或程序来实现?
#7
加删除标记也是个好办法,可以恢复误删除操作。
触发器或者程序都可以,但是用程序(存储过程,客户端代码)更灵活一些。个人的意见。
触发器或者程序都可以,但是用程序(存储过程,客户端代码)更灵活一些。个人的意见。
#8
结帖的时候说我可用分不够,郁闷了,怎么样才能够结帖阿?
以前我一直在vchelp论坛,最近才过来csdn,还不是很清楚这个上面乱七八糟的分都是怎么用的,呵呵
以前我一直在vchelp论坛,最近才过来csdn,还不是很清楚这个上面乱七八糟的分都是怎么用的,呵呵
#9
同意三楼的说法,如果部门与用户是1..n的关系
那只要建立一个关系实体,用来保存用户id,试卷id,成绩 这三个属性就可以了啊,
如果考虑回复,最多加一个楼主所说的deleted来标识是否删除即可。
更新试卷的成绩或者删除用户而导致删除其成绩,也只要操作这个关系实体就行了啊,
因为试卷是一个独立的实体,并不是用户的属性,但某个试卷的成绩却可以作为一个用户的属性。
那只要建立一个关系实体,用来保存用户id,试卷id,成绩 这三个属性就可以了啊,
如果考虑回复,最多加一个楼主所说的deleted来标识是否删除即可。
更新试卷的成绩或者删除用户而导致删除其成绩,也只要操作这个关系实体就行了啊,
因为试卷是一个独立的实体,并不是用户的属性,但某个试卷的成绩却可以作为一个用户的属性。
#10
奇怪了,怎么其它的回复看不到啊,只看到1--5楼
#11
不好意思,各位,我不知道怎么给大家给分呢,管理帖子,然后得分那儿输入分值,然后怎么保存呢?
#12
啊哈,知道了,结帖了...
#13
学习
#1
个人感觉最好避免级联删除和更新,这一类触发器对于今后的开发,测试,维护,数据移植都很麻烦。
如果这些业务逻辑要放在数据库里面,可以写成存储过程,必要的时候再去调用,或者放在客户端也可以。
毕竟在实际的删除和更新前需要很多必要的检查和确认才能执行。
另外,对于 部门--试卷(1....n) 这个关系,
如果不是我理解有误的话,我觉得每一份试卷应该属于一个用户,当然试卷有个部门的属性是可以的。
删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联。
如果这些业务逻辑要放在数据库里面,可以写成存储过程,必要的时候再去调用,或者放在客户端也可以。
毕竟在实际的删除和更新前需要很多必要的检查和确认才能执行。
另外,对于 部门--试卷(1....n) 这个关系,
如果不是我理解有误的话,我觉得每一份试卷应该属于一个用户,当然试卷有个部门的属性是可以的。
删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联。
#2
谢谢一楼的回复,不爱熬夜就表熬了弟兄,
对于 部门--试卷(1....n) 这个关系
我没有讲清楚项目的需求,整个系统是一个在线考试系统,部门是分级管理的,每个部门都可以独立创建试卷,对本部门及其子部门人员进行考核,也就是说试卷有个属性是它属于哪个部门.
对于您说的解决办法(删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联),用户与考试结果的关系通过程序来实现其级联更新/删除.那么意思就是无法完全使用数据库关系来保证了,看来也只能如此了.
对于 部门--试卷(1....n) 这个关系
我没有讲清楚项目的需求,整个系统是一个在线考试系统,部门是分级管理的,每个部门都可以独立创建试卷,对本部门及其子部门人员进行考核,也就是说试卷有个属性是它属于哪个部门.
对于您说的解决办法(删除用户前确保其关联的试卷结果先被删除就可以了,这不存在循环级联),用户与考试结果的关系通过程序来实现其级联更新/删除.那么意思就是无法完全使用数据库关系来保证了,看来也只能如此了.
#3
这个级联应该没有问题啊
做末节点表应该是用户考试成绩表(用户ID,成绩ID,成绩数据)吧,如果是这样这个级联没有问题
做末节点表应该是用户考试成绩表(用户ID,成绩ID,成绩数据)吧,如果是这样这个级联没有问题
#4
就结构,我不认为与问题。
但是就级联的删除我觉得要做适当调整,删除一般情况不要做物理删除。
但是就级联的删除我觉得要做适当调整,删除一般情况不要做物理删除。
#5
用户与考试结果的关系通过程序来实现其级联更新/删除.那么意思就是无法完全使用数据库关系来保证了,看来也只能如此了.
-------------------------------------
部门与试卷,用户与考试结果等这些关系可以通过主外键关联以确保其完整性。
更新和删除的实现则有不同方法:触发器,存储过程,客户端代码...
只是个人觉得用触发器去实现对于今后的维护比较麻烦一些。
-------------------------------------
部门与试卷,用户与考试结果等这些关系可以通过主外键关联以确保其完整性。
更新和删除的实现则有不同方法:触发器,存储过程,客户端代码...
只是个人觉得用触发器去实现对于今后的维护比较麻烦一些。
#6
如果各表我都加一个Deleted字段,1表示删除,如何级联将其关联表中的Deleted字段也置为1呢?是否要通过触发器或程序来实现?
#7
加删除标记也是个好办法,可以恢复误删除操作。
触发器或者程序都可以,但是用程序(存储过程,客户端代码)更灵活一些。个人的意见。
触发器或者程序都可以,但是用程序(存储过程,客户端代码)更灵活一些。个人的意见。
#8
结帖的时候说我可用分不够,郁闷了,怎么样才能够结帖阿?
以前我一直在vchelp论坛,最近才过来csdn,还不是很清楚这个上面乱七八糟的分都是怎么用的,呵呵
以前我一直在vchelp论坛,最近才过来csdn,还不是很清楚这个上面乱七八糟的分都是怎么用的,呵呵
#9
同意三楼的说法,如果部门与用户是1..n的关系
那只要建立一个关系实体,用来保存用户id,试卷id,成绩 这三个属性就可以了啊,
如果考虑回复,最多加一个楼主所说的deleted来标识是否删除即可。
更新试卷的成绩或者删除用户而导致删除其成绩,也只要操作这个关系实体就行了啊,
因为试卷是一个独立的实体,并不是用户的属性,但某个试卷的成绩却可以作为一个用户的属性。
那只要建立一个关系实体,用来保存用户id,试卷id,成绩 这三个属性就可以了啊,
如果考虑回复,最多加一个楼主所说的deleted来标识是否删除即可。
更新试卷的成绩或者删除用户而导致删除其成绩,也只要操作这个关系实体就行了啊,
因为试卷是一个独立的实体,并不是用户的属性,但某个试卷的成绩却可以作为一个用户的属性。
#10
奇怪了,怎么其它的回复看不到啊,只看到1--5楼
#11
不好意思,各位,我不知道怎么给大家给分呢,管理帖子,然后得分那儿输入分值,然后怎么保存呢?
#12
啊哈,知道了,结帖了...
#13
学习