MS 中外键的负值 SQL
Negative value for Foreign Key in MS SQL
我将创建一个带有批准工作流数据库的请求,但后来我又想在外列中使用负值,特别是在分配给应该分配给谁时。如果分配给特定用户,我将其设置为正值 (> 0),如果分配给组或集群,则将其设置为负值 (< 0)。
使用过这类数据库的人能否就我将要做的事情给出一些想法,如果它好与不好,为什么?
我试图通过将 assigned_to_id 设置为负值来合并 assigned_to_id 与 assigned_to_cluster_id,这将是 cluster_id 的绝对值。仅当它被分配到一个集群时
我明白你只想为 assigned_to_id
和 assigned_to_cluster_id
使用一列
因此,当它是负值时,它将指向 table A
中的一行,而当它是正值时,它将指向 table 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
我将创建一个带有批准工作流数据库的请求,但后来我又想在外列中使用负值,特别是在分配给应该分配给谁时。如果分配给特定用户,我将其设置为正值 (> 0),如果分配给组或集群,则将其设置为负值 (< 0)。
使用过这类数据库的人能否就我将要做的事情给出一些想法,如果它好与不好,为什么?
我明白你只想为 assigned_to_id
和 assigned_to_cluster_id
因此,当它是负值时,它将指向 table A
中的一行,而当它是正值时,它将指向 table 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