其中,B和C中都有个UserId字段(就是表A的主键)请问A表与B和C需不需要建立外键的关联,我认为外键的建立是跟需求有关的,比如我的会员表中如果要删除会员的功能,那就要级联删除B和C中的该会员的有关记录,但是我不需要删除会员的资料,那我是不是就没有太大的必要去建立A表与B, C的关联了那?还有就是只有注册过的会员才能上传产品和发表评论,因此也就是不存在数据完整性的欠缺问题,因为程序会判断她没登陆就也就不会再B,C表中插入数据也就不会产生垃圾数据了,不知我的理解有没有问题,有说得不清楚的,请说,我一直在线,谢谢
7 个解决方案
#1
还有就是是不是只要两个表之间有主键和外建的关系就要建立外建约束哪?比如E表中的nameId字段是主键,她对应与F表中的nameIds是不是这两个表就要建立外建约束哪?
#2
数据完整性的约束,你在前台程序中加了,当然好,但后台仍然要加。因为数据最终是要存到数据库中的。数据库中加了外码约束,前台没有加检测,最多报错,但数据仍然是完整的;而前台一个地方加了完整性检测,并不能保证不正确的数据从其它程序入口进入数据库。数据库对前台程序应该持不信任的态度,不管你是否有检测,我都要检测数据完整性,这样才万无一失。
#3
那也就是说还是很必要的加上外键约束的
#4
对,这是我坚持的观点。只要能加上外码的地方,一定要加上。它不但确保了数据的完整性,还清晰的表示了对象之间的一种静态关系,有助于理解对象之间的复杂关系。而散布在前台程序中的检测,并不能清晰地表达这种关系,查阅起来也很麻烦。
#5
有时候会遇到表中数据添加外键约束不成功的情况,不知道是什么原因比如:“Users”表成功保存
“CostumeCommRevert”表
- 无法创建关系“FK_CostumeCommRevert_Users”。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY 约束 'FK_CostumeCommRevert_Users' 引入表 'CostumeCommRevert' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。这样都是是什么原因哪?
“CostumeCommRevert”表
- 无法创建关系“FK_CostumeCommRevert_Users”。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY 约束 'FK_CostumeCommRevert_Users' 引入表 'CostumeCommRevert' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。这样都是是什么原因哪?
#6
外码约束如果是级联删除的,就不能有多重的。比如A级联删除B,B就不能再级联删除C了。建议尽量少使用级联删除的外码,而使用NO ACTION选项。原因看一下主题为“触发器和删除操作 ”,提问时间为:2006-4-26 7:55:48 的问题中我的回复。
#7
多谢笨笨牛
#1
还有就是是不是只要两个表之间有主键和外建的关系就要建立外建约束哪?比如E表中的nameId字段是主键,她对应与F表中的nameIds是不是这两个表就要建立外建约束哪?
#2
数据完整性的约束,你在前台程序中加了,当然好,但后台仍然要加。因为数据最终是要存到数据库中的。数据库中加了外码约束,前台没有加检测,最多报错,但数据仍然是完整的;而前台一个地方加了完整性检测,并不能保证不正确的数据从其它程序入口进入数据库。数据库对前台程序应该持不信任的态度,不管你是否有检测,我都要检测数据完整性,这样才万无一失。
#3
那也就是说还是很必要的加上外键约束的
#4
对,这是我坚持的观点。只要能加上外码的地方,一定要加上。它不但确保了数据的完整性,还清晰的表示了对象之间的一种静态关系,有助于理解对象之间的复杂关系。而散布在前台程序中的检测,并不能清晰地表达这种关系,查阅起来也很麻烦。
#5
有时候会遇到表中数据添加外键约束不成功的情况,不知道是什么原因比如:“Users”表成功保存
“CostumeCommRevert”表
- 无法创建关系“FK_CostumeCommRevert_Users”。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY 约束 'FK_CostumeCommRevert_Users' 引入表 'CostumeCommRevert' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。这样都是是什么原因哪?
“CostumeCommRevert”表
- 无法创建关系“FK_CostumeCommRevert_Users”。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY 约束 'FK_CostumeCommRevert_Users' 引入表 'CostumeCommRevert' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。这样都是是什么原因哪?
#6
外码约束如果是级联删除的,就不能有多重的。比如A级联删除B,B就不能再级联删除C了。建议尽量少使用级联删除的外码,而使用NO ACTION选项。原因看一下主题为“触发器和删除操作 ”,提问时间为:2006-4-26 7:55:48 的问题中我的回复。
#7
多谢笨笨牛