Nous avons depuis longtemps des normes de codage pour notre code .Net, et il semble y avoir plusieurs sources réputées pour des idées sur la façon de les appliquer qui évoluent avec le temps.
Je voudrais pouvoir rassembler quelques normes pour le SQL qui est écrit pour être utilisé par nos produits, mais il ne semble pas y avoir de ressources sur le consensus pour ce qui détermine un SQL bien écrit?
coding-standards
sql-server
Rowland Shaw
la source
la source
Réponses:
D'après mon expérience, les principales choses que je rechercherais seraient:
Dénomination des tables et des colonnes - vérifiez si vous utilisez ID, Reference ou Number pour les colonnes de type ID, singulier ou pluriel pour les noms (les pluriels sont communs pour les noms de table - par exemple THINGS, singulier pour les noms de colonne - par exemple THING_ID). Pour moi, les choses les plus importantes ici sont la cohérence qui évite aux gens de perdre du temps (par exemple, vous ne rencontrez pas de fautes de frappe où quelqu'un a mis THING comme nom de table parce que vous savez intuitivement que les noms de table ne sont jamais singuliers).
Toutes les créations doivent inclure une goutte (conditionnelle à l'objet existant) dans leur fichier. Vous pouvez également vouloir inclure des autorisations de subvention, à vous de choisir.
Les sélections, les mises à jour, les insertions et les suppressions doivent être disposées avec un nom de colonne, un nom de table et un clause clause / order by par ligne afin de pouvoir être facilement commentés un par un pendant le débogage.
Préfixe pour les types d'objets, en particulier là où ils peuvent être confondus (donc v pour view étant le plus important). Je ne sais pas si cela s'applique toujours, mais il était auparavant inefficace pour les procédures stockées autres que les procédures système de commencer sp_. La meilleure pratique pour les différencier de toute façon est probablement usp_ que j'ai utilisé le plus récemment.
Une norme indiquant comment le nom d'un déclencheur doit inclure s'il s'agit de mise à jour / insertion / suppression et le tableau auquel il s'applique. Je n'ai pas de norme préférée, mais ce sont des informations essentielles et doivent être faciles à trouver.
Standard pour la propriété des objets dans les versions antérieures de SQL Server ou le schéma dans lequel il doit exister pour 2005 et versions ultérieures. C'est votre appel ce que c'est mais vous ne devez jamais deviner à qui appartient quelque chose / où il vit) et, si possible, le schéma / propriétaire doit être inclus dans les scripts CREATE pour minimiser la possibilité qu'il soit créé à tort.
Un indicateur que toute personne utilisant SELECT * sera amenée à boire une pinte de sa propre urine.
À moins qu'il n'y ait une très, très bonne raison (qui n'inclut pas la paresse de votre part), ayez, appliquez et maintenez des relations clé primaire / clé étrangère dès le départ. C'est après tout une base de données relationnelle et non un fichier plat et les enregistrements orphelins vont faire de votre vie de support un enfer à un moment donné. Sachez également que si vous ne le faites pas maintenant, je peux vous promettre que vous n'arriverez jamais à l'implémenter après l'événement, car c'est 10 fois le travail une fois que vous avez des données (ce qui sera un peu foutu parce que vous n'avez jamais appliqué les relations correctement).
Je suis sûr que j'ai raté quelque chose, mais pour moi, ce sont ceux qui offrent réellement de réels avantages dans un nombre décent de situations.
Mais comme pour toutes les normes, moins c'est plus. Plus vos normes de codage sont longues, moins les gens sont susceptibles de les lire et de les utiliser. Une fois que vous avez dépassé quelques pages bien espacées, commencez à chercher à supprimer ce qui ne fait pas vraiment de différence pratique dans le monde réel, car vous réduisez simplement les chances que les gens le fassent.
EDIT: deux corrections - y compris les schémas dans la section de propriété, supprimant une astuce erronée sur le nombre (*) - voir les commentaires ci-dessous.
la source
C'est parce qu'il n'y a pas de consensus. À titre d'exemple, j'aurais des réponses différentes pour au moins la moitié des éléments de la liste de Jon Hopkins, et en fonction de la quantité de détails sur sa liste, il est sûr que nous travaillons tous les deux avec des bases de données pour vivre.
Cela dit, une norme de codage est toujours une bonne chose à avoir, et une norme que tout le monde dans l'équipe comprend et approuve est une meilleure chose, car cette norme sera plus probablement suivie.
la source
En plus de la réponse de Jon Hopkins ...
Objets internes et externes séparés
Pour les objets internes, rendez-les explicites si "non par défaut"
Utilisez des schémas pour simplifier le nommage + les autorisations. Exemples:
la source