2010-01-19 25 views
34

Intenté crear una clave externa en una de mis tablas, haciendo referencia a una columna de una tabla en un esquema diferente.Referencia de clave externa a la tabla en otro esquema

Algo así:

ALTER TABLE my_schema.my_table ADD (
    CONSTRAINT my_fk 
    FOREIGN KEY (my_id) 
    REFERENCES other_schema.other_table(other_id) 
) 

Como tenía las subvenciones necesarias, esto funcionó bien.

Ahora me pregunto si hay razones para no hacer referencia a las tablas en un esquema diferente, o algo por lo que tener cuidado?

Respuesta

32

No hay problema al hacer esto. Los esquemas no tienen ningún impacto cuando se establecen relaciones de claves foráneas entre tablas. Solo asegúrese de que las personas adecuadas tengan los permisos necesarios para los esquemas que tiene la intención de usar.

0

Una razón por la que esto puede causar problemas es que debe tener cuidado de eliminar las cosas en el orden correcto. Esto puede ser bueno o malo dependiendo de lo importante que es nunca tener huérfanos en sus tablas.

+1

Bueno, pero esto es lo mismo al hacer referencia a una tabla en mi esquema. ¿Derecha? –

+0

Sí, es lo mismo. Sin embargo, es algo de lo que hay que tener cuidado –

4

Esto funcionará exactamente como una clave externa que hace referencia a una tabla en su propio esquema.

Al igual que con las claves externas normales, no olvide indexar my_id si la clave principal se actualiza o si elimina entradas de la tabla primaria (las claves externas no indexadas pueden ser una fuente de controversia masiva y el índice suele ser útil de todas formas).

4

Lo único que encontré fue asegurarme de que el permiso existía en el otro esquema. Lo habitual: si esos permisos desaparecen por algún motivo, lo sabrá.

2

Si se encuentra en una organización donde diferentes personas tienen autoridad sobre diferentes esquemas, creo que es una buena práctica dar al otro esquema la capacidad de desactivar, o incluso soltar y recrear, su restricción.

Por ejemplo, podrían tener que soltar o truncar su tabla y volver a cargarla para solucionar algún problema de soporte (muy raro). A menos que quiera que lo llamen en mitad de la noche, le recomiendo darles la posibilidad de eliminar temporalmente su restricción. (También recomiendo configurar sus propias alertas para que sepa si alguna de sus restricciones externas se desactivan o se descartan). Cuando cruza líneas de organización/esquema, quiere jugar bien con los demás. El índice que Vincent mencionó es otra parte de eso.

Cuestiones relacionadas