不想在数据库中的两个字段/表中保留相同的记录

本文关键字:保留 记录 字段 数据库 不想 两个 | 更新日期: 2023-09-27 18:22:27

我有以下场景

我有新闻网络应用程序我有两张桌子

1-用户(向新闻网站注册用户)

2-注释表和注释表中有以下一些字段

   Comments(Comments against any news)
   userID (which user comment on agaist this news) // it is foreign key
   NewsID
   UserName(same as userID which user comment on agaist this news) varchar // this field using for non register users

场景1:如果注册用户有评论,我会插入带有newsid和userid的评论在注释表中,UserName在这种情况下为空

场景2:如果非注册用户(或者你可以说是访客)对新闻发表评论,那么我使用UserName字段而不是userID userID在这种情况下为空

我不想用两个位置来记录用户,一个在用户表中,第二个是在Comments表的UserName字段中未注册用户scenaro您的建议

不想在数据库中的两个字段/表中保留相同的记录

您可以制造未注册的用户,并将他们放在users表中,然后用cookie链接他们,以便他们继续使用相同的信息。我认为这可能类似于StackOverflow处理匿名用户的方式。

不过,我认为你的设计没有那么大的问题。在表上设置一个约束,使两者中恰好有一个为NULL,并在检索中使用COALESCE在结果集中获得一个用户名:

SELECT COALESCE(User.UserName, Comment.UserName) AS UserName --, etc.
FROM Comment
LEFT JOIN User
    ON User.UserID = Comment.UserID

您可以将另一张表与其他表一起保存

  • 包含CCD_ 2和CCD_ 3字段的CCD_

  • users,其中包含userid字段和您想要的其他字段。

然后,您可以将comments userid列与上面的2个userid列交叉引用,以获取用户名和其他信息,这样您就不需要在comments 中使用username列了

继续使用注释表中的这两个字段。在"用户"表中创建"匿名用户",并始终填充这两个文件
对于匿名用户:
userId=用户表中单个匿名用户的Id
UserName=匿名用户名

对于注册用户,UserName字段中的值将与Users表中的值重复
当显示新闻评论时,这将带来性能优势,因为您总是(我想)需要在评论旁边显示UserName,但不需要立即显示用户的更多详细信息,因此不需要在新闻评论的查询中加入users tale。