日期:2014-05-17  浏览次数:20701 次

【求助】【高难度】多个父表对应一个子表,如何建立约束关系???????
具体是这样的: 多个父表对应一个子表。

父表A【提示:类别内容永远是 语文,不会出现其它内容】:
nid  类别   得分
1    语文   85
2    语文   75
3    语文   81
。。。。

父表B【提示:类别内容永远是 数学,不会出现其它内容】:
nid  类别   得分
1    数学   85
2    数学   75
3    数学   81
。。。。

父表C【提示:类别内容永远是 英语,不会出现其它内容】:
nid  类别   得分
1    英语   85
2    英语   75
3    英语   81
。。。。


子表:
nid   姓名   类别   父表id   
1     张三   语文   1 
2     张三   语文   2    
3     张三   数学   1
4     张三   英语   1
。。。。

如何创建关系约束,要求,子表的属性内容: 【类别】 和【父表ID】必须存在于 上述 父表A 或  父表B  或 父表C 任何一个表中,如果不存在,则视为违背约束关系。

父表的删除和更新,要求 无操作,即子表里存在,不允许删除。

这种多个父表和一个子表的 通过2个 字段 来 实现约束,SQLSERVER 里如何创建关系约束呢???? 

有挑战吧,能实现吗 ???????



------解决方案--------------------
用外键约束应该无法实现,需用触发器.

另:不建议这样的系统设计,数据完整性应在前端程序中维护.
------解决方案--------------------
另外,如果你不想改变表的结构,那么要实现外键约束,

可以考虑通过触发器来实现的。

在子表上建立一个触发器,然后当每次向子表中插入数据时,验证字段“父表id” ,是否出自父表中的nid,

但这个逻辑判断比较复杂,因为你首先需要根据插入到子表的“类别”字段的值,来判断“父表id”是哪个父表,比如类别是语文,那么就去父表A中验证,如果是数据,那么就去父表B中去验证。

所以非常麻烦
------解决方案--------------------
值 需要 3张 表 
1,科目表
2,分数表
3,学生表
------解决方案--------------------
这么奇葩的表结构啊,一个字段只存一个值,还需要那个字段干嘛。
应该这么设计:
课程表:课程ID,课程名称
学生表:学生ID,学生姓名
测验表:测验ID,测验名称
成绩表:测验ID,课程ID,学生ID,成绩