我需要在此表上使用特殊的数据库约束吗?

时间:2008-12-14 04:52:01

标签: sql-server-2008 unique-constraint

我的数据库中有评论系统。就像stackoverflow一样 - >每个帖子都有一个评论列表。 KEWL。

匿名人士也可以添加评论或注册用户。

在我的表格中,我想要有以下内容:

  • Userid int NULLABLE
  • AnonymousNickname varchar(100)NULLABLE
  • AnonymousEmail varchar(200)NULLABLE

现在它只能是一个或另一个。你是注册的还是非注册的。

那么我应该强制执行某种类型的约束来说明一个或另一个 ..如果是这样,怎么做?

注意:数据库是Microsoft Sql Server 2008。

喝彩!

2 个答案:

答案 0 :(得分:2)

一个简单的约束是

(Userid is not null and AnonymousNickname is null and AnonymousEmail is null)
or (Userid is null and AnonymousNickname is not null and AnonymousEmail is not null)

这将仅强制设置一个或另一个。根据您的应用,听起来这是合理的。由您决定在数据库或应用程序中强制执行它。如果它是应用程序的其他部分所依赖的硬约束,那么我可能会在数据库中强制执行它并通过代码中的验证来检测它。

答案 1 :(得分:0)

我不会包含约束。您应该将匿名名称字段重命名为name。当注册用户发表评论时,将其用户名放入名称字段。当您列出评论时,这可以节省您对用户表的查找。此外,如果从用户表中删除用户,则他们的评论会比他们更长。