У меня возникла проблема при создании/разработке таблиц в DB2.дизайн таблицы с проверочным столбцом или столбцом со ссылкой на первичный ключ, который обновляется
У меня есть две таблицы, таблицы users
и таблицы countries
созданы, как показано ниже
create table users
(
firstname varchar(20) not null,
lastname varchar(20) not null,
gender char(1) not null check (gender in ('M','F')),
birthdate date not null,
country char(3) not null,
)
create table testing.countries
(
name varchar(60) not null,
code2 char(2) not null,
code3 char(3) not null
)
Я хочу, чтобы в колонке country
в таблице users
с 3-обугленного код страны происхождения и во время введения данные, которые необходимо проверить, если они действительны (или, лучше сказать, если они существуют) из списка стран, которые хранятся в таблице countries
.
Поскольку DB2 не поддерживает подзапросы/подвыбор в опции проверки (что было бы лучше для меня), то это выглядит как кандидат на внешний ключ на колонке country
в users
ссылающегося на первичный ключ на колонке code3
в countries
. Но в случае обновления 3-символьного кода любой страны, это будет невозможно обновить его простым способом. Я знаю, что обновление этого будет не так часто и может быть сделано вручную, сначала вставив новые данные в countries
, а затем обновив значения в users
, а затем удалив старые значения в countries
, но, к сожалению, будет больше похожих таблиц, где будут должны быть проверены при вставке в другую таблицу, а данные в таблице ссылок будут обновляться довольно часто, а затем обновление вручную неудобно. И, конечно же, я хочу, чтобы данные в users
были обновлены, если будет выполнено обновление в countries
.
Что я хочу спросить, как это решить. Я думал о некоторых before
или instead of
триггера, но до этого не может быть использована для изменения данных в других таблицах и ВМЕСТО ожидает Нетипизированные VIEW не СТОЛ
SQL0159N The statement references an object that identifies an unexpected
object type. Object: "COUNTRIES". Object type: "TABLE". Expected object type:
"UNTYPED VIEW". LINE NUMBER=2. SQLSTATE=42809`
Можете ли вы мне посоветуете?
Заранее спасибо
Это * звучит *, как вы хотите ограничение внешнего ключа, а не триггер. –
Да, внешний ключ является одним из вариантов, но как сделать столбец 'code3' в таблице' countries' обновляемым, когда он будет ссылаться? – srbik
У вас есть контроль над процессом, который обновляет данные? Обеспечивает ли целостность там, а не ограничениями базы данных, возможность? –