不想在数据库中的两个字段/表中保留相同的记录
本文关键字:保留 记录 字段 数据库 不想 两个 | 更新日期: 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。