2011-06-13 89 views
0

我目前在SQL Server数据库中有两个连接表,其中一个包含新闻项目(newsTab)和一个表格(usrCom),它为每篇文章捕获多个用户评论。SQL是需要链接/桥接表吗?

我想添加另一个信息表(infoTab),它也允许用户评论,但我希望使用现有的评论表(usrCom)来存储这些信息。

我该如何去创建一个生成唯一ID的链接/桥接表,以便知道哪些表(newsTab/infoTab)注释属于哪个表。

NB:我编辑的消息,希望使它更清楚一点

第一个表(newsTab)

NewsId NewsContent 
--------------------- 
1   blah blah 
2   and so on 

第二个表(infoTab)

infoId InfoContent  
--------------------- 
1   some info 
2   more stuff 

评论表(与当前一样)

commentId linksTo Comment 
------------------------------ 
1   1   user input 
2   1   random rant 

'linksTo'是第一个表中项目的foriegn键,所以我不能只添加一个类型列,并且如果在具有相同ID的新表中不存在一行,则会在外键列上发生冲突。因此,需要基于正在评论的表和Id来生成新的外键。

+0

这是一个棘手的一个 - 我们有做类似的数据库,并且构建外键的时候,我们使用了'NOCHECK'选项。使其与巧克力茶壶一样有用,但确实表明餐桌之间存在关系。 – 2011-06-13 13:44:09

+0

忘了说我不会为那些已经存在的评论感到困扰,所以可以重新开始,但我有一个中央评论表 – Spufferoo 2011-06-13 13:56:18

+1

看起来像唯一的方法是合并新闻和信息表,并添加一个类型列到那张桌子。这样你就可以得到唯一的ID,你可以使用外键。 – 2011-06-13 14:20:33

回答

1

为什么不只是一个“类型”列到usrCom

+0

我将如何确保表中没有重复的id,因为我将链接到id,当存储在comments表中时可能是重复的,我需要基于哪个表和id创建唯一的外键到,“类型”必须是关键的一部分 - 这就是为什么我认为我需要一个桥表? – Spufferoo 2011-06-13 13:12:27

0

如果您自动生成commentId(设置主键),那么您将无法获得在usrCom表中的任何重复。另外,如果您希望为新闻和信息表保留一张表,您应该添加一个新列以区分哪些表是哪些表(称为它的类型)。然后在你的查询中,确保你指定了类型来过滤你的结果。

要查看所有评论为newsTab:

 select * from usrCom 
     where type='newsTab' 
+0

我只想拉取newsTab中每行特有的注释,而不是一次性注释 - 因此需要链接到基于新闻或信息表中的记录的ID(如果适合) The重复项可能位于外键而​​不是主键上 – Spufferoo 2011-06-13 15:07:30