小弟要做一个非常简单的留言板,建立了下面3个表,其功能、结构和关系如下:myClients表
功能:保存用户的用户名和口令
字段1(用户名): name varChar(50)----------------主键
字段2(口令):password varChar(50)
notes表
功能:保存用户发布帖子的标题、内容、发布时间、用户名和帖子ID
字段1(帖子主题): subject varChar(100)
字段2(帖子内容): content varChar(1000)
字段3(发布时间): time datetime
字段4(该帖子ID): ID int(4)--- ----主键
字段5(发布帖子的用户名字) : name varChar(50)---myClients表的外键,并设置为级联删除和更新,目的是当我删除myClients表中的某个用户后,该用户发布的所有帖子都全部被自动删除(设置成功)。
backNotes表(该表没有设置主键)
功能:保存用户回复某帖子的信息
字段1:(回复的内容): content varChar(1000)
字段2(被回复帖子的ID): ID int(4)----notes表的外键,并设置为级联删除,目的是当该帖子被删除时,它的所有回复也全被自动删除(设置成功)
字段3(回复帖子的用户): name varChar(50)----myClients表的外键,想设置为级联删除和更新,目的是当我删除某个用户的时候,该用户给所有帖子的所有回复都将被全部删除,但问题就在这儿-----设置失败,系统又没有给出具体的原因,而我看了很久都不知道又什么问题,请大家帮我看看是怎么回事吧?谢谢了!!
功能:保存用户的用户名和口令
字段1(用户名): name varChar(50)----------------主键
字段2(口令):password varChar(50)
notes表
功能:保存用户发布帖子的标题、内容、发布时间、用户名和帖子ID
字段1(帖子主题): subject varChar(100)
字段2(帖子内容): content varChar(1000)
字段3(发布时间): time datetime
字段4(该帖子ID): ID int(4)--- ----主键
字段5(发布帖子的用户名字) : name varChar(50)---myClients表的外键,并设置为级联删除和更新,目的是当我删除myClients表中的某个用户后,该用户发布的所有帖子都全部被自动删除(设置成功)。
backNotes表(该表没有设置主键)
功能:保存用户回复某帖子的信息
字段1:(回复的内容): content varChar(1000)
字段2(被回复帖子的ID): ID int(4)----notes表的外键,并设置为级联删除,目的是当该帖子被删除时,它的所有回复也全被自动删除(设置成功)
字段3(回复帖子的用户): name varChar(50)----myClients表的外键,想设置为级联删除和更新,目的是当我删除某个用户的时候,该用户给所有帖子的所有回复都将被全部删除,但问题就在这儿-----设置失败,系统又没有给出具体的原因,而我看了很久都不知道又什么问题,请大家帮我看看是怎么回事吧?谢谢了!!
解决方案 »
- Garnett_KG接分贴之二
- 求一数据库表设计!
- 本机上同时开SQL SERVER2000和SQL SERVER2005,那么他们的端口应该是哪个啊?或者是应该怎么查看??
- 索引的简单问题
- 一条很简单的SQL语句却有问题
- sql 2000实现row_number()over(partition by nember order by sl DESC)的方法
- SQL Server 错误 '80004005' 无法打开登录 'db_test' 中请求的数据库。登录失败。
- 小第最近遇到了一些奇怪的问题,希望大家能帮忙看一下~~~
- 数据表对比问题
- 一个小问题,不过很急!help!
- 在sqlserver2000中创建视图时,能否创建计算字段,怎样创建?
- 怎样把表结构相同不同数据的表,第一行复制
'notes' 表成功保存
'backNotes' 表
- 不能创建关系 'FK_backNotes_myClients'。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY 约束 'FK_backNotes_myClients' 引入表 'backNotes' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。请参阅前面的错误信息。
-------------------------------------------------------------------------------
请问是这个吗?谢谢!
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY 约束 'FK_backNotes_myClients' 引入表 'backNotes' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
问题在于:“字段3(回复帖子的用户): name varChar(50)----myClients表的外键”
就是这个外键导致的错误,必须删除这个外键或字段,因为这个外键的确会导致级联死循环。
请看:
删除myClients表中的Name->通过notes表中的name列外键,级联删除notes表中的同名Name记录->通过backNotes表中的帖子id列外键,级联删除backNotes表中的同名帖子id记录
这就完成了你所需要的级联逻辑了,如果再在backNotes表中加入字段3并建立myClients表的外键,SQLSERVER就通过第二条级联路径到达了backNotes表,这就导致有二条路径能够到达backNotes表,从而形成了一个环,这是SQLSERVER所不允许的,所以会出错。请楼主删除backNotes表中的字段3试试,应该能达到你想要的效果。
不知道SQLSERVER2005是怎么处理这个问题的。
请邹剑或其他朋友帮忙指教一下。