Descargo de responsabilidad: soy un programador, no un DBA, así que tengan paciencia conmigo ...
Tengo una vista que utilizo para mapear 2 entidades juntas. Tengo que hacer una unión entre algunas tablas diferentes para obtener eso:
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);
Lo anterior es solo por contexto, no te preocupes demasiado por eso. Lo que necesito saber es cómo hacer que los campos en mi nueva vista V_SCREENING_GROUP_SITES (SCREENING_GROUP_ID y SITE_ID) se comporten como claves foráneas para las tablas SCREENING_GROUP y SITE. ó acaso importa?
Si fuera una mesa, haría:
ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...
Pero dado que es una vista que obviamente no funciona. No pude encontrar una sintaxis ALTER VIEW que funcione para configurar FK. ¿Qué tengo que hacer?
(Esta es una base de datos MySQL)
fuente
En el sentido estricto de la palabra, no, no puede establecer claves foráneas en las vistas. Aquí es por qué:
InnoDB es el único motor de almacenamiento incorporado para MySQL que cuenta con claves foráneas. Cualquier tabla de InnoDB se registrará en information_schema.tables con engine = 'InnoDB'.
Las vistas, mientras están registradas en information_schema.tables, tienen un motor de almacenamiento NULL. No hay mecanismos en MySQL para tener claves foráneas en ninguna tabla que tenga un motor de almacenamiento indefinido.
fuente