Chaque fois que vous, en tant que développeur, vous recevez une tâche basée sur du code existant, vous devez faire face à de nombreux défis. L'un de ces défis - le plus souvent le plus exigeant - consiste à comprendre le modèle de données d'une application.
Vous êtes normalement confronté à des tables, des vues, des colonnes, des valeurs, des procédures stockées, des fonctions, des contraintes et des déclencheurs déroutants qui prennent beaucoup de temps à avoir un sens pour vous. Et, une fois qu'ils le font, vous commencez à remarquer de nombreuses façons d'améliorer et de tirer parti des informations stockées.
Si vous êtes un développeur expérimenté, il y a de fortes chances que vous remarquiez également des choses qui auraient pu être mieux faites au début, c'est-à-dire des défauts de conception.
Dans cet article, vous découvrirez certaines des mauvaises pratiques courantes de conception de bases de données, pourquoi elles sont mauvaises et comment vous pouvez les éviter.
Les données sont stockées pour être consommées plus tard, et le but est toujours de les stocker et de les récupérer de la manière la plus efficace. Pour y parvenir, le concepteur de la base de données doit savoir à l'avance ce que les données vont représenter, comment vont-elles être acquises et à quel rythme, quel sera son volume opérationnel (c'est-à-dire quelle quantité de données est attendue), et enfin , comment il va être utilisé.
Par exemple, un système d'information industriel où les données sont collectées manuellement tous les jours n'aura pas le même modèle de données qu'un système industriel où les informations sont générées en temps réel. Pourquoi? Parce qu'il est très différent de gérer quelques centaines ou milliers d'enregistrements par mois par rapport à gérer des millions d'entre eux dans la même période. Des considérations spéciales doivent être prises par les concepteurs afin de maintenir l'efficacité et la convivialité de la base de données, si les volumes de données doivent être importants.
Mais, bien sûr, le volume de données n'est pas le seul aspect à prendre en compte, car le but des données affecte également le niveau de normalisation, la structure des données, la taille de l'enregistrement et la mise en œuvre générale de l'ensemble du système.
Par conséquent, la connaissance approfondie de l'objectif du système de données que vous allez créer conduit à des considérations dans le choix du moteur de base de données, des entités à concevoir, de la taille et du format d'enregistrement et des politiques de gestion du moteur de base de données.
Ignorer ces objectifs mènera à des conceptions qui présentent des défauts dans leurs bases, bien que structurellement et mathématiquement correctes.
La conception d'une base de données n'est pas une tâche déterministe; deux concepteurs de bases de données peuvent suivre toutes les règles et principes de normalisation pour un problème donné et, dans la plupart des cas, ils génèrent des présentations de données différentes. Ceci est inhérent à la nature créative du génie logiciel. Cependant, il existe certaines techniques d'analyse qui ont du sens dans chaque cas, et les suivre est le meilleur moyen d'accéder à une base de données qui fonctionne au mieux.
Malgré cela, nous sommes souvent confrontés à des bases de données qui ont été conçues à la volée sans suivre les règles les plus élémentaires de normalisation. Nous devons être clairs à ce sujet: chaque base de données doit, au moins, être normalisée à la troisième forme normale, car c'est la mise en page qui représentera le mieux vos entités et dont les performances seront le mieux équilibrées entre l'interrogation et l'insertion-mise à jour-suppression d'enregistrements .
Si vous tombez sur des tables qui ne sont pas conformes 3NF , 2NF, voire 1NF, envisagent de reconcevoir ces tableaux. L'effort que vous investissez pour ce faire sera payant à très court terme.
w2 taux horaire vs calculateur de salaire
Très lié au point précédent, car l'un des objectifs de normalisation est de le réduire, la redondance est une autre mauvaise pratique qui apparaît assez souvent.
Les champs et les tables redondants sont un cauchemar pour les développeurs, car ils nécessitent une logique métier pour maintenir à jour de nombreuses versions des mêmes informations. C'est une surcharge qui peut être évitée si les règles de normalisation sont suivies à fond. Si la redondance peut parfois sembler nécessaire, elle ne doit être utilisée que dans des cas très spécifiques et être clairement documentée afin d'être prise en compte dans les développements futurs.
Les effets négatifs typiques de la redondance sont une augmentation inutile de la taille de la base de données, des données sujettes à des incohérences et une diminution de l'efficacité de la base de données, mais - plus important encore - cela peut entraîner une corruption des données.
L'intégrité référentielle est l'un des outils les plus précieux fournis par les moteurs de base de données pour maintenir la qualité des données à son meilleur. Si aucune contrainte ou très peu de contraintes sont implémentées dès la conception, l'intégrité des données devra reposer entièrement sur la logique métier, ce qui la rend vulnérable aux erreurs humaines.
Lorsque vous utilisez un moteur de base de données (DBE), vous disposez d'un logiciel puissant pour vos tâches de traitement des données qui simplifiera le développement logiciel et garantira que les informations sont toujours correctes, sûres et utilisables. Un DBE fournit des services tels que:
Ne pas connaître ou ignorer ces capacités amènera le développement sur une voie extrêmement incertaine et sûrement vers des bogues et des problèmes futurs.
C'est en quelque sorte un point controversé, car de nombreux concepteurs de bases de données parlent aujourd'hui d'utiliser un champ généré automatiquement par ID entier comme clé primaire au lieu d'un champ composite défini par la combinaison de deux champs ou plus. Ceci est actuellement défini comme la «meilleure pratique» et, personnellement, j'ai tendance à être d'accord avec elle.
Cependant, il ne s'agit que d'une convention et, bien sûr, les DBE permettent la définition de primaire composite clés, que de nombreux concepteurs pensent inévitables. Par conséquent, comme pour la redondance, les clés primaires composites sont une décision de conception.
Attention, cependant, si votre table avec une clé primaire composite doit avoir des millions de lignes, l'index contrôlant la clé composite peut croître jusqu'à un point où les performances de l'opération CRUD sont très dégradées. Dans ce cas, il est préférable d'utiliser une simple clé primaire d'ID entier dont l'index sera suffisamment compact et établira les contraintes DBE nécessaires pour maintenir l'unicité.
Parfois, vous aurez une table que vous devrez interroger par plusieurs colonnes. Au fur et à mesure que la table grandit, vous remarquerez que les SELECT sur ces colonnes ralentissent. Si la table est assez grande, vous penserez, logiquement, à créer un index sur chaque colonne que vous utilisez pour accéder à cette table uniquement pour constater presque immédiatement que les performances des SELECT s'améliorent mais que les INSERTs, UPDATE et DELETEs chutent. Ceci, bien sûr, est dû au fait que les index doivent être synchronisés avec la table, ce qui signifie une surcharge massive pour le DBE. Il s'agit d'un cas typique de surindexation que vous pouvez résoudre de plusieurs manières; Par exemple, avoir un seul index sur toutes les colonnes différentes de la clé primaire que vous utilisez pour interroger la table, ordonner ces colonnes de la plus utilisée à la moins peut offrir de meilleures performances dans toutes les opérations CRUD qu'un index par colonne.
D'un autre côté, avoir une table sans index sur les colonnes qui sont utilisées pour l'interroger entraînera, comme nous le savons tous, une mauvaise performance sur les SELECT.
En outre, l'efficacité de l'index dépend parfois du type de colonne; les index sur les colonnes INT présentent les meilleures performances possibles, mais les index sur VARCHAR, DATE ou DECIMAL (si cela a du sens) ne sont pas aussi efficaces. Cette considération peut même conduire à une refonte des tables auxquelles il faut accéder avec la meilleure efficacité possible.
Par conséquent, l'indexation est toujours une décision délicate, car trop d'indexation peut être aussi mauvaise que trop peu et parce que le type de données des colonnes à indexer a une grande influence sur le résultat final.
C'est quelque chose avec lequel les programmeurs ont toujours du mal à faire face à une base de données existante: comprendre quelles informations y sont stockées par les noms des tables et des colonnes car, souvent, il n'y a pas d'autre moyen.
société britannique de services bancaires et financiers
Le nom de la table doit décrire l'entité qu'elle contient et chaque nom de colonne doit décrire quel élément d'information il représente. C'est facile, mais cela commence à être compliqué lorsque les tables doivent être liées les unes aux autres. Les noms commencent à devenir désordonnés et, pire, s'il existe des conventions de dénomination confuses avec des normes illogiques (comme, par exemple, «le nom de la colonne doit contenir 8 caractères ou moins»). La conséquence finale est que la base de données devient illisible.
Par conséquent, un convention de dénomination est toujours nécessaire si la base de données est censée durer et évoluer avec l'application qu'elle prend en charge, et voici quelques conseils pour en établir une succincte, simple et lisible:
Il existe de nombreuses directives de dénomination de bases de données sur Internet qui éclaireront davantage cet aspect très important de la conception de bases de données, mais avec ces règles de base, vous pouvez au moins accéder à une base de données lisible. Ce qui est important ici, ce n'est pas la taille ou la complexité de vos directives de dénomination, mais votre cohérence à les suivre!
La conception de bases de données est une combinaison de connaissances et d'expérience; l'industrie du logiciel a beaucoup évolué depuis ses débuts. Heureusement, il y a suffisamment de connaissances disponibles pour aider concepteurs de bases de données obtenir les meilleurs résultats.
Il existe une bonne conception de base de données des lignes directrices partout sur Internet ainsi que mauvaises pratiques et choses à éviter dans la conception de bases de données. Faites votre choix et respectez-le.
Et, n'oubliez pas, ce n'est que par l'expérimentation, les erreurs et les succès que vous apprenez, alors allez-y et commencez maintenant.