Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 此表上是否需要特殊的数据库约束?_Sql Server 2008_Unique Constraint - Fatal编程技术网

Sql server 2008 此表上是否需要特殊的数据库约束?

Sql server 2008 此表上是否需要特殊的数据库约束?,sql-server-2008,unique-constraint,Sql Server 2008,Unique Constraint,我的数据库里有一个评论系统。就像stackoverflow->每个帖子都有一个评论列表。基尔 匿名用户也可以添加评论或注册用户 在我的表格中,我正在考虑以下内容: Userid int可为空 匿名昵称varchar(100)可为空 匿名邮件varchar(200)可为空 现在它只能是其中之一。你不是已经注册就是没有注册 那么,我应该强制执行某种类型的约束,即一种约束还是另一种约束。。如果是,怎么做 注意:数据库是Microsoft Sql Server 2008 干杯 一个简单的约束是 (U

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

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

在我的表格中,我正在考虑以下内容:

  • Userid int可为空
  • 匿名昵称varchar(100)可为空
  • 匿名邮件varchar(200)可为空
现在它只能是其中之一。你不是已经注册就是没有注册

那么,我应该强制执行某种类型的约束,即一种约束还是另一种约束。。如果是,怎么做

注意:数据库是Microsoft Sql Server 2008


干杯

一个简单的约束是

(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)

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

我不会包含该约束。您应该将匿名名称字段重命名为name。当注册用户留下评论时,请将其用户名输入“名称”字段。当您列出注释时,这将为您保存对用户表的查找。此外,如果用户从用户表中删除,他们的评论会比他们的寿命长。

我肯定会在应用程序中检查这一点,但我喜欢总是有非常紧凑的代码和紧凑的数据库,所以我不确定这是否也可以在数据库中完成。如果是这样,怎么做?tvanfosson的答案是如何在db中执行-在表上创建约束并使用他的代码…哦。。很抱歉我还以为那是些伪密码。很抱歉我以前从未做过限制/你的方法会使数据库非规范化。如果一个用户被删除,他们将有大量的子记录,因此不能直接删除,而只是被标记为不活动。@rmeador:my schema或joemucchiello's会反规范化吗?此外,我不明白你想说什么,当(如果)一个用户被删除??