【求助】【高难度】多个父表对应一个子表,如何建立约束关系???????
具体是这样的: 多个父表对应一个子表。
父表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,成绩