Я хочу создать первичный ключ на основе unqid + isremoved, в котором isremoved должно быть истинным
Что касается значений, то первичный ключ гарантирует, что они уникальны. Когда первичный ключ является составным, состоящим из нескольких столбцов, это означает, что ключ представляет собой любую уникальную комбинацию всех задействованных столбцов. Это означает, что если первичный ключ - и unqid
, и isremoved
- в вашей таблице будут следующие строки:
UNQID | ISREMOVED
---------------------------------------------------------------
6F9619FF-8B86-D011-B42D-00C04FC964FF | 1
6F9619FF-8B86-D011-B42D-00C04FC964FF | 0
Ваш первичный ключ должен не включать столбец isremoved
.
... когда я пытаюсь установить значение поля isremoved
равным true / 1 в таблице tblcountry, я получаю сообщение об ошибке, если использую его в ссылочной таблице tblstate, если его поле 'isremoved
не является правда. и если tabstate isremoved имеет значение true для этого первичного ключа, то его не должно выдавать ошибку.
Для этого вам потребуется ссылка на внешний ключ, связывающая столбцы unqid
и isremoved
в столбцах tblcountry
с столбцами unqid
и isremoved
в таблице tblstate
.
ALTER TABLE tblcountry
ADD CONSTRAINT tstate_fk FOREIGN KEY (unqid, isremoved) references tblstate (unqid, isremoved)
У Джошуа была правильная идея, неправильное направление.
Но это означает, что для вставки записи в tblcountry
вы должны иметь значение unqid
уже в tblstate
. Столбец с ограничением внешнего ключа может иметь значение NULL - значение NULL не будет отменять ограничение внешнего ключа - но вы не можете указать часть внешнего ключа. Либо вы удовлетворяете внешний ключ, либо нет.
Мне неясно, что вы надеялись смоделировать - если бы у меня была лучшая идея, я бы предоставил альтернативы.