Отрицательное значение для внешнего ключа в MS SQL - PullRequest
0 голосов
/ 11 февраля 2019

Я буду создавать запрос с базой данных рабочих процессов утверждения, но потом у меня возникнет мысль о том, чтобы иметь отрицательное значение во внешнем столбце, в частности, при назначении, кому он должен быть назначен.Я собираюсь установить его как положительное значение (> 0), если оно назначено конкретному пользователю, или сделать его отрицательным (<0), если оно было назначено группе или кластеру. </p>

Может кто-то, кто работалс такими базами данных, дайте некоторые мысли о том, что я собираюсь делать, если это нормально или нет и почему?как отрицательный, который будет абсолютным значением cluster_id.Только если он назначен кластеру

1 Ответ

0 голосов
/ 11 февраля 2019

Я понял, что вы хотите использовать только один столбец для assigned_to_id и assigned_to_cluster_id

Так что, когда оно имеет отрицательное значение, оно будет указывать на строку в table A, а при положительном -указать на строку в table B

Если это так, не делайте этого.
Это невозможно в реляционной базе данных, если это то, что вам нужно, вы не можете пометить ее как внешний ключи вам придется заново изобретать колесо и выполнять всю работу, которую база данных делает для вас сейчас

Это будет означать снятие ограничений внешнего ключа и, следовательно, потерю реляционной целостности

И много дополнительного кодирования, которое вам предстоит сделать

Чего вы все равно пытаетесь достичь, делая это?

Сохраняйте оба столбца, сохраняйте их как поля внешнего ключа, просто пишите регистр вВы выбираете заявления, если это проблема

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
...