Отказ от ответственности: я программист, а не администратор баз данных, так что терпите меня ...
У меня есть вид, который я использую, чтобы просто сопоставить 2 объекта вместе. Я должен сделать соединение между несколькими различными таблицами, чтобы получить это:
CREATE OR REPLACE VIEW V_SCREENING_GROUP_SITES AS (
SELECT SG.SCREENING_GROUP_ID, V.SITE_ID
FROM SCREENING_GROUP SG, VISIT V, VISIT_DATE VD
WHERE VD.VISIT_ID = V.VISIT_ID
AND V.SCREENING_GROUP_ID = SG.SCREENING_GROUP_ID);
Выше только для контекста, не беспокойтесь об этом. Мне нужно знать, как заставить поля в моем новом представлении V_SCREENING_GROUP_SITES (SCREENING_GROUP_ID и SITE_ID) вести себя как внешние ключи для таблиц SCREENING_GROUP и SITE. Или это вообще имеет значение?
Если бы это был стол, я бы сделал:
ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...
Но так как это мнение, очевидно, не работает. Я не смог найти синтаксис ALTER VIEW, который работает для настройки FK. Что мне делать?
(Это база данных MySQL)
источник
В строгом смысле этого слова нет, вы не можете устанавливать внешние ключи на представления. Вот почему:
InnoDB - единственный встроенный механизм хранения для MySQL, который показывает внешние ключи. Любая таблица InnoDB будет зарегистрирована в information_schema.tables с engine = 'InnoDB'.
Представления, хотя и зарегистрированы в information_schema.tables, имеют механизм хранения NULL. В MySQL нет механизмов, позволяющих иметь внешние ключи в любой таблице с неопределенным механизмом хранения.
источник