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?
fuente
Respuestas:
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).
fuente
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.
fuente
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.
fuente
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.
fuente
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?
fuente