Sql server MS SQL中外键的负值
我将创建一个带有批准工作流数据库的请求,但我再次考虑在外部列中使用负值,这是在指定应将其分配给谁时特别考虑的。如果分配给特定用户,我将把它设置为正值(>0),如果分配给组或集群,则将它设置为负值(<0) 有人谁与这些数据库的工作提供了一些想法,我将要做什么,如果它是好或不好,为什么Sql server MS SQL中外键的负值,sql-server,relational-database,Sql Server,Relational Database,我将创建一个带有批准工作流数据库的请求,但我再次考虑在外部列中使用负值,这是在指定应将其分配给谁时特别考虑的。如果分配给特定用户,我将把它设置为正值(>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(外键)的原因。它意味着我正在引用描述中提到的用户/集群表,并且由于我提到了“负数”,所以数据类型是整数。感谢您提醒我关联表的规则。我刚刚创建了另一个表,其中包含所有分配的用户。因此,当分配集群时,我将把所有成员放在该表中,并引用主表。谢谢