Чи потрібні представлення власних закордонних ключових обмежень?


10

Відмова: Я програміст, а не DBA, тож майте мене ...

У мене є погляд, який я використовую, щоб просто скласти разом два об'єкти. Я повинен зробити з'єднання між декількома різними таблицями, щоб отримати це:

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
Чудово, тому мені не потрібно нічого робити тоді (обмеження ФК вже є в нижчих таблицях). Дякую за відповідь.
Троя

1
Я думаю, що це сенс зробити. Вам не знадобляться FK-файли для перегляду до тих пір, поки в нижчих таблицях є FK.
Дерек Дауні

2
@DTest - Це може бути дуже корисно застосовувати обмеження, включаючи перевірку, унікальні та зовнішні ключові обмеження для подання (особливо якщо представлення агрегує дані). Просто буває так, що жодні поточні RDBMS не обмежують уявлення, навіть якщо вони дозволяють створювати їх.
Джек каже, спробуйте topanswers.xyz

@JackDouglas Точно так! Насправді я прийшов сюди, намагаючись з’ясувати, чи підтримує MySQL таку функцію.
Штійн де Вітт

3

У строгому розумінні цього слова, ні, ви не можете встановити сторонні клавіші на видах. Ось чому:

InnoDB - єдиний вбудований механізм зберігання даних для MySQL, у якому є іноземні ключі. Будь-яка таблиця InnoDB буде зареєстрована в information_schema.tables з двигуном = 'InnoDB'.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.