Normes de Programmation SQL SERVER
Normes de Programmation SQL SERVER
1 INTRODUCTION.1
1.1 Description. ....................................................................................................1
1.2 Objectif des Normess .............................................................................1
1.3 Personnel Responsable
2 BASE DE DONNÉES.3
2.1 Politique Générales..............................................................3
2.1.1 Passer de Développement à Production...............................................................3
2.2 Test des objets de base de données...............................................................5
2.3 Recommandations de programmation ..............................................................5
3 CONCEPTION DE LA BASE DE DONNÉES.6
3.1 Généralités ................................................................................................6
3.2 Règles pour nommer des tableaux ..........................................................................8
3.3 Règles pour nommer le champs........................................................................9
3.4 Règles pour nommer les Procédures Stockéess ....................................10
3.5 Règles pour nommer les Fonctions...................................................................11
3.6 Règles pour nommer le Trigger. .......................................................................12
3.7 Règles pour nommer les Jobs............................................................................12
3.8 Règles pour nommer les VUES. ................................................................13
3,9 Format pour documenter des objets. ...............................................................13
4 RECOMMANDATIONS
4.1 CONSEIL pour la programmation en T-SQL.................................................................17
Lecturea .....................................................................................................17
4.1.2 Jointures.........................................................................................................17
4.1.3 Où ......................................................................................................18
4.1.4 Généraux ................................................................................................19
4.1.5 Transaccionalitéd....................................................................................19
1 Introduction
1.1 Description
Le présent manuel des normes comprend les normes de normes techniques
applicables à la conception logique, à la conception physique et à la construction de la base de données et du système
de sécurité dans l'environnement Microsoft SQL et les outils de développement
Microsoft Visual Studio.
Personnel Responsable
Analyste
Conception logique de base de données
Tableaux
Champs
Restriction des tables
Vues
Vues matérialisées
Séquences
Systèmes de sécurité
Utilisateurs
Groupes et Hiérarchies
Privilèges
Audit
Programmeur
Langage T-SQL
Langage ASP-NET
Services de rapport
2 Base de Données
Tout objet de base de données nouvel qui a été créé sans avoir
informé au responsable ou DBA, seront supprimés sans préavis
communication, et l'analyste système sera informé avec
copiez à la direction par le biais d'un e-mail indiquant l'action réalisée.
Si les nouveaux objets que l'on souhaite mettre en production ne répondent pas
avec ce qui est spécifié dans le document, l'Analyste Système est dans le
obligation de réaliser les changements ou les améliorations suggérés par le
responsable ou DBA.
Le passage à la production doit être effectué dans les premières heures de la journée, de
du lundi au vendredi de 8 h à 15 h au maximum, dans le but de
garantir la présence de l'analyste système en cas d'existence d'un
incident.
Exemple
Le responsable ou DBA est dans l'obligation de réaliser un test sur les objets.
qui passeront en production, qu'ils doivent respecter les suivantes
spécifications :
Il existe des cas où une requête est effectuée sur la même table dans le
SÉLECTIONNER
SÉLECTIONNER columna1, (SÉLECTIONNER columna5 DE Tabla1 OÙ
columna9=522) comme columna5, columna6 FROM Tabla1 columna9=522
il est recommandé d'utiliser un LEFT JOIN.
3.1 Généralités
Nomenclature :
Exemple :
Exemple :
tb_ges_soldeJournalier
Exemple
La table des "Transactions des clients" serait appelée de la
forme suivante :
tb_ges_transactionClient
Exemple :
tb_ges_client_direccion
Utiliser le symbole_ dans les noms des objets identifie une dépendance.
Par exemple, la tb_ges_cliente_direccion est liée à la table
tb_ges_cliente et détaillez les adresses du client (un à plusieurs).
idée
Type d'objet Description
Objet
Table de destination, dont la source est d'origine
Td Table SQL
d'une source externe de données (ETL)
Table de base de configuration ou maîtresses
Tb Table SQL
internes propres à l'application
Table de regroupement, originaire comme un
Ta Table SQL résumé d'une ou plusieurs tables de destination, pour
optimiser l'émission des rapports.
Table temporaire, utilisée pour stocker
temporairement les données dans un
Tt Table SQL traitement ou génération de rapports
le contenu peut être supprimé dans
processus de nettoyage.
Table intermédiaire, image d'une table
source externe, utilisée pour accélérer la
Ti Table SQL
charger et utiliser des procédures stockées
transformez les données dans le processus ETL
Tk Table SQL Sauvegarde des tables
Domaine du
Description
Affaires
ges Gestion
gén Procédures et fonctions générales
seg Sécurité
tar Tâches d'exécution d'ETL
Systèmes, pour l'utilisation de la documentation et des procédures
sœur générales comme utilitaires de développement ou
entretien.
ren Rentabilité
sperme Suivi des indicateurs de conformité
cua Carnet de gestion
avant Système budgétaire (bifopres)
spr Suivi des propositions
Tout autre domaine d'affaires doit être inscrit à
*
la table de tb_seg_aplicacion
Les tables doivent être créées selon leur représentation conceptuelle dans le
champ d'activité qui permet de les organiser et de faciliter leur localisation, en utilisant le
nomenclature générale définie au paragraphe 3.1 :
Toute relation entre les tables doit être mise en œuvre par des contraintes.
(clés étrangères) avec intégrité référentielle.
Les champs sont libres et il faudra être aussi explicite que possible, utiliser des tirets
pour séparer les mots et ne pas dépasser 32 caractères, n'utilisez pas de caractères
spéciaux comme des mots accentués, eñe ou des symboles, les noms doivent être
être au singulier.
Il existe des préfixes qui résument le premier mot du champ, ils ont 3 caractères.
que indiquent la fonction du champ et les autres caractères qui expriment le détail,
toujours écrite en minuscules, cette norme doit prévaloir car le
Il sera utilisé dans l'environnement de développement et aidera à réduire le temps
dans le contrôle de suivi.
Préfixe Description
peut Quantité
morue Code
des Description
dir Adresse
est État
féc Date
grp Groupe
idée Identifiant
imp Importer
nom Nom
num Numéro
par Pourcentage
truc Type
tot Total
var Variation
Code du client.
Adresse du client.
Exemple :
Exemple :
Exemple :
On nous demande de visualiser les clients débiteurs et combien de factures ont été émises, le SP
doit s'appeler up_ges_sel_deudaCantidadFactura.
La relation entre les mots dans le nom d'un SP doit commencer par
minuscule et ne doit pas être séparé par des traits d'union, la séparation de
PalabrasEsConMayúscula (estiloCamel)
Exemple : up_ges_sel_deudaQuantitéFacture.
Vous devez identifier le secteur d'activité dans lequel la fonction sera utilisée, si
c'est une fonction générale, utiliser le domaine "gen".
Dans le nom d'une FONCTION, il faut indiquer l'action que celle-ci va effectuer.
générer, les actions autorisées sont les suivantes :
Action Description
sel Afficher une liste des
données.
Utilisé pour des fonctions
SQL type Table-Value
cal Retourne un résultat de
une opération.
Tableau 004 : Actions pour les Fonctions
Exemple :
Il est nécessaire de lister les états d'un champ et il est nécessaire que ce soit
à travers une fonction, le nom doit être : fn_ges_sel_estado.
Il est nécessaire d'effectuer l'addition de deux nombres et il est nécessaire que ce soit
à travers une fonction, le nom doit être : fn_gen_cal_sumaNumero.
La relation entre les mots dans le nom d'une fonction doit commencer
con majuscule et ne doit pas être séparé par des tirets.
Exemple : fn_gen_cal_sumaNumero.
Dans le nom d'un déclencheur, il doit être indiqué l'action lors de laquelle il va être exécuté,
les actions autorisées sont les suivantes :
Action Description
ins Il sera exécuté lorsqu'un INSERT sera effectué.
mise à jour S'exécutera lors d'une mise à jour.
del S'exécutera lors d'un DELETE.
cud Il sera exécuté lors d'un insert, d'une mise à jour ou
supprimer.
Exemple :
Exemple :
Il est nécessaire de créer les jobs pour supprimer les enregistrements nuls de la table
tb_vta_factura, le nom pourrait être :
jb_ supprimerEnregistrementNulFact.
Exemple :
Il est nécessaire de créer une vue pour lister les enregistrements des clients avec
facture le nom pourrait être : vw_ges_clientNouveau.
La relation entre les mots dans le nom d'une vue doit commencer
con minuscules et ne doit pas être séparé par des tirets.
Exemple : vw_ges_clientVinculado
-- =============================================
-- Auteur : jmieses
-- Date de création : 06/02/2012
-- Description: Met à jour la maitrise de l'application
-- Mises à jour :
06/02/2013 fcossio @001 J'ajoute le champ
-- astuce_application
-- =============================================
-- DÉBUT @001
SÉLECTIONNER * DE tt_ges_prueba
-- FINAL @001
4 Recommandations
Tout changement sur la BD (champ, table, index, etc.) doit être notifié à un
la personne responsable oDBA, qui à son tour notifiera le reste du personnel, est
recommandable l'utilisation d'un e-mail pour le contrôle.
Entier vs. Smallint. Avantage : Taille de stockage et plage maximale. Dans le cas
del Integer a un stockage plus important car il fait 4 octets tandis que le smallint seulement
est de 2 octets.
Décimal contre Flottant. Avantages : Décimal est un type de données propriétaire du moteur, les
Les opérations arithmétiques avec ce type sont d'abord traitées par le moteur, puis passent au
processeur, tandis que les opérations avec un float, integer et smallint sont effectuées
directement le processeur, cependant l'avantage de Decimal est la longueur dans les
décimales, c'est-à-dire qu'il effectue déjà la fonction de ronding lors de l'enregistrement, c'est pourquoi il est plus
usé
Création d'index. Avantages : Minimiser la quantité d'index dans une table optimise
l'accès aux données et au temps d'indexation. Dans une architecture de BD primaire et
secondaire, lorsqu'une opération de réindexation se produit, à la fin, toutes les pages
des index sont placés dans le tampon de réplication pour que la BD secondaire les reçoive.
Il est important de s'accorder au moment de la conception des index pour éviter que
durant la programmation, on redondit dans les indices. Éviter l'utilisation d'indices avec des champs.
de type Char dont la longueur est grande. Il est important de prendre en compte le volume de
informations de la table. Il est utilisé dans les filtres, Joins, Order By, Group By.
Clés primaires. Avantages : Les clés primaires créent un index de type UNIQUE,
renforce l'intégrité de l'information. Par définition de l'intégrité, les clés primaires
ils n'acceptent pas de nuls.
Transactions. Advantages: Integrity and consistency of the data, the server guarantees
que les opérations effectuées dans les limites de la transaction sont complètes
sur le disque, ou en cas de défaillance pendant son exécution, la base de données se
restaurera au point avant l'exécution de la transaction. Le temps que se
maintenez le registre à jour, la transaction doit être minimale et ainsi y parvenir
plus de fréquentation et de disponibilité. Réplication cohérente. Ne pas utiliser : Lorsqu'un événement se produit
interruption d'une mise à jour de données, il n'est pas possible de garantir l'ampleur de l'opération
a été réalisée, même dans une opération d'un seul enregistrement, il n'est pas possible de savoir si les données
s'est mis à jour sur le disque correctement, ou si les index impliqués ont été mis à jour
correctement. Il existe même la possibilité de laisser les pages du disque
inconsistentes. Dans un environnement répliqué, il n'est pas garanti que le serveur secondaire
réflète les changements apportés au serveur principal. Dans les processus de lecture seule non
utiliser des transactions.
TODO la requête doit accéder aux tables en utilisant des index (sauf si le SQL décide de ne pas le faire)
les utiliser). Cela implique que TOUT tableau, y compris les temporaires, doit avoir un Index
Clusterisé. En option, il est possible de placer un ou plusieurs index NonClusterisés.
Exemple
Ne pas utiliser : WHERE CONVERT(VARCHAR(10),fec_poliza,121) = "20051201"
Utiliser : WHERE fec_poliza = CONVERTIR(DATETIME,"20051201",121)
Dans la clause WHERE, n'utilisez jamais d'opérateurs avec des colonnes d'une table. Les
opérateurs les placer sur la constante avec laquelle on va comparer.
Exemple
Ne pas utiliser : WHERE num_poliza + 600 = @variable_poliza
Usar : WHERE num_poliza = @variable_poliza - 600
Toute table temporaire doit être supprimée, il ne doit exister aucune table avec tt_ dans les bases de
Données de production.
Chaque procédure stockée doit contenir dans l'en-tête, le nom de l'auteur, la date et une
brève description de l'objectif du SP.
Évitez les requêtes dynamiques en concaténant des valeurs séparées par des virgules, comme par
Exemple
SUPPRIMER DE td_ges_direccion OÙ cod_direccion IN (#1, #2, #3,..#N)
Au lieu de cela, mettez les valeurs dans un tableau de manière à ce que cela puisse être fait.
croix avec d'autres tables, comme par
Exemple :
SUPPRIMER td_ges_direccion
DE DIRECCIONES, #tt_ges_temporal
OÙ td_ges_direccion.cod_direccion =
#tt_ges_temporal.cod_direccion
Lecture
Évitez d'utiliser SELECT *. Lisez toujours uniquement les colonnes dont vous avez besoin. Avec cela
évites d'apporter beaucoup de données inutiles au client, alors on
décongestionner le réseau et le client a l'impression que c'est plus rapide.
Pour les requêtes de listes d'enregistrements, utilisez l'opérateur TOP n. Avec cela
nous évitons d'apporter de nombreux enregistrements au client. Le réseau est également désengorgé.
et le client sent que c'est plus rapide.
Si vous utilisez l'opérateur UNION et que vous êtes sûr que les deux requêtes n'ont pas
registres dupliqués, alors mieux vaut utiliser UNION ALL, pour éviter que
implicitement, l'opérateur DISTINCT est utilisé.
Évitez d'utiliser SELECT ... INTO table_name. Cela bloquera les tables du système.
Au lieu de cela, crée d'abord les tables puis réécris la phrase.
comme INSERT INTO nom_de_table SELECT ...
Si vous allez lire des données d'une seule table, évitez de le faire en utilisant des vues qui utilisent
autres tables.
4.1.2 Jointures
Écrivez des Jointures au format ANSI (utilisez la clause JOIN .. ON). Avec cela, vous vous assurez
d'écrire toutes les restrictions sans possibilité d'en oublier une.
Évite d'utiliser la même table plus d'une fois dans une seule requête. Pour améliorer cela, utilise
tables temporaires.
États-Unis
SELECT numéro_membre, prénom, nom, numéro_chambre
DE membres m
JOIN interne chambres r
ON m.room_number = r.room_number
Au lieu d'utiliser une requête avec de nombreux Joins où les tables impliquées sont
grandes, mieux créez une table temporaire avec les données de la table principale (codes)
et puis mets à jour ce tableau en effectuant des jointures avec les tables secondaires.
SELECT nom_éditeur
DE tb_gen_publisher
OÙ cod_publisher DANS
(SÉLECTIONNER cod_publisher DE tb_gen_title)
États-Unis
SELECT nom_publisher
DE tb_gen_publisher
INNER JOIN tb_gen_title
SUR tb_gen_title.cod_publisher = tb_gen_publisher.cod_publisher
4.1.3 Où
Évitez d'utiliser des fonctions sur les colonnes dans la clause WHERE
États-Unis
Si vous utilisez LIKE dans la clause WHERE, essayez d'utiliser au moins 3 caractères.
avance comme "abc%"
Si vous utilisez LIKE dans la clause WHERE, évitez d'utiliser l'opérateur % au début : "%abc"
États-Unis
Sélectionnez numéro_de_client, nom_du_client
DE la part du client
OÙ customer_number ENTRE 1000 et 1004
Évitez d'utiliser les opérateurs OR, NOT IN, NOT BETWEEN, <>, NOT EXISTS, NOT
COMME, COMME '%ABC'
4.1.4 Généraux
Évite d'utiliser des curseurs. Utilise plutôt des tables temporaires avec un champ entier.
identité(1,1) que vous pourrez balayer de manière séquentielle. N'oubliez pas d'indexer le champ
identité.
Considérez que les fonctions MIN et MAX peuvent utiliser des index. Si possible, créez.
indices sur les colonnes sur lesquelles ces fonctions sont utilisées.
Lorsque vous utilisez des tables temporaires, envisagez de créer des index pour augmenter le
performance de vos requêtes.
Vérifiez chaque requête d'une procédure stockée et assurez-vous qu'elle ne fasse pas de "table scan".
(recherche non indexée). Pour étudier cela, activez la directive « Afficher le plan de requête » dans
l'« Analyseur de requêtes ».
Chaque requête doit utiliser un index sur une colonne qui a une haute
dispersion.
Utilisez autant que possible des tables dérivées au lieu de tables temporaires. C'est plus
raisonnable si les informations que vous stockeriez dans la table temporaire vont être utilisées
une fois. Mais si tu penses utiliser ces données plusieurs fois dans une procédure stockée
procédure, il est donc préférable d'utiliser une table temporaire.
4.1.5 Transactionnalité
Veille à ce que tes transactions soient petites, c'est-à-dire qu'elles accèdent au moindre
nombre de pages de la base de données.
Évite de déclarer une seule grande transaction pour les processus par lots. Il vaut mieux avoir
plusieurs petites transactions et gérer les reprosesses.