Uma visão precisa de suas próprias restrições de chave estrangeira?

10

Disclaimer: Eu sou um programador, não um DBA, então tenha paciência comigo ...

Eu tenho uma visão que eu uso para mapear apenas 2 entidades juntas. Eu tenho que fazer uma junção entre algumas tabelas diferentes para conseguir isso:

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);

Acima é apenas para contexto, não se preocupe muito com isso. O que eu preciso saber é como fazer com que os campos na minha nova exibição V_SCREENING_GROUP_SITES (SCREENING_GROUP_ID e SITE_ID) se comportem como chaves estrangeiras nas tabelas SCREENING_GROUP e SITE. Ou isso importa?

Se fosse uma mesa eu faria:

ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...

Mas já que é uma visão que obviamente não funciona. Não consegui encontrar uma sintaxe ALTER VIEW que funcione para definir FKs. O que devo fazer?

(Este é um banco de dados MySQL)

Troy
fonte

Respostas:

12

Uma Visualização é uma tabela lógica baseada em uma ou mais tabelas físicas. Se houver relacionamentos de chave estrangeira nas tabelas subjacentes, eles serão manifestados na exibição. As visualizações são totalmente dependentes das tabelas das quais são derivadas; portanto, tentar adicionar chaves estrangeiras a elas não é possível.

gview
fonte
11
Ótimo, então não preciso fazer nada (restrições de FK já existentes nas tabelas subjacentes). Obrigado pela resposta.
Troy
11
Eu acho que esse é o ponto a se fazer. Você não precisa de FKs na exibição, desde que as tabelas subjacentes tenham os FKs.
Derek Downey
2
@DTest - Pode ser muito útil poder aplicar restrições, incluindo verificação, restrições de chave única e estrangeira a uma exibição (especialmente se a exibição agrega dados). Acontece que nenhum RDBMS atual impõe restrições nas visualizações, mesmo que elas permitam que você as crie.
Jack diz que tente topanswers.xyz 12/09
@JackDouglas Exatamente certo! Na verdade, eu vim aqui tentando descobrir se o MySQL suporta esse recurso.
Stijn de Witt
3

No sentido estrito da palavra, não, você não pode definir chaves estrangeiras nas visualizações. Aqui está o porquê:

O InnoDB é o único mecanismo de armazenamento interno para MySQL que possui chaves estrangeiras. Qualquer tabela do InnoDB será registrada em information_schema.tables com engine = 'InnoDB'.

As visualizações, enquanto registradas em information_schema.tables, possuem um mecanismo de armazenamento NULL. Não há mecanismos no MySQL para ter chaves estrangeiras em qualquer tabela que tenha um mecanismo de armazenamento indefinido.

RolandoMySQLDBA
fonte