2008-12-14 12 views
1

我有一个评论系统在我们的数据库。就像stackoverflow - >每个帖子都有一个评论列表。 KEWL。我需要在此表上使用特殊的数据库约束吗?

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

在我的表,我想有以下几点:

  • 用户ID INT NULLABLE
  • AnonymousNickname VARCHAR(100)NULLABLE
  • AnonymousEmail VARCHAR(200)NULLABLE

现在它只能是一个或另一个。你要么注册要么你没有注册。

因此,我应该强制执行一些类型的约束,说其中一个或另一个 ..如果是这样,如何?

注:数据库为Microsoft SQL Server 2008

喝彩!

回答

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) 

这将迫使只有一个或要设置的其他。听起来这是基于你的应用程序的合理性。您决定在数据库中还是在您的应用程序中执行它取决于您。如果你的应用程序的其他部分依赖于一个硬约束,那么我可能会在数据库中强制执行它,并通过代码中的验证来检测它。

+0

我肯定会在应用程序中检查这个,但我喜欢总是有非常紧密的代码_and_一个紧的Db,所以我不确定这是否也可以在数据库中完成。如果是这样,怎么样? – 2008-12-14 05:19:50

+0

tvanfosson的回答是你如何在数据库中做到这一点 - 在表上创建一个约束,并使用他的代码... – RedFilter 2008-12-14 05:34:58

0

我不会包含这个约束。您应该重命名匿名姓名字段。当注册用户留下评论时,请将他们的用户名放入姓名字段中。当你列出你的评论时,这可以节省你对用户表的查询。另外,如果用户从用户表中删除,他们的评论就会超过他们。

相关问题