2009-03-17 4 views
1

Plus tôt j'avais posé la question:Le schéma doit-il toujours être explicitement défini dans l'instruction SQL?

Where (or how) should I define the schema in a select statement when using PostgreSQL?

La réponse que j'accepté était de modifier le search_path pour l'utilisateur de connexion de telle sorte que le schéma ne doit pas être spécifié dans le SQL. Cependant, maintenant, je me demande si je devrais toujours spécifier le schéma en SQL plutôt que de permettre au schéma d'être déduit automatiquement par le chemin de recherche. Cela semble être une approche plus sûre et plus portable dans d'autres bases de données.

Cette question est différente de la précédente en ce sens que je veux savoir quelles sont les meilleures pratiques pour définir le schéma en SQL, plutôt que comment cela peut être fait.

Le schéma doit-il toujours être explicitement défini dans l'instruction SQL? ** Note: Je ne coderais pas le nom du schéma mais je le permettrais d'être configurable via le fichier Web.config afin que le schéma puisse changer d'une installation à l'autre. **

Répondre

2

Il est recommandé de coder en dur le schéma en SQL.

Vous devez le conserver dans les paramètres de l'application et émettre SET search_path après la connexion à la base de données.

Si votre application est utilisée par plusieurs utilisateurs avec leurs propres schémas, votre vie sera beaucoup plus facile si vous ne codez pas le nom de schéma en SQL.

En d'autres termes,

string query = "SELECT * FROM " + ConfigurationManager.AppSettings.Get("schema") + ".table"; 

est une mauvaise façon;

SQLCommand("SET search_path = " + ConfigurationManager.AppSettings.Get("schema"), connection).ExecuteNonQuery(); 
string query = "SELECT * FROM table"; 

est un bon moyen.

+0

Je devrais probablement clarifier. Je ne coderais pas réellement le schéma mais je le laisserais plutôt être configurable via un paramètre Web.config. Dans ce cas, serait-il plus approprié d'inclure le schéma dans le SQL? –

+0

Pouvez-vous élaborer plus sur pourquoi l'un est recommandé sur l'autre? Je sais que dans le deuxième exemple, search_path est défini uniquement pour cette session, mais je ne comprends pas pourquoi c'est un avantage par rapport au premier exemple. –

+0

C'est plus facile d'écrire; il est plus facile de déboguer; il est plus facile de stocker les requêtes elles-mêmes en tant que ressources; vous n'avez pas à ajouter ConfigurationManager.AppSettings.Get ("schéma") à chaque table dans une jointure. – Quassnoi

0

Voyons voir - dans la base de données de l'application, je maintiens qu'il y a environ une douzaine de schémas. Quel serait l'ordre si je les mets dans "search_path"? Et est-ce que je placerais les noms de schéma (pas le nom de tables et pas les noms de table entièrement qualifiés) dans la configuration?

Comme vous l'avez deviné, je n'utilise pas "search_path". Mais peut-être que vous pourriez stocker les noms de tables entièrement qualifiés dans la configuration au cas où vous changeriez d'avis sur les noms des schémas ou des tables elles-mêmes.

Questions connexes