Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 MS SQL中外键的负值_Sql Server_Relational Database - Fatal编程技术网

Sql server MS SQL中外键的负值

Sql server MS SQL中外键的负值,sql-server,relational-database,Sql Server,Relational Database,我将创建一个带有批准工作流数据库的请求,但我再次考虑在外部列中使用负值,这是在指定应将其分配给谁时特别考虑的。如果分配给特定用户,我将把它设置为正值(>0),如果分配给组或集群,则将它设置为负值(

我将创建一个带有批准工作流数据库的请求,但我再次考虑在外部列中使用负值,这是在指定应将其分配给谁时特别考虑的。如果分配给特定用户,我将把它设置为正值(>0),如果分配给组或集群,则将它设置为负值(<0)

有人谁与这些数据库的工作提供了一些想法,我将要做什么,如果它是好或不好,为什么


我正在尝试将assigned_to_id与assigned_to_cluster_id合并,方法是将其设置为负值,这将是cluster_id的绝对值。只有当它被分配到一个群集时,我才知道您只想使用一列来表示
assigned_to_id
assigned_to_cluster_id

因此,当它是负值时,它将指向
表a
中的一行,当它是正值时,它将指向
表B
中的一行

如果是这样,就不要这样做。
这在关系数据库中是不可能的,如果这是您想要的,那么您不能将其标记为外键,您必须重新发明轮子,自己完成数据库现在为您所做的所有工作

这意味着删除外键约束,从而删除关系完整性

还有很多额外的编码需要你来完成

通过这样做,你到底想达到什么目的

保留这两列,将它们保留为外键字段,如果有问题,只需在select语句中编写一个大小写即可

select rw.ID,
       ...,
       case when rw.assigned_to_id is not null then a.name
            when rw.assigned_to_cluster_id is not null then b.name
            else 'not assigned'
       end as assigned_to
from   request_workflow rw
  left outer join tableA a on rw.assigned_to_id = a.id
  left outer join tableB b on rw.assigned_to_cluster_id = b.id

你能不能提供更多关于结构的信息,数据是什么,它将被使用?因为你在描述上有困难,我添加了一个图像。谢谢如果您为每个表显示一些示例数据,我们可能会更清楚您的意思您不能只在FK字段中输入任何值,您输入的值(负数或负数)必须存在于引用的表中。当然可以。这就是为什么它被称为FK(外键)的原因。它意味着我正在引用描述中提到的用户/集群表,并且由于我提到了“负数”,所以数据类型是整数。感谢您提醒我关联表的规则。我刚刚创建了另一个表,其中包含所有分配的用户。因此,当分配集群时,我将把所有成员放在该表中,并引用主表。谢谢