我有以下情景
我有新闻网络应用程序 我有两张桌子
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 在comments表中,UserName在这种情况下为null
场景2: 如果非注册用户(或者你可以说客人)对新闻发表评论,那么我使用的是UserName,而不是userID,UserID在这种情况下为空
我不想保留两个地方的用户记录,一个在用户表中,第二个用于 注释表的UserName字段中的非注册用户scenaro 你的建议
答案 0 :(得分:1)
您可以制作未注册的用户并将其放在“用户”表中,并将其与Cookie相关联,以便他们继续使用相同的信息。我认为这可能类似于StackOverflow处理匿名用户的方式。
我不认为你的设计存在很大问题。在表上加上一个约束,使两者中只有一个为NULL,并在检索中使用COALESCE在结果集中获取单个用户名:
SELECT COALESCE(User.UserName, Comment.UserName) AS UserName --, etc.
FROM Comment
LEFT JOIN User
ON User.UserID = Comment.UserID
答案 1 :(得分:0)
您可以将另一张桌子与其他桌子放在一起
guests
包含username
和userid
字段
users
,其中包含userid
字段和其他字段。
然后,您可以使用上面的2个用户ID列交叉引用您的comments
用户ID列,以获取用户名和其他信息,这样您就无需username
列{ {1}}
答案 2 :(得分:0)
留在评论表中的这两个字段。在“用户”表中创建匿名用户并始终填充这两个文件
对于匿名用户:
userId =用户表中该单个匿名用户的Id
UserName =匿名用户名
对于注册用户,在UserName字段中将是来自Users表的重复值
这会在显示新闻评论时带来性能优势,因为您总是(我猜)需要在评论旁边显示UserName,但不需要立即更多用户的详细信息,因此无需在查询中加入用户故事评价。