Если я правильно понимаю, вы хотите убедиться, что никакая комбинация id_user
, mail_address
не будет вставлена в новую таблицу EMAILS
, которая не существует в ранее существующей таблице USERS
?
Это имеет смысл, только если это промежуточный дизайн, потому что вы не сможете поместить более одной записи EMAIL
для любой данной записи USERS
. (Я предполагаю, что строки в EMAILS
должны быть уникальными.)
Но, если это эскамаж (+1 за это - обожаю!), Я думаю, вы говорите о ограничении внешнего ключа :
alter table users add constraint users_id_email_u1
UNIQUE (id_user, email);
alter table emails add constraint user_id_email_f1
FOREIGN KEY ( id_user, mail_address) REFERENCES users ( id_user, email);
Это гарантирует, что никогда не будет EMAILS
строк, которые не соответствуют тому, что есть в USERS
.
Однако , это не обеспечит обратное! То есть может быть USERS
строк, в которых нет нужной строки в EMAILS
. Я не думаю, что вы спрашивали об этом случае в своем посте, но я думаю, что это может оказаться важным для вас. Итак, я бы предположил, что вы действительно хотите сделать:
CREATE OR REPLACE VIEW emails AS
SELECT id_user, email mail_address
FROM users;
... и, возможно, это для обработки вставок в EMAILS
«таблицу» ...
CREATE OR REPLACE TRIGGER emails_trg
INSTEAD OF INSERT
ON emails
FOR EACH ROW
BEGIN
UPDATE users
SET email = :new.mail_address
WHERE id_user = :new.id_user;
END;
Затем, как только все ваши запросы будут обновлены до использования EMAILS
, замените представление реальной таблицей.