¿Es mala idea crear claves externas en las tablas en diferentes esquemas en la misma base de datos para grandes aplicaciones?


13

Estoy trabajando en la transferencia de una gran aplicación basada en web pl / sql al servidor dedicado. Esta aplicación se encuentra en un esquema con 70 paquetes de código de programa. Esta aplicación se realizó aproximadamente a unas 15 personas en diferentes momentos. Y era una práctica normal para nosotros crear claves foráneas en las tablas de referencia en diferentes esquemas porque es realmente conveniente y mantiene la base de datos muy limpia, porque no necesitamos mantener las mismas tablas de referencia en diferentes esquemas.

Pero de todos modos mi DBA (que creó una nueva instancia con DB y copió mi aplicación dentro de la zona de Solaris) dijo muy duro hoy, "¡Las claves foráneas en los diferentes esquemas son malas y necesitas destruirlas!". No explicó su punto de vista.

¿Es realmente una mala idea hacer eso con grandes aplicaciones?


13
Su DBA debe ser despedido.
Colin 't Hart

1
Todos vamos a gritar que su DBA es un imbécil si eso es todo lo que dijeron, pero ¿está seguro de que no hubo otro contexto para el argumento de su DBA?
Kermit

1
tal vez el DBA solo está haciendo lo mejor que puede para apoyar el ridículo trabajo que hicieron los desarrolladores al construir esto.
swasheck

2
@swasheck Por otro lado, hace que quiere tener su trabajo después de la base de datos se ha acumulado varios años de inconsistencias en virtud de este DBA?
Twinkles

@Twinkles no es nada
swasheck

Respuestas:


6

Tenga paciencia conmigo: vengo de SQL Server y odio Oracle, pero creo que la argumentación sigue en pie.

Los esquemas son buenos para aislar tablas de subsistemas lógicos. Las claves foráneas garantizan la integridad de los datos. Estos son conceptos ortogonales, ya que obviamente la integridad de los datos entre subsistemas también es imprescindible. Contabilidad y envío y posiblemente Datos centrales de CUstomer no viven en silos donde un cliente puede ser eliminado mientras se usa en contabilidad.

Como tal, creo que el requisito del DBA es una señal de incompetencia. Por favor, cualquiera puede intervenir y proporcionar un contraargumento; estaría feliz. Pero así es como lo hago en SQL Server (aunque, una vez más, nuestra definición de esquema es IIRC un POCO diferente de la definición de Oracle).


4

Si bien exigir la destrucción de restricciones de claves externas sin un razonamiento detallado es una tontería, tiene sentido mantener las referencias externas bajo control. ¿Qué sucede si los esquemas a los que hace referencia se nombran de manera diferente en su nuevo servidor?

En Oracle, resuelve este problema creando SYNONYMS para objetos que están fuera del esquema actual.


1
Puede usar sinónimos en exceso y enturbiar aún más la cuestión de "¿a qué se refiere esto?". Consulte aquí para obtener más detalles sobre seguridad, rendimiento y mejores prácticas stackoverflow.com/a/10042117/851930
kevinsky

3
Los sinónimos no se pueden usar como objetivo de restricciones de clave externa.
Colin 't Hart

Puntos válidos Y más pruebas de que hacer declaraciones sin dar a otros la oportunidad de discutir los méritos y los peligros es malo.
Twinkles

2

Si tiene la necesidad (espacio / seguridad / lo que sea) de mover cualquier esquema a una base de datos diferente, ya no podrá manejar las referencias. Esa es probablemente la razón principal para solicitar matar las referencias.


0

La única "mala idea" que puedo imaginar al hacer esto es que no se puede otorgar el privilegio de objeto REFERENCES (el necesario para crear una restricción que se refiera a una tabla) a un rol. Tengo que hacer esquema / usuario por esquema / usuario.

Además de eso, no veo el punto de su DBA.


0

Solo piense en esto: el esquema del propietario de la tabla secundaria comienza a crear registros en su tabla y, sin saberlo, evita que el usuario del esquema de la tabla primaria elimine registros de la tabla primaria. ¿Es algo que anticipa y aprecia?

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.