Est-ce une mauvaise idée de créer des clés étrangères sur les tables dans des schémas différents dans la même base de données pour les grandes applications?


13

Je travaille sur le transfert d'une grosse application web pl / sql vers le serveur dédié. Cette application est située dans un schéma avec 70 packages de code de programme. Cette demande a été déposée auprès d'environ 15 personnes à différentes époques. Et c'était une pratique normale pour nous de créer des clés étrangères sur les tables de référence dans différents schémas car elle est vraiment pratique et maintient la base de données très propre, car nous n'avons pas besoin de conserver les mêmes tables de référence dans des schémas différents.

Mais quoi qu'il en soit, mon DBA (qui a créé une nouvelle instance avec DB et copié mon application à l'intérieur de la zone Solaris) a dit très dur aujourd'hui: "Les clés étrangères sur les différents schémas sont mauvaises et vous devez les détruire!". Il n'a pas expliqué son point de vue.

Est-ce vraiment une mauvaise idée de faire ça avec une grosse application?


13
Votre DBA devrait être renvoyé.
Colin 't Hart

1
Nous allons tous crier que votre DBA est un crétin si c'est tout ce qu'ils ont dit, mais êtes-vous sûr qu'il n'y avait pas d'autre contexte dans l'argument de votre DBA?
Kermit

1
peut-être que le DBA fait juste de son mieux pour soutenir le travail ridicule que les développeurs ont fait en construisant cette chose.
swasheck

2
@swasheck D'un autre côté, voulez- vous avoir son travail après que la base de données ait accumulé plusieurs années d'incohérences sous ce DBA?
Twinkles

@Twinkles pas du tout
swasheck

Réponses:


6

Restez avec moi - je viens de SQL Server et je déteste Oracle, mais je pense que l'argumentation est toujours valable.

Les schémas sont pratiques pour isoler les tables des sous-systèmes logiques. Les clés étrangères garantissent l'intégrité des données. Ce sont des concepts orthogonaux - comme il est évident que l'intégrité des données entre les sous-systèmes est également indispensable. La comptabilité et l'expédition et éventuellement les données centrales des clients ne vivent pas dans des silos où un client peut être supprimé tout en étant utilisé dans la comptabilité.

En tant que tel, je pense que l'exigence du DBA est un signe d'incompétence. Je vous en prie, n'importe qui peut intervenir et fournir un contre-argument. Mais c'est ainsi que je le fais sur SQL Server (bien que, encore une fois, notre définition du schéma soit IIRC un PEU différent de la définition d'Oracle).


4

Tout en exigeant la destruction des contraintes de clés étrangères sans raisonnement détaillé est stupide, il est logique de garder les références externes sous contrôle. Que faire si les schémas auxquels vous faites référence sont nommés différemment sur votre nouveau serveur?

Dans Oracle, vous résolvez ce problème en créant des SYNONYMES pour les objets qui sont en dehors du schéma actuel.


1
Vous pouvez abuser des synonymes et embrouiller davantage la question de "à quoi cela fait-il référence?". Voir ici pour plus de détails sur la sécurité, les performances et les meilleures pratiques stackoverflow.com/a/10042117/851930
kevinsky

3
Les synonymes ne peuvent pas être utilisés comme cible de contraintes de clé étrangère.
Colin 't Hart

Points valides. Et une preuve supplémentaire que faire des déclarations sans donner aux autres l'occasion de faire valoir les mérites et les dangers est mauvais.
Twinkles

2

Si vous avez besoin (espace / sécurité / autre) de déplacer un schéma vers une autre base de données, vous ne pourrez plus gérer les références. C'est probablement la principale raison de demander la suppression des références.


0

La seule "mauvaise idée" que j'imagine en faisant cela, c'est que vous ne pouvez pas accorder le privilège d'objet REFERENCES (celui nécessaire pour créer une contrainte qui fait référence à une table) à un rôle. Je dois faire le schéma / utilisateur par schéma / utilisateur.

En plus de cela, je ne vois pas l'intérêt de votre DBA.


0

Pensez-y simplement: le schéma du propriétaire de la table enfant commence à créer un enregistrement dans sa table et empêche, sans le savoir, l'utilisateur du schéma de la table parent de supprimer des enregistrements de la table parent. Est-ce quelque chose qu'il anticipe et apprécie?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.