SQL Server2005 外键问题

kendezhu 2011-02-05 07:30:16


大家
我多选 单选 填空 判断表的外键都是PaperDetail的TitleID
可是这样在向PaperDetail表添加记录时会产生外键冲突
有什么解决办法?
...全文
1100 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
alan_219_2008 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kendezhu 的回复:]

引用 7 楼 alan_219_2008 的回复:

你现在的问题是啥?

既然叫PaperDetail
那你在插入记录的时候肯定要指明这个paper的具体题目是哪些

我的意思是你在PaperDetail表添加记录时 当然要 插入TitleID 来指明这张paper上具体有哪些题目啊 不然这外键的意义就没了

是啊 是要插入TitleID啊 但你不觉得由于我这个TitleID……
[/Quote]

还有type啊
插入TitleID的同时还要插入该TitleID的type
kendezhu 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alan_219_2008 的回复:]

既然叫PaperDetail
那你在插入记录的时候肯定要指明这个paper的具体题目是哪些

另外 我之前做的一个在线考试的话
也和你差不多 具体题目分开的 然后有一张PaperDetail的表
但是我的PaperDetail有一个题目编号和题目类型作为外键

后来发现这样做也有不好的地方,比如如果你想增加选择题选项就很麻烦,一个比较好的解决办法就是将ABCD合成一个字段 而在这个……
[/Quote]
本人能力有限,你给的第一个建议我不是很明白,具体到我的数据库就是将PaperDetail的type和titleid共同作为外键,这样的话怎么对应那些题目表的主键呢?
对于你的第二个建议(就是将所有题目表合成一张表),我问的很多人都给予我了同样的建议,但也没有告诉我具体怎么做。
尽管如此,还是非常感谢你。
kendezhu 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 alan_219_2008 的回复:]

你现在的问题是啥?

既然叫PaperDetail
那你在插入记录的时候肯定要指明这个paper的具体题目是哪些

我的意思是你在PaperDetail表添加记录时 当然要 插入TitleID 来指明这张paper上具体有哪些题目啊 不然这外键的意义就没了
[/Quote]
是啊 是要插入TitleID啊 但你不觉得由于我这个TitleID外键对应多个ID主键而导致可能出现TitleID的值不唯一的情况吗?具体到这个项目就是不能确定这个TitleID是单选题的ID还是多选题的ID。
我现在的问题就是当向PaperDetail插入记录时会出现外键约束的问题。
SK_Aqi 2011-02-11
  • 打赏
  • 举报
回复
应该来说会像楼上所说,抽象成一个表
alan_219_2008 2011-02-11
  • 打赏
  • 举报
回复
你现在的问题是啥?

既然叫PaperDetail
那你在插入记录的时候肯定要指明这个paper的具体题目是哪些

我的意思是你在PaperDetail表添加记录时 当然要 插入TitleID 来指明这张paper上具体有哪些题目啊 不然这外键的意义就没了
alan_219_2008 2011-02-10
  • 打赏
  • 举报
回复
既然叫PaperDetail
那你在插入记录的时候肯定要指明这个paper的具体题目是哪些

另外 我之前做的一个在线考试的话
也和你差不多 具体题目分开的 然后有一张PaperDetail的表
但是我的PaperDetail有一个题目编号和题目类型作为外键

后来发现这样做也有不好的地方,比如如果你想增加选择题选项就很麻烦,一个比较好的解决办法就是将ABCD合成一个字段 而在这个字段里想办法区别出ABCD或者更多 而如果这样做的话 你可以把所有题目类型抽象出一个提目表 这样各种题目的字段就一致了
kendezhu 2011-02-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kendezhu 的回复:]

引用 1 楼 wuyq11 的回复:

插入表要按主表从表顺序
有外健引用主健是不能为空的

嗯 此处还有一个问题就是 是否拥有相同外键的那些主键除了一个都不能为空以外 难道拥有这些主键的表的记录数也必须相同吗? 我虽然使这些主键不为空了 但我发现当这些主键所在的表如果记录数不同的话 还是会出现外键冲突的问题
[/Quote]

错了 应该是外键所在的表记录数<=那几个主键所在的表的最小记录数? 这样也太不灵活了吧
kendezhu 2011-02-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]

插入表要按主表从表顺序
有外健引用主健是不能为空的
[/Quote]
嗯 此处还有一个问题就是 是否拥有相同外键的那些主键除了一个都不能为空以外 难道拥有这些主键的表的记录数也必须相同吗? 我虽然使这些主键不为空了 但我发现当这些主键所在的表如果记录数不同的话 还是会出现外键冲突的问题
bourbon1795 2011-02-05
  • 打赏
  • 举报
回复
PaperDetail的TitleID
不能为空,且唯一
wuyq11 2011-02-05
  • 打赏
  • 举报
回复
插入表要按主表从表顺序
有外健引用主健是不能为空的

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧