Нужно ли представлению свои собственные ограничения внешнего ключа?


10

Отказ от ответственности: я программист, а не администратор баз данных, так что терпите меня ...

У меня есть вид, который я использую, чтобы просто сопоставить 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)

Ответы:


12

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


1
Отлично, поэтому мне не нужно ничего делать (ограничения FK уже есть в базовых таблицах). Спасибо за ответ.
Троя

1
Я думаю, что это важно. Вам не нужны FK в представлении, если в базовых таблицах есть FK.
Дерек Дауни

2
@DTest - может быть очень полезно иметь возможность применять ограничения, включая проверку, ограничения уникального ключа и внешнего ключа к представлению (особенно, если представление объединяет данные). Просто так случается, что ни одна текущая СУБД не применяет ограничения к представлениям, даже если они позволяют вам их создавать.
Джек говорит, попробуйте topanswers.xyz

@JackDouglas Совершенно верно! На самом деле я пришел сюда, чтобы выяснить, поддерживает ли MySQL такую ​​функцию.
Стейн де Витт

3

В строгом смысле этого слова нет, вы не можете устанавливать внешние ключи на представления. Вот почему:

InnoDB - единственный встроенный механизм хранения для MySQL, который показывает внешние ключи. Любая таблица InnoDB будет зарегистрирована в information_schema.tables с engine = 'InnoDB'.

Представления, хотя и зарегистрированы в information_schema.tables, имеют механизм хранения NULL. В MySQL нет механизмов, позволяющих иметь внешние ключи в любой таблице с неопределенным механизмом хранения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.