Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Öffentliche Synonyme vs. schema.object-Muster

Öffentliche Synonyme dienen einem ganz bestimmten Zweck; sie ermöglichen, dass ein Objekt von every referenziert wird Benutzer - vorausgesetzt, sie haben die entsprechenden Berechtigungen. Wenn Sie irgendwann in der Zukunft ändern möchten, wie ein bestimmter Benutzer ein Objekt sieht, sind öffentliche Synonyme nicht der richtige Weg.

Sie verbrauchen auch einen bestimmten Objektnamen für die gesamte Datenbank. Die Tatsache, dass ein öffentliches Synonym existiert, hindert Sie jedoch nicht daran, ein Objekt mit demselben Namen zu erstellen. Das kann unglaublich verwirrend sein.

Angenommen, Sie haben eine Prozedur test und ein Schema emp . Versuch, emp.test auszuführen wird nicht funktionieren, da Sie bereits ein öffentliches Synonym emp haben auf dem Tisch .

Tom Kyte , scheint so zu sein habe ein geschrieben Anzahl der Artikel dazu.

In Bezug auf die Leistung scheinen sie darauf hinzudeuten, dass ein öffentliches Synonym über einem privaten Synonym zu einem leichter Leistungsabfall . Die Verwendung eines Synonyms anstelle von keinem Synonym führt jedoch auch zu einer leichten Leistungsminderung. Dies deutet darauf hin, dass wenn jeder letzte computron wertvoll ist, sollten Sie überhaupt keine Synonyme verwenden.

Zusammengefasst bedeutet das meiner Meinung nach, dass man möglichst auf öffentliche Synonyme verzichten sollte. Wenn Sie brauchen man benutzt dann natürlich einen, sie existieren schließlich aus einem bestimmten Grund, aber wenn man keinen hat, was bringt es dann, einen zu haben? Die scott.emp Das Konstrukt ist klar und zeigt Ihnen genau, auf welches Schema und Objekt Sie verweisen, ohne die Möglichkeit einer Fehlinterpretation, entweder durch Sie selbst oder durch jemand anderen, der neu in die Datenbank und den Code eindringt.

Schneller Punkt. Sie sagen es nicht ausdrücklich, aber der Wortlaut Ihrer Frage scheint darauf hinzudeuten, dass Sie für jeden Benutzer ein Schema erstellen. Das scheint massiv verwirrend zu sein...