Oświadczenie: Jestem programistą, a nie DBA, więc proszę o cierpliwość ...
Mam widok, którego używam do mapowania 2 jednostek razem. Muszę wykonać połączenie między kilkoma różnymi tabelami, aby to uzyskać:
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);
Powyżej jest tylko dla kontekstu, nie przejmuj się tym zbytnio. Muszę wiedzieć, jak sprawić, aby pola w moim nowym widoku V_SCREENING_GROUP_SITES (SCREENING_GROUP_ID i SITE_ID) zachowywały się jak klucze obce do tabel SCREENING_GROUP i SITE. Czy to w ogóle ma znaczenie?
Gdyby to był stół, zrobiłbym:
ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...
Ale ponieważ jest to pogląd, który oczywiście nie działa. Nie mogłem znaleźć składni ALTER VIEW, która działa w celu ustawienia FK. Co powinienem zrobić?
(To jest baza danych MySQL)
źródło
W ścisłym tego słowa znaczeniu nie można ustawić obcych kluczy w widokach. Oto dlaczego:
InnoDB jest jedynym wbudowanym silnikiem pamięci dla MySQL, który zawiera klucze obce. Każda tabela InnoDB zostanie zarejestrowana w information_schema.tables z silnikiem = „InnoDB”.
Widoki, zarejestrowane w information_schema.tables, mają silnik pamięci NULL. W MySQL nie ma mechanizmów, aby mieć klucze obce w dowolnej tabeli, która ma niezdefiniowany silnik pamięci.
źródło