sql >> Database >  >> RDS >> Oracle

Openbare synoniemen versus schema.object-patroon

Publieke synoniemen hebben een heel specifiek doel; ze maken het mogelijk om elke . naar een object te verwijzen gebruiker - ervan uitgaande dat ze de juiste rechten hebben. Als u op enig moment in de toekomst wilt veranderen hoe een specifieke gebruiker een object bekijkt, dan zijn openbare synoniemen niet de juiste keuze.

Ze gebruiken ook een specifieke objectnaam voor de hele database. Het feit dat er een openbaar synoniem bestaat, sluit echter niet uit dat u een object met dezelfde naam kunt maken. Dit kan ongelooflijk verwarrend zijn.

Stel bijvoorbeeld dat u een procedure test . heeft en een schema emp . Probeert emp.test uit te voeren zal niet werken omdat je al een openbaar synoniem emp hebt op de tafel .

Tom Kyte , lijkt te heb een . geschreven aantal artikelen hierover.

Wat het prestatieaspect betreft, lijken ze te suggereren dat een openbaar synoniem boven een privé-synoniem zal resulteren in een lichte prestatievermindering . Het gebruik van een synoniem in plaats van geen synoniem zal echter ook resulteren in een lichte afname van de prestaties. Dit suggereert dat als elke laatste computron is kostbaar, je moet helemaal geen synoniemen gebruiken.

Samengevat denk ik dat dit betekent dat je openbare synoniemen zo mogelijk moet vermijden. Als je nodig je gebruikt er dan natuurlijk een, ze bestaan ​​toch met een reden, maar als je dat niet doet, wat heeft het dan voor zin om er een te hebben? De scott.emp constructie is duidelijk, laat je precies zien naar welk schema en object je verwijst zonder enige kans op verkeerde interpretatie, hetzij door jezelf of door iemand anders die nieuw is in de database en code.

Snel punt. Je zegt het niet expliciet, maar de formulering van je vraag lijkt te suggereren dat je een schema aan het maken bent voor elke gebruiker. Dit lijkt enorm verwarrend te zijn...




  1. Voer een orakelfunctie uit die een referentiecursor in C# retourneert

  2. Nginx-configuratie met Magento 1.8

  3. Hoe voeg ik een automatisch oplopende primaire sleutel toe aan een bestaande tabel in PostgreSQL?

  4. Print de gegevens in ResultSet samen met kolomnamen