Suite

Rendu dynamique sur une couche avec une longue requête SQL

Rendu dynamique sur une couche avec une longue requête SQL


J'ai une question sur le rendu dynamique avec les API CartoDB. Ces API sont nouvelles pour moi.

Les données sont une grande couche stockée dans CartoDB (environ 30 000 polygones).

Dans mon application le rendu par défaut de cette couche doit être remplacé par un rendu défini par l'utilisateur. Pour chaque sous-ensemble de polygones sélectionnés par utilisateur, la couleur change. Mais dans un sous-ensemble le nombre de polygones peut être d'environ 10 000 polygones par exemple.

Dans mon code, j'utilise les subLayerOptions en définissant les propriétés SQL et cartocss. Le SQL est comme "sql:"SELECT * FROM polygons where ID in ('10000','40202'… ".

Cela fonctionne bien avec quelques valeurs mais cela ne fonctionne pas lorsque la requête SQL contient beaucoup de valeur car la requête est trop longue.

Existe-t-il une autre méthode pour le faire ?


Dans ce cas, vous devez faire quelque chose sur le serveur qui regroupe ces polygones. L'envoi d'un SQL avec des identifiants 10k va être trop volumineux et l'envoi, le traitement et le rendu prendront beaucoup de temps.

Après vous être regroupé, vous pouvez utiliser une autre condition comme,

sélectionnez * parmi les polygones où type = 'whatever'

plus d'informations seraient les bienvenues


Problème de performances avec les paramètres sp_executesql et VARCHAR

Les segments de table ont un index par DEPARTMENT (VARCHAR(10)) et BDPID(VARCHAR(10)).

Le temps d'exécution de la première requête est de 34 secondes

Lorsque j'ai déplacé le paramètre DEPARTMENT vers une variable, le temps d'exécution est devenu 1 seconde. Plan d'exécution #2 (rapide)

Mais je dois utiliser sql dynamique. Et lorsque j'ai déplacé la requête vers sp_execitesql, le temps d'exécution est redevenu 34 secondes. Plan d'exécution #3 (lent)

Comment puis-je obtenir les performances de la deuxième requête à l'aide de SQL dynamique ?


16 réponses 16

Ce que vous proposez n'est pas nouveau. Beaucoup de gens l'ont essayé. la plupart ont découvert qu'ils recherchent une flexibilité "infinie" et se retrouvent avec beaucoup, beaucoup moins que cela. C'est le "roach motel" des conceptions de bases de données - les données entrent, mais il est presque impossible de les extraire. Essayez de conceptualiser l'écriture du code pour TOUT type de contrainte et vous verrez ce que je veux dire.

Le résultat final est généralement un système BEAUCOUP plus difficile à déboguer, à maintenir et plein de problèmes de cohérence des données. Ce n'est pas toujours le cas, mais le plus souvent, c'est ainsi que cela se termine. Principalement parce que le ou les programmeurs ne voient pas cette épave de train arriver et ne parviennent pas à coder de manière défensive contre elle. De plus, il arrive souvent que la flexibilité "infinie" ne soit pas si nécessaire que cela. ici, alors laissez-les mettre N'IMPORTE QUOI". et les utilisateurs finaux sont très bien avec des types d'attributs prédéfinis qu'ils peuvent utiliser (codez un numéro de téléphone générique et laissez-les créer n'importe lequel d'entre eux - c'est trivial dans un système bien normalisé et maintient la flexibilité et l'intégrité !)

Si vous avez une très bonne équipe de développement et êtes intimement conscient des problèmes que vous devrez surmonter avec cette conception, vous pouvez réussir à coder un système bien conçu et pas trop bogué. Le plus souvent.


8 réponses 8

De nos jours, vous êtes susceptible de voir les lectures (requêtes) traitées différemment des écritures (commandes). Dans un système avec une requête compliquée, il est peu probable que la requête elle-même passe par le modèle de domaine (qui est principalement responsable du maintien de la cohérence de écrit).

Vous avez tout à fait raison de dire à SQL ce qui est SQL. Nous allons donc concevoir un modèle de données optimisé autour des lectures, et une requête de ce modèle de données prendra généralement un chemin de code qui n'inclut pas le modèle de domaine (à l'exception possible d'une validation d'entrée - garantissant que les paramètres de la requête sont raisonnables).

Si je comprends bien, un point principal est de séparer la logique de domaine (logique métier) de l'infrastructure (DB, système de fichiers, etc.).

C'est le fondement du malentendu : le but de DDD n'est pas de séparer les choses selon une ligne dure comme "ceci est dans le serveur SQL, donc ne doit pas être BL", le but de DDD est de séparer les domaines et de créer des barrières entre ceux qui permettent aux internes d'un domaine d'être complètement séparé des internes d'un autre domaine, et de définir des externes partagés entre eux.

Ne considérez pas "être en SQL" comme la barrière BL/DL et ce n'est pas ce que c'est. Au lieu de cela, pensez à « c'est la fin du domaine interne » comme la barrière.

Chaque domaine doit avoir des API externes qui lui permettent de fonctionner avec tous les autre domaines : dans le cas du stockage de données couche, il doit avoir des actions de lecture/écriture (CRUD) pour les objets de données qu'il stocke. Cela signifie que SQL lui-même n'est pas vraiment la barrière, les composants VIEW et PROCEDURE le sont. Vous ne devez jamais lire directement à partir du tableau : ce est le détail de la mise en œuvre DDD nous dit que, en tant que consommateur externe, nous ne devrions pas nous inquiéter.

Ce que je me demande, c'est que se passe-t-il lorsque j'ai des requêtes très complexes comme une requête de calcul de ressources matérielles ? Dans ce type de requête, vous travaillez avec des opérations lourdes, le genre de chose pour laquelle SQL a été conçu.

C'est exactement ce qui devrait être dans SQL alors, et ce n'est pas une violation de DDD. C'est ce pour quoi nous avons fait DDD. Avec ce calcul en SQL, cela devient partie de la BL/DL. Ce que vous feriez est d'utiliser une vue / procédure stockée / qu'avez-vous séparée et de garder la logique métier séparée de la couche de données, comme ce est votre API externe. En fait, votre couche de données devrait être une autre couche de domaine DDD, où votre couche de données a son propre abstractions pour travailler avec les autres couches de domaine.

Faire ces calculs dans l'infrastructure ne peut pas non plus se produire, car le modèle DDD permet des modifications dans l'infrastructure sans changer la couche de domaine et sachant que MongoDB n'a pas les mêmes capacités que, par exemple. SQL Server, cela ne peut pas arriver.

C'est un autre malentendu : il dit Détails d'implémentation en interne peut changer sans changer autre couches de domaine. Il ne dit pas que tu peux juste remplacer tout un morceau d'infrastructure.

Encore une fois, gardez à l'esprit que DDD consiste à masquer les composants internes avec des API externes bien définies. Où se trouvent ces API est une question totalement différente, et DDD ne définit pas cela. Il définit simplement que ces API existent et ne devraient jamais changer.

DDD n'est pas configuré pour vous permettre de remplacer ad hoc MSSQL par MongoDB et mdash sont deux composants d'infrastructure totalement différents.

Au lieu de cela, utilisons une analogie pour ce que DDD définit : les voitures à essence contre les voitures électriques. Les deux véhicules ont deux complètement différent méthodes pour créer la propulsion, mais ils ont les mêmes API : un on/off, un accélérateur/frein et des roues pour propulser le véhicule. DDD dit que nous devrions pouvoir remplacer le moteur (essence ou électrique) de notre voiture. Cela ne dit pas que nous pouvons remplacer la voiture par une moto, et c'est effectivement ce qu'est MSSQL & rarr MongoDB.

Si vous avez déjà participé à un projet où l'organisation payant pour héberger l'application décide que les licences de couche de base de données sont trop chères, vous apprécierez la facilité avec laquelle vous pouvez migrer votre base de données/stockage de données. Tout bien considéré, bien que cela arrive, cela n'arrive pas souvent.

Vous pouvez obtenir le meilleur des deux mondes pour ainsi dire. Si vous envisagez d'effectuer une optimisation des fonctions complexes dans la base de données, vous pouvez utiliser une interface pour injecter une autre implémentation du calcul. Le problème est que vous devez maintenir la logique à plusieurs endroits.

S'écarter d'un modèle architectural

Lorsque vous vous trouvez en désaccord avec la mise en œuvre pure d'un modèle ou si vous vous écartez dans un certain domaine, vous avez alors une décision à prendre. Un modèle est simplement une manière basée sur un modèle de faire des choses pour vous aider à organiser votre projet. À ce stade, prenez le temps d'évaluer :

  • Est-ce le bon modèle ? (c'est souvent le cas, mais parfois c'est juste un mauvais ajustement)
  • Dois-je dévier de cette manière ?
  • Jusqu'où ai-je dévié jusqu'à présent ?

Vous constaterez que certains modèles architecturaux conviennent bien à 80 à 90 % de votre application, mais pas tellement aux bits restants. L'écart occasionnel par rapport au modèle prescrit est utile pour des raisons de performance ou de logistique.

Cependant, si vous constatez que vos écarts cumulés représentent bien plus de 20 % de votre architecture d'application, il s'agit probablement d'un mauvais ajustement.

Si vous choisissez de continuer avec l'architecture, rendez-vous service et documentez où et pourquoi vous vous êtes écarté de la manière prescrite de faire les choses. Lorsque vous recrutez un nouveau membre enthousiaste dans votre équipe, vous pouvez l'orienter vers cette documentation qui comprend les mesures de performance et les justifications. Cela réduira la probabilité de demandes répétées pour résoudre le "problème". Cette documentation aidera également à dissuader les déviations généralisées.

La logique de manipulation des ensembles pour laquelle SQL est bon peut être intégrée à DDD sans problème.

Disons, par exemple, que j'ai besoin de connaître une valeur globale, le nombre total de produits par type. Facile à exécuter dans SQL, mais lent si je charge tous les produits en mémoire et que je les additionne tous.

J'introduis simplement un nouvel objet Domain,

et une méthode sur mon dépôt

Bien sûr, peut-être que je compte maintenant sur mon DB ayant certaines capacités. Mais techniquement, j'ai toujours la séparation et tant que la logique est simple, je peux affirmer que ce n'est pas de la « logique commerciale »

L'une des façons possibles de résoudre ce dilemme est de considérer SQL comme un langage d'assemblage : vous codez rarement, voire pas du tout, directement dedans, mais là où les performances comptent, vous devez être capable de comprendre le code produit par votre C /C++/Golang/Rust et peut-être même écrire un petit extrait en assembleur, si vous ne pouvez pas modifier le code dans votre langage de haut niveau pour produire le code machine souhaité.

De même, dans le domaine des bases de données et du SQL, diverses bibliothèques SQL (dont certaines sont ORM), par ex. SQLAlchemy et Django ORM pour Python, LINQ pour .NET, fournissent des abstractions de plus haut niveau tout en utilisant le code SQL généré dans la mesure du possible pour obtenir des performances. Ils offrent également une certaine portabilité quant à la base de données utilisée, ayant éventuellement des performances différentes, par ex. sur Postgres et MySQL, en raison de certaines opérations utilisant du SQL spécifique à la base de données plus optimal.

Et tout comme pour les langages de haut niveau, il est essentiel de comprendre le fonctionnement de SQL, même s'il s'agit simplement de réorganiser les requêtes effectuées avec les bibliothèques SQL mentionnées ci-dessus, pour pouvoir atteindre l'efficacité souhaitée.

P.S. Je préférerais faire un commentaire mais je n'ai pas une réputation suffisante pour cela.

Comme d'habitude, c'est l'une de ces choses qui dépend d'un certain nombre de facteurs. Il est vrai qu'il y a beaucoup de choses que vous pouvez faire avec SQL. Il existe également des défis liés à son utilisation et certaines limitations pratiques des bases de données relationnelles.

Comme le note Jared Goguen dans les commentaires, SQL peut être très difficile à tester et à vérifier. Les principaux facteurs qui conduisent à cela sont qu'il ne peut pas (en général) être décomposé en composants. En pratique, une requête complexe doit être considérée dans son ensemble. Un autre facteur de complication est que le comportement et l'exactitude de SQL dépendent fortement de la structure et du contenu de vos données. Cela signifie que tester tous les scénarios possibles (ou même déterminer ce qu'ils sont) est souvent infaisable ou impossible. La refactorisation de SQL et la modification de la structure de la base de données sont également problématiques.

L'autre facteur important qui a conduit à s'éloigner de SQL est que les bases de données relationnelles ont tendance à n'évoluer que verticalement. Par exemple, lorsque vous créez des calculs complexes dans SQL à exécuter dans SQL Server, ils vont s'exécuter sur la base de données. Cela signifie que tout ce travail utilise des ressources sur la base de données. Plus vous en faites en SQL, plus votre base de données aura besoin de ressources à la fois en termes de mémoire et de CPU. Il est souvent moins efficace de faire ces choses sur d'autres systèmes, mais il n'y a pas de limite pratique au nombre de machines supplémentaires que vous pouvez ajouter à une telle solution. Cette approche est moins coûteuse et plus tolérante aux pannes que la construction d'un serveur de base de données monstre.

Ces problèmes peuvent ou non s'appliquer au problème en question. Si vous êtes en mesure de résoudre votre problème avec les ressources de base de données disponibles, peut-être que SQL convient à votre espace-problème. Cependant, vous devez tenir compte de la croissance. C'est peut-être bien aujourd'hui, mais dans quelques années, le coût de l'ajout de ressources supplémentaires peut devenir un problème.

Est-ce un écueil du modèle DDD ?

Permettez-moi d'abord d'éclaircir quelques idées fausses.

DDD n'est pas un modèle. Et il ne prescrit pas vraiment de modèles.

La préface du livre DDD d'Eric Evan déclare :

Les principaux concepteurs de logiciels ont reconnu la modélisation et la conception de domaines comme des sujets critiques depuis au moins 20 ans, mais étonnamment, peu de choses ont été écrites sur ce qui doit être fait ou comment le faire. Bien qu'elle n'ait jamais été formulée clairement, une philosophie a émergé comme un courant sous-jacent dans la communauté des objets, une philosophie que j'appelle la conception dirigée par le domaine.

[. ]

Une caractéristique commune aux succès était un modèle de domaine riche qui a évolué au fil des itérations de la conception et est devenu une partie de la structure du projet.

Ce livre fournit un cadre pour prendre des décisions de conception et un vocabulaire technique pour discuter de la conception de domaine. Il s'agit d'une synthèse des meilleures pratiques largement acceptées ainsi que de mes propres idées et expériences.

C'est donc une façon d'aborder le développement de logiciels et la modélisation de domaine, ainsi qu'un vocabulaire technique qui prend en charge ces activités (un vocabulaire qui comprend divers concepts et modèles). Ce n'est pas non plus quelque chose de complètement nouveau.

Une autre chose à garder à l'esprit est qu'un modèle de domaine est ne pas l'implémentation OO de celui-ci qui peut être trouvée dans votre système - c'est juste une façon de l'exprimer, ou d'en exprimer une partie. Un modèle de domaine est la façon dont vous envisagez le problème vous essayez de résoudre avec le logiciel. C'est comment vous comprenez et percevez les choses, comment vous en parlez. C'est conceptuel. Mais pas dans un sens vague. C'est profond et raffiné, et c'est le résultat d'un travail acharné et de la collecte de connaissances. Il est encore affiné et probablement évolué au fil du temps, et il implique des considérations de mise en œuvre (dont certaines peuvent contraindre le modèle). Ça devrait être partagé par tous les membres de l'équipe (et les experts du domaine impliqués), et cela devrait déterminer la façon dont vous implémentez le système, afin que le système le reflète étroitement.

Rien à ce sujet n'est intrinsèquement pro ou anti-SQL, bien que les développeurs OO soient généralement meilleurs pour exprimer le modèle dans les langages OO, et que l'expression de nombreux concepts de domaine soit mieux prise en charge par la POO. Mais parfois, des parties du modèle doivent être exprimées dans un paradigme différent.

Ce que je me demande, c'est ce qui se passe lorsque j'ai des requêtes très complexes [. ] ?

Eh bien, de manière générale, il y a deux scénarios ici.

Dans le premier cas, certains aspects d'un domaine nécessitent vraiment une requête complexe, et cet aspect est peut-être mieux exprimé dans le paradigme SQL/relationnel - utilisez donc l'outil approprié pour le travail. Reflétez ces aspects dans votre réflexion sur le domaine et le langage utilisé pour communiquer les concepts. Si le domaine est complexe, il s'agit peut-être d'une partie d'un sous-domaine avec son propre contexte délimité.

L'autre scénario est que le besoin perçu d'exprimer quelque chose en SQL est le résultat d'une réflexion contrainte. Si une personne ou une équipe a toujours été orientée vers les bases de données dans sa réflexion, il peut lui être difficile, juste à cause de l'inertie, de voir une manière différente d'aborder les choses. Cela devient un problème lorsque l'ancienne méthode ne répond pas aux nouveaux besoins et nécessite une réflexion originale. DDD, en tant qu'approche du design, concerne en partie les moyens de sortir de cette boîte en rassemblant et en distillant les connaissances sur le domaine. Mais tout le monde semble ignorer cette partie du livre et se concentre sur certains des vocabulaires et modèles techniques répertoriés.


Lancement de la découverte en dehors d'une configuration de site

  1. Clique le Administration icône.
  2. Sur le Administration page, sous Options de découverte, clique le créer lien pour Connexions. La console de sécurité affiche le Général page de la Connexion à la découverte d'actifs panneau.
  3. Sélectionnez le nom de connexion de découverte approprié dans la liste déroulante intitulée Connexion.
  4. Cliquez sur Découvrir les actifs.

Avec les connexions de découverte nouvelles, modifiées ou réactivées, le processus de découverte doit se terminer avant que de nouveaux résultats de découverte ne soient disponibles. Il peut y avoir un léger délai avant que de nouveaux résultats n'apparaissent dans l'interface Web.

InsightVM établit la connexion et effectue la découverte. Un tableau apparaît et répertorie les informations suivantes sur chaque actif découvert.

Valeurs affichées pour les actifs découverts

Pour les appareils mobiles, le tableau comprend les éléments suivants :

  • le système d'exploitation de l'appareil mobile
  • le nom d'utilisateur du compte pour l'appareil mobile
  • la dernière fois que l'appareil s'est synchronisé avec le serveur Exchange (WinRM/PowerShell et WinRM/Office 365 uniquement)

Pour les connexions AWS, le tableau comprend les éléments suivants :

  • le nom de l'instance AWS (actif)
  • l'adresse IP de l'instance
  • l'identifiant de l'instance
  • la zone de disponibilité de l'instance, qui est un emplacement dans une région géographique qui est isolé des pannes dans d'autres zones de disponibilité et fournit une connectivité réseau à faible latence aux autres zones de disponibilité dans la même région
  • la région géographique de l'instance
  • le type d'instance, qui définit sa mémoire, son processeur, sa capacité de stockage et son coût horaire
  • le système d'exploitation de l'instance
  • l'état opérationnel de l'instance

Pour les connexions VMware, le tableau comprend les éléments suivants :

  • le nom de l'actif
  • l'adresse IP de l'actif
  • le centre de données VMware dans lequel l'actif est géré
  • l'ordinateur hôte de l'actif
  • le cluster auquel appartient l'actif
  • le chemin du pool de ressources qui prend en charge l'actif
  • le système d'exploitation de l'actif
  • l'état d'alimentation de l'actif

Pour les connexions DHCP, le tableau comprend les éléments suivants :

Après avoir effectué la découverte initiale, l'application continue de découvrir les actifs tant que la connexion de découverte reste active. La console de sécurité affiche une notification de toute connexion de découverte inactive dans la barre en haut de l'interface Web de la console de sécurité. Vous pouvez également vérifier l'état de toutes les connexions de découverte sur la page Connexions de découverte. Voir Création et gestion de connexions Dynamic Discovery .

Si vous créez une connexion de découverte mais ne lancez pas la découverte avec cette connexion, ou si vous lancez une découverte mais que la connexion devient inactive, vous verrez une icône d'avertissement dans le coin supérieur gauche de la page de l'interface Web. Survolez l'icône pour voir un message concernant les connexions inactives. Le message comprend un lien sur lequel vous pouvez cliquer pour lancer la découverte.

Une fois que InsightVM a découvert les actifs, ils apparaissent également dans le tableau Découvert par connexion sur la page Actifs. Voir Localisation et utilisation des actifs pour plus d'informations.


Créer une connexion dans une configuration de site

Seules les connexions répertoriées ci-dessous peuvent être créées dans une configuration de site.

Si vous souhaitez créer une connexion lors de la configuration d'un nouveau site, cliquez sur le bouton Créer un site bouton sur le Domicile page. OU Cliquez sur le Créer en haut de la page puis sélectionnez Site dans la liste déroulante.

Si vous souhaitez créer une connexion pour un site existant, cliquez sur ce site's Éditer icône dans le Des sites tableau sur le Domicile page.

  1. Clique le Les atouts lien dans la configuration du site .
  2. Sélectionner Connexion comme option de spécification des actifs.
  3. Cliquez sur Créer une connexion.
  4. Sélectionnez un type de connexion :
  • Exchange ActiveSync (LDAP) est destiné aux appareils mobiles gérés par un serveur Active Directory (AD).
  • Exchange ActiveSync (WinRM/PowerShell) est destiné aux appareils mobiles gérés par un serveur Exchange sur site accessible avec PowerShell.
  • Exchange ActiveSync (WinRM/Office 365) est destiné aux appareils mobiles gérés par un serveur Exchange basé sur le cloud exécutant Microsoft Office 365.
  • vmware vSphere est pour les environnements gérés par VMware vCenter ou ESX/ESXi.
  • Service DHCP concerne les actifs que les moteurs de scan découvrent en collectant les données de journal des serveurs DHCP.

Ajout d'une connexion Exchange ActiveSync (LDAP)

Les connexions ActiveSync nécessitent un dynamique site.

  1. Saisissez un nom unique pour la nouvelle connexion sur le Nouvelle connexion languette.
  2. Entrez le nom du serveur Active Directory (AD) auquel la console de sécurité se connectera.
  3. Sélectionnez un protocole dans la liste déroulante. LDAPS, qui est LDAP sur SSL, est l'option la plus sécurisée et est recommandé s'il est activé sur votre serveur AD.
  4. Entrez un nom d'utilisateur et un mot de passe pour un membre du Gestion de l'organisation Groupe de sécurité dans Microsoft Exchange. Ce compte permettra à la console de sécurité de découvrir les appareils mobiles connectés au serveur AD. Noter: Une fois que vous avez enregistré les informations d'identification dans ce paramètre, les modifications ne prendront effet qu'après le redémarrage d'InsightVM.
  5. Cliquez sur sauver. La connexion apparaît dans le Connexion liste déroulante, que vous pouvez consulter en cliquant sur Sélectionnez Connexion.
  6. Continuez avec Lancement de la découverte dynamique.

Ajout d'une connexion Exchange ActiveSync (WinRM/PowerShell ou WinRM/Office 365)

Les connexions ActiveSync nécessitent un dynamique site.

  1. Saisissez un nom unique pour la nouvelle connexion sur le Nouvelle connexion languette.
  2. Entrez le nom du serveur de passerelle WinRM auquel la console de sécurité se connectera.
  3. Entrez un nom d'utilisateur et un mot de passe pour un compte disposant des autorisations WinRM pour le serveur de passerelle.
  4. Entrez le nom de domaine complet du serveur Exchange qui gère les informations de l'appareil mobile.
  5. Saisissez un nom d'utilisateur et un mot de passe pour un compte d'administrateur ou un compte d'utilisateur doté d'un rôle de gestion organisationnelle en lecture seule ou supérieur du Gestion de l'organisation Groupe de sécurité dans Microsoft Exchange.
  6. Cliquez sur sauver. La connexion apparaît dans le Connexion liste déroulante, que vous pouvez consulter en cliquant sur Sélectionnez Connexion.
  7. Continuez avec Lancement de la découverte dynamique.

Ajout d'une connexion VMware vSphere (configuration du site)

Les connexions VMware vSphere nécessitent un dynamique site.

  1. Saisissez un nom unique pour la nouvelle connexion sur le Nouvelle connexion languette.
  2. Entrez un nom de domaine complet pour le serveur que la console de sécurité contactera afin de découvrir les actifs.
  3. Saisissez un numéro de port et sélectionnez le protocole de connexion.
  4. Saisissez un nom d'utilisateur et un mot de passe avec lesquels la console de sécurité se connectera au serveur. Assurez-vous que le compte a accès à toute machine virtuelle que vous souhaitez découvrir.
  5. Cliquez sur sauver. La connexion apparaît dans le Connexion liste déroulante, que vous pouvez consulter en cliquant sur Sélectionnez la connexion.
  6. Continuer avec le lancement de la découverte dynamique

Ajout d'une connexion DHCP-Directory Watcher (configuration du site)

Les connexions DHCP nécessitent un dynamique site.

  1. Saisissez un nom unique pour la nouvelle connexion.
  2. Sélectionnez un type de source d'événement.
  3. Sélectionnez le Observateur d'annuaire méthode de collecte.
  4. Entrez un chemin réseau vers le dossier contenant les journaux du serveur DHCP à interroger. Utiliser le format //serveur/chemin/vers/dossier. Le serveur peut être un nom d'hôte ou une adresse IP.
  5. Sélectionnez le moteur de scan qui collectera les informations du journal du serveur DHCP.
  6. Saisissez le nom d'utilisateur administratif et le mot de passe pour accéder au serveur DHCP.
  7. Cliquez sur sauver. La connexion apparaît dans le Connexion liste déroulante, que vous pouvez consulter en cliquant sur Sélectionnez la connexion.
  8. Continuez avec Lancement de la découverte dynamique.

Ajout d'une connexion DHCP-Syslog (configuration du site)

Les connexions DHCP nécessitent un dynamique site.

Syslog est la seule méthode de collecte disponible pour la source d'événement Infoblox Trinzic.


Contenu

Formellement, une "base de données" fait référence à un ensemble de données connexes et à la façon dont elles sont organisées. L'accès à ces données est généralement fourni par un "système de gestion de base de données" (SGBD) constitué d'un ensemble intégré de logiciels informatiques qui permet aux utilisateurs d'interagir avec une ou plusieurs bases de données et donne accès à toutes les données contenues dans la base de données (bien que des restrictions peuvent exister qui limitent l'accès à des données particulières). Le SGBD fournit diverses fonctions qui permettent la saisie, le stockage et la récupération de grandes quantités d'informations et fournit des moyens de gérer la façon dont ces informations sont organisées.

En raison de la relation étroite entre eux, le terme "base de données" est souvent utilisé avec désinvolture pour désigner à la fois une base de données et le SGBD utilisé pour la manipuler.

En dehors du monde des technologies de l'information professionnelles, le terme base de données est souvent utilisé pour désigner toute collection de données connexes (telles qu'une feuille de calcul ou un index de fiches) car les exigences de taille et d'utilisation nécessitent généralement l'utilisation d'un système de gestion de base de données. [1]

Les SGBD existants offrent diverses fonctions qui permettent de gérer une base de données et ses données qui peuvent être classées en quatre groupes fonctionnels principaux :

  • Définition des données – Création, modification et suppression des définitions qui définissent l'organisation des données.
  • Mettre à jour – Insertion, modification et suppression des données réelles. [2]
  • Récupération – Fournir des informations sous une forme directement utilisable ou pour un traitement ultérieur par d'autres applications. Les données récupérées peuvent être rendues disponibles sous une forme fondamentalement la même que celle stockée dans la base de données ou sous une nouvelle forme obtenue en modifiant ou en combinant des données existantes de la base de données. [3]
  • Administration – Enregistrement et surveillance des utilisateurs, application de la sécurité des données, surveillance des performances, maintien de l'intégrité des données, gestion du contrôle de la simultanéité et récupération des informations qui ont été corrompues par un événement tel qu'une défaillance inattendue du système. [4]

Une base de données et son SGBD sont conformes aux principes d'un modèle de base de données particulier. [5] « Système de base de données » désigne collectivement le modèle de base de données, le système de gestion de base de données et la base de données. [6]

Physiquement, les serveurs de base de données sont des ordinateurs dédiés qui contiennent les bases de données réelles et exécutent uniquement le SGBD et les logiciels associés. Les serveurs de base de données sont généralement des ordinateurs multiprocesseurs, avec une mémoire généreuse et des baies de disques RAID utilisées pour un stockage stable. Les accélérateurs matériels de bases de données, connectés à un ou plusieurs serveurs via un canal haut débit, sont également utilisés dans les environnements de traitement de transactions à grand volume. Les SGBD se trouvent au cœur de la plupart des applications de bases de données. Les SGBD peuvent être construits autour d'un noyau multitâche personnalisé avec prise en charge réseau intégrée, mais les SGBD modernes reposent généralement sur un système d'exploitation standard pour fournir ces fonctions. [ citation requise ]

Étant donné que les SGBD constituent un marché important, les fournisseurs d'ordinateurs et de stockage prennent souvent en compte les exigences des SGBD dans leurs propres plans de développement. [7]

Les bases de données et les SGBD peuvent être classés selon le(s) modèle(s) de base de données qu'ils prennent en charge (tels que relationnel ou XML), le(s) type(s) d'ordinateur sur lequel ils s'exécutent (d'un cluster de serveurs à un téléphone mobile), le langage de requête ( s) utilisées pour accéder à la base de données (telle que SQL ou XQuery) et leur ingénierie interne, qui affecte les performances, l'évolutivité, la résilience et la sécurité.

La taille, les capacités et les performances des bases de données et de leurs SGBD respectifs ont augmenté en plusieurs ordres de grandeur. Ces augmentations de performances ont été rendues possibles par les progrès technologiques dans les domaines des processeurs, de la mémoire informatique, du stockage informatique et des réseaux informatiques. Le concept de base de données a été rendu possible par l'émergence de supports de stockage à accès direct tels que les disques magnétiques, qui sont devenus largement disponibles au milieu des années 1960. Les systèmes antérieurs reposaient sur le stockage séquentiel des données sur bande magnétique. Le développement ultérieur de la technologie des bases de données peut être divisé en trois ères basées sur le modèle ou la structure des données : navigationnelle, [8] SQL/relationnelle et post-relationnelle.

Les deux premiers modèles de données de navigation principaux étaient le modèle hiérarchique et le modèle CODASYL (modèle de réseau). Celles-ci étaient caractérisées par l'utilisation de pointeurs (souvent des adresses de disques physiques) pour suivre les relations d'un enregistrement à l'autre.

Le modèle relationnel, proposé pour la première fois en 1970 par Edgar F. Codd, s'écarte de cette tradition en insistant sur le fait que les applications doivent rechercher des données par contenu, plutôt qu'en suivant des liens. Le modèle relationnel utilise des ensembles de tables de style grand livre, chacune utilisée pour un type d'entité différent. Ce n'est qu'au milieu des années 80 que le matériel informatique est devenu suffisamment puissant pour permettre le déploiement à grande échelle de systèmes relationnels (SGBD plus applications). Au début des années 1990, cependant, les systèmes relationnels dominaient dans toutes les applications de traitement de données à grande échelle, et à partir de 2018 [mise à jour], ils restent dominants : IBM DB2, Oracle, MySQL et Microsoft SQL Server sont les SGBD les plus recherchés. [9] Le langage de base de données dominant, le SQL standardisé pour le modèle relationnel, a influencé les langages de base de données pour d'autres modèles de données. [ citation requise ]

Les bases de données d'objets ont été développées dans les années 1980 pour surmonter l'inconvénient de la non-concordance d'impédance objet-relationnelle, ce qui a conduit à l'invention du terme « post-relationnel » ainsi qu'au développement de bases de données hybrides objet-relationnelles.

La prochaine génération de bases de données post-relationnelles à la fin des années 2000 est devenue connue sous le nom de bases de données NoSQL, introduisant des magasins de clés-valeurs rapides et des bases de données orientées document. Une "nouvelle génération" concurrente connue sous le nom de bases de données NewSQL a tenté de nouvelles implémentations qui ont conservé le modèle relationnel/SQL tout en visant à égaler les performances élevées de NoSQL par rapport aux SGBD relationnels disponibles dans le commerce.

Années 1960, SGBD de navigation

L'introduction du terme base de données a coïncidé avec la disponibilité du stockage à accès direct (disques et tambours) à partir du milieu des années 1960. Le terme représentait un contraste avec les systèmes à bande du passé, permettant une utilisation interactive partagée plutôt qu'un traitement par lots quotidien. L'Oxford English Dictionary cite un rapport de 1962 de la System Development Corporation of California comme le premier à utiliser le terme « base de données » dans un sens technique spécifique. [dix]

Au fur et à mesure que la vitesse et la capacité des ordinateurs augmentaient, un certain nombre de systèmes de bases de données à usage général ont émergé au milieu des années 1960 et un certain nombre de ces systèmes étaient devenus commerciaux. L'intérêt pour une norme a commencé à grandir et Charles Bachman, auteur d'un de ces produits, l'Integrated Data Store (IDS), a fondé le Database Task Group au sein de CODASYL, le groupe responsable de la création et de la normalisation de COBOL. En 1971, le groupe de travail sur les bases de données a présenté sa norme, qui est généralement connue sous le nom de Approche CODASYL, et bientôt un certain nombre de produits commerciaux basés sur cette approche sont entrés sur le marché.

L'approche CODASYL a offert aux applications la possibilité de naviguer autour d'un ensemble de données liées qui a été formé en un grand réseau. Les applications peuvent trouver des enregistrements par l'une des trois méthodes suivantes :

  1. Utilisation d'une clé primaire (appelée clé CALC, généralement implémentée par hachage)
  2. Les relations de navigation (appelées ensembles) d'un enregistrement à l'autre
  3. Analyser tous les enregistrements dans un ordre séquentiel

Les systèmes ultérieurs ont ajouté des arbres B pour fournir des chemins d'accès alternatifs. De nombreuses bases de données CODASYL ont également ajouté un langage de requête déclaratif pour les utilisateurs finaux (par opposition à l'API de navigation). Cependant, les bases de données CODASYL étaient complexes et nécessitaient une formation et des efforts importants pour produire des applications utiles.

IBM avait également son propre SGBD en 1966, connu sous le nom de Système de gestion de l'information (IMS). IMS était un développement de logiciel écrit pour le programme Apollo sur le System/360. IMS était généralement similaire dans son concept à CODASYL, mais utilisait une hiérarchie stricte pour son modèle de navigation de données au lieu du modèle de réseau de CODASYL. Les deux concepts sont devenus plus tard connus sous le nom de bases de données de navigation en raison de la manière dont les données étaient accessibles : le terme a été popularisé par la présentation du prix Turing de Bachman en 1973. Le programmeur comme navigateur. IMS est classé par IBM comme une base de données hiérarchique. IDMS et la base de données TOTAL de Cincom Systems sont classées comme bases de données réseau. IMS reste en service à partir de 2014 [mise à jour] . [11]

Années 1970, SGBD relationnel

Edgar F. Codd a travaillé chez IBM à San Jose, en Californie, dans l'un de leurs bureaux annexes qui était principalement impliqué dans le développement de systèmes de disque dur. Il n'était pas satisfait du modèle de navigation de l'approche CODASYL, notamment l'absence d'un dispositif de « recherche ». En 1970, il a écrit un certain nombre d'articles décrivant une nouvelle approche de la construction de bases de données qui a finalement abouti à la Un modèle relationnel de données pour les grandes banques de données partagées. [12]

Dans cet article, il a décrit un nouveau système de stockage et de travail avec de grandes bases de données. Au lieu que les enregistrements soient stockés dans une sorte de liste chaînée d'enregistrements de forme libre comme dans CODASYL, l'idée de Codd était d'organiser les données en un certain nombre de « tables », chaque table étant utilisée pour un type d'entité différent. Chaque table contiendrait un nombre fixe de colonnes contenant les attributs de l'entité. Une ou plusieurs colonnes de chaque table ont été désignées comme clé primaire par laquelle les lignes de la table pourraient être identifiées de manière unique. , en utilisant un ensemble d'opérations basées sur le système mathématique du calcul relationnel (d'où le modèle tire son nom). Diviser les données en un ensemble de tables normalisées (ou rapports) visait à garantir que chaque "fait" n'était stocké qu'une seule fois, simplifiant ainsi les opérations de mise à jour. Tables virtuelles appelées vues pourrait présenter les données de différentes manières pour différents utilisateurs, mais les vues ne pouvaient pas être directement mises à jour.

Codd a utilisé des termes mathématiques pour définir le modèle : des relations, des tuples et des domaines plutôt que des tables, des lignes et des colonnes. La terminologie qui est maintenant familière provient des premières implémentations. Codd critiquera plus tard la tendance des implémentations pratiques à s'écarter des fondements mathématiques sur lesquels le modèle était basé.

L'utilisation de clés primaires (identifiants orientés utilisateur) pour représenter les relations entre les tables, plutôt que les adresses de disque, avait deux motivations principales. Du point de vue de l'ingénierie, il a permis de déplacer et de redimensionner les tables sans réorganisation coûteuse de la base de données. Mais Codd s'intéressait davantage à la différence de sémantique : l'utilisation d'identifiants explicites facilitait la définition des opérations de mise à jour avec des définitions mathématiques claires, et permettait également de définir les opérations de requête en fonction de la discipline établie du calcul des prédicats du premier ordre, car ces opérations ont des propriétés mathématiques propres, il devient possible de réécrire les requêtes de manière prouvée correcte, ce qui est la base de l'optimisation des requêtes. Il n'y a pas de perte d'expressivité par rapport aux modèles hiérarchiques ou en réseau, bien que les connexions entre les tables ne soient plus aussi explicites.

Dans les modèles hiérarchiques et en réseau, les enregistrements pouvaient avoir une structure interne complexe. Par exemple, l'historique des salaires d'un employé peut être représenté comme un « groupe répétitif » dans l'enregistrement de l'employé. Dans le modèle relationnel, le processus de normalisation a conduit à ce que ces structures internes soient remplacées par des données contenues dans plusieurs tables, connectées uniquement par des clés logiques.

Par exemple, une utilisation courante d'un système de base de données consiste à suivre les informations sur les utilisateurs, leur nom, leurs informations de connexion, diverses adresses et numéros de téléphone. Dans l'approche de navigation, toutes ces données seraient placées dans un seul enregistrement de longueur variable. Dans l'approche relationnelle, les données seraient normalisé dans une table d'utilisateurs, une table d'adresses et une table de numéros de téléphone (par exemple). Les enregistrements ne seraient créés dans ces tables facultatives que si l'adresse ou les numéros de téléphone étaient effectivement fournis.

En plus d'identifier les lignes/enregistrements à l'aide d'identifiants logiques plutôt que d'adresses de disque, Codd a changé la façon dont les applications assemblaient les données à partir de plusieurs enregistrements. Plutôt que d'exiger des applications qu'elles collectent les données un enregistrement à la fois en parcourant les liens, elles utiliseraient un langage de requête déclaratif qui exprimait les données requises, plutôt que le chemin d'accès par lequel elles devraient être trouvées. Trouver un chemin d'accès efficace aux données est devenu la responsabilité du système de gestion de base de données, plutôt que le programmeur de l'application. Ce processus, appelé optimisation des requêtes, reposait sur le fait que les requêtes étaient exprimées en termes de logique mathématique.

Le papier de Codd a été récupéré par deux personnes à Berkeley, Eugene Wong et Michael Stonebraker. Ils ont lancé un projet connu sous le nom d'INGRES en utilisant des fonds qui avaient déjà été alloués pour un projet de base de données géographique et des étudiants programmeurs pour produire du code. À partir de 1973, INGRES a livré ses premiers produits de test qui étaient généralement prêts pour une utilisation généralisée en 1979. INGRES était similaire au Système R à plusieurs égards, y compris l'utilisation d'un "langage" pour l'accès aux données, connu sous le nom de QUEL. Au fil du temps, INGRES est passé au nouveau standard SQL.

IBM a lui-même effectué une implémentation de test du modèle relationnel, PRTV, et une version de production, Business System 12, toutes deux abandonnées. Honeywell a écrit MRDS pour Multics, et il y a maintenant deux nouvelles implémentations : Alphora Dataphor et Rel. La plupart des autres implémentations de SGBD généralement appelées relationnel sont en fait des SGBD SQL.

En 1970, l'Université du Michigan a commencé le développement du système de gestion de l'information MICRO [13] basé sur D.L. Modèle de données de la théorie des ensembles de Childs. [14] [15] [16] MICRO a été utilisé pour gérer de très grands ensembles de données par le Département américain du Travail, l'Agence de protection de l'environnement des États-Unis et des chercheurs de l'Université de l'Alberta, de l'Université du Michigan et de la Wayne State University. Il fonctionnait sur des ordinateurs centraux IBM utilisant le Michigan Terminal System. [17] Le système est resté en production jusqu'en 1998.

Approche intégrée

Dans les années 1970 et 1980, des tentatives ont été faites pour créer des systèmes de bases de données avec du matériel et des logiciels intégrés. La philosophie sous-jacente était qu'une telle intégration offrirait des performances plus élevées à un coût inférieur. Les exemples étaient IBM System/38, la première offre de Teradata, et la machine de base de données Britton Lee, Inc..

Une autre approche de la prise en charge matérielle de la gestion des bases de données était l'accélérateur CAFS d'ICL, un contrôleur de disque matériel doté de capacités de recherche programmables.À long terme, ces efforts ont généralement été infructueux parce que les machines spécialisées dans les bases de données ne pouvaient pas suivre le développement et les progrès rapides des ordinateurs à usage général. Ainsi, la plupart des systèmes de bases de données sont aujourd'hui des systèmes logiciels fonctionnant sur du matériel à usage général, utilisant le stockage de données informatiques à usage général. Cependant, cette idée est toujours poursuivie pour certaines applications par certaines sociétés comme Netezza et Oracle (Exadata).

Fin des années 1970, SGBD SQL

IBM a commencé à travailler sur un système prototype vaguement basé sur les concepts de Codd comme Système R au début des années 1970. La première version était prête en 1974/5, et les travaux ont alors commencé sur des systèmes multi-tables dans lesquels les données pouvaient être fractionnées afin que toutes les données d'un enregistrement (dont certaines sont facultatives) n'aient pas à être stockées dans un seul gros "morceau". Les versions multi-utilisateurs suivantes ont été testées par les clients en 1978 et 1979, date à laquelle un langage de requête standardisé - SQL [ citation requise ] – avait été ajouté. Les idées de Codd s'affirmaient à la fois comme réalisables et supérieures à CODASYL, poussant IBM à développer une véritable version de production du System R, connue sous le nom de SQL/DS, et ensuite, Base de données 2 (DB2).

La base de données Oracle de Larry Ellison (ou plus simplement Oracle) a commencé à partir d'une chaîne différente, basée sur les documents d'IBM sur System R. Bien que les implémentations d'Oracle V1 aient été achevées en 1978, ce n'est qu'avec la version 2 d'Oracle qu'Ellison a battu IBM sur le marché en 1979. [18]

Stonebraker a ensuite appliqué les leçons d'INGRES pour développer une nouvelle base de données, Postgres, désormais connue sous le nom de PostgreSQL. PostgreSQL est souvent utilisé pour les applications stratégiques mondiales (les registres de noms de domaine .org et .info l'utilisent comme magasin de données principal, comme le font de nombreuses grandes entreprises et institutions financières).

En Suède, l'article de Codd a également été lu et Mimer SQL a été développé à partir du milieu des années 1970 à l'Université d'Uppsala. En 1984, ce projet a été consolidé en une entreprise indépendante.

Un autre modèle de données, le modèle entité-relation, est apparu en 1976 et a gagné en popularité pour la conception de bases de données car il mettait l'accent sur une description plus familière que le modèle relationnel précédent. Plus tard, les constructions entité-relation ont été réaménagées en tant que construction de modélisation de données pour le modèle relationnel, et la différence entre les deux est devenue non pertinente. [ citation requise ]

Années 1980, sur le bureau

Les années 1980 ont inauguré l'ère de l'informatique de bureau. Les nouveaux ordinateurs ont permis à leurs utilisateurs de disposer de feuilles de calcul comme Lotus 1-2-3 et de logiciels de base de données comme dBASE. Le produit dBASE était léger et facile à comprendre pour tout utilisateur d'ordinateur. C. Wayne Ratliff, le créateur de dBASE, a déclaré : « dBASE était différent des programmes comme BASIC, C, FORTRAN et COBOL en ce sens qu'une grande partie du sale boulot avait déjà été effectuée. La manipulation des données est effectuée par dBASE au lieu de par l'utilisateur, afin que l'utilisateur puisse se concentrer sur ce qu'il fait, plutôt que d'avoir à s'occuper des détails sales de l'ouverture, de la lecture et de la fermeture des fichiers, et de la gestion de l'allocation d'espace." [19] dBASE était l'un des logiciels les plus vendus dans les années 1980 et au début des années 1990.

Années 90, orienté objet

Les années 1990, parallèlement à l'essor de la programmation orientée objet, ont vu une augmentation de la manière dont les données dans diverses bases de données étaient gérées. Les programmeurs et les concepteurs ont commencé à traiter les données de leurs bases de données comme des objets. C'est-à-dire que si les données d'une personne se trouvaient dans une base de données, les attributs de cette personne, tels que son adresse, son numéro de téléphone et son âge, étaient désormais considérés comme appartenant à cette personne au lieu d'être des données étrangères. Cela permet aux relations entre les données d'être des relations avec des objets et leurs attributs et non avec des champs individuels. [20] Le terme "désaccord d'impédance objet-relationnel" a décrit l'inconvénient de traduire entre les objets programmés et les tables de base de données. Les bases de données objet et les bases de données objet-relationnelles tentent de résoudre ce problème en fournissant un langage orienté objet (parfois en tant qu'extensions de SQL) que les programmeurs peuvent utiliser comme alternative au SQL purement relationnel. Du côté de la programmation, des bibliothèques connues sous le nom de mappages objet-relationnel (ORM) tentent de résoudre le même problème.

Années 2000, NoSQL et NewSQL

Les bases de données XML sont un type de base de données structurée orientée document qui permet des requêtes basées sur des attributs de document XML. Les bases de données XML sont principalement utilisées dans des applications où les données sont commodément considérées comme une collection de documents, avec une structure qui peut varier du très flexible au très rigide : les exemples incluent les articles scientifiques, les brevets, les déclarations fiscales et les dossiers du personnel.

Les bases de données NoSQL sont souvent très rapides, ne nécessitent pas de schémas de table fixes, évitent les opérations de jointure en stockant des données dénormalisées et sont conçues pour évoluer horizontalement.

Ces dernières années, il y a eu une forte demande pour des bases de données massivement distribuées avec une tolérance de partition élevée, mais selon le théorème CAP, il est impossible pour un système distribué de fournir simultanément des garanties de cohérence, de disponibilité et de tolérance de partition. Un système distribué peut satisfaire deux de ces garanties en même temps, mais pas les trois. Pour cette raison, de nombreuses bases de données NoSQL utilisent ce que l'on appelle la cohérence à terme pour fournir à la fois des garanties de disponibilité et de tolérance de partition avec un niveau réduit de cohérence des données.

NewSQL est une classe de bases de données relationnelles modernes qui vise à fournir les mêmes performances évolutives que les systèmes NoSQL pour les charges de travail de traitement des transactions en ligne (lecture-écriture) tout en utilisant SQL et en maintenant les garanties ACID d'un système de base de données traditionnel.

Les bases de données sont utilisées pour soutenir les opérations internes des organisations et pour étayer les interactions en ligne avec les clients et les fournisseurs (voir Logiciels d'entreprise).

Les bases de données sont utilisées pour contenir des informations administratives et des données plus spécialisées, telles que des données d'ingénierie ou des modèles économiques. Les exemples incluent les systèmes de bibliothèque informatisés, les systèmes de réservation de vols, les systèmes informatisés d'inventaire de pièces et de nombreux systèmes de gestion de contenu qui stockent les sites Web sous forme de collections de pages Web dans une base de données.

Une façon de classer les bases de données implique le type de leur contenu, par exemple : objets bibliographiques, document-texte, statistiques ou multimédias. Une autre façon est par leur domaine d'application, par exemple : comptabilité, compositions musicales, films, banque, fabrication ou assurance. Une troisième voie consiste en un aspect technique, tel que la structure de la base de données ou le type d'interface. Cette section répertorie quelques-uns des adjectifs utilisés pour caractériser différents types de bases de données.

  • Une base de données en mémoire est une base de données qui réside principalement dans la mémoire principale, mais qui est généralement sauvegardée par un stockage de données informatiques non volatile. Les bases de données de la mémoire principale sont plus rapides que les bases de données sur disque et sont donc souvent utilisées lorsque le temps de réponse est critique, comme dans les équipements de réseau de télécommunications.
  • Une base de données active comprend une architecture événementielle qui peut répondre aux conditions à la fois à l'intérieur et à l'extérieur de la base de données. Les utilisations possibles incluent la surveillance de la sécurité, les alertes, la collecte de statistiques et l'autorisation. De nombreuses bases de données fournissent des fonctionnalités de base de données actives sous la forme de déclencheurs de base de données.
  • Une base de données cloud repose sur la technologie cloud. La base de données et la plupart de ses SGBD résident à distance, "dans le cloud", tandis que ses applications sont à la fois développées par des programmeurs et ensuite maintenues et utilisées par les utilisateurs finaux via un navigateur Web et des API ouvertes. archiver des données à partir de bases de données opérationnelles et souvent de sources externes telles que des sociétés d'études de marché. L'entrepôt devient la source centrale de données à l'usage des gestionnaires et autres utilisateurs finaux qui peuvent ne pas avoir accès aux données opérationnelles. Par exemple, les données de vente peuvent être agrégées en totaux hebdomadaires et converties à partir des codes produits internes pour utiliser les codes UPC afin qu'elles puissent être comparées aux données ACNielsen. Certains composants de base et essentiels de l'entreposage de données incluent l'extraction, l'analyse et l'exploration de données, la transformation, le chargement et la gestion des données afin de les rendre disponibles pour une utilisation ultérieure.
  • Une base de données déductive combine une programmation logique avec une base de données relationnelle.
  • Une base de données distribuée est une base de données dans laquelle les données et le SGBD s'étendent sur plusieurs ordinateurs.
  • Une base de données orientée document est conçue pour stocker, récupérer et gérer des informations orientées document ou semi-structurées. Les bases de données orientées document sont l'une des principales catégories de bases de données NoSQL.
  • Un système de base de données intégré est un SGBD étroitement intégré à un logiciel d'application qui nécessite l'accès aux données stockées de manière à ce que le SGBD soit caché aux utilisateurs finaux de l'application et nécessite peu ou pas de maintenance continue. [21]
  • Les bases de données d'utilisateurs finaux sont constituées de données développées par des utilisateurs finaux individuels. Des exemples en sont des collections de documents, de feuilles de calcul, de présentations, de fichiers multimédias et d'autres fichiers. Plusieurs produits existent pour prendre en charge de telles bases de données. Certains d'entre eux sont beaucoup plus simples que les SGBD à part entière, avec des fonctionnalités de SGBD plus élémentaires.
  • Un système de base de données fédéré comprend plusieurs bases de données distinctes, chacune avec son propre SGBD. Il est géré comme une base de données unique par un système de gestion de base de données fédéré (FDBMS), qui intègre de manière transparente plusieurs SGBD autonomes, éventuellement de types différents (auquel cas il s'agirait également d'un système de base de données hétérogène), et leur fournit une vue conceptuelle intégrée .
  • Parfois le terme multi-base de données est utilisé comme synonyme de base de données fédérée, bien qu'il puisse faire référence à un groupe de bases de données moins intégré (par exemple, sans FDBMS et sans schéma intégré géré) qui coopèrent dans une seule application. Dans ce cas, un middleware est généralement utilisé pour la distribution, qui comprend généralement un protocole de validation atomique (ACP), par exemple, le protocole de validation en deux phases, pour permettre des transactions distribuées (globales) entre les bases de données participantes.
  • Une base de données de graphes est une sorte de base de données NoSQL qui utilise des structures de graphes avec des nœuds, des arêtes et des propriétés pour représenter et stocker des informations. Les bases de données de graphes générales qui peuvent stocker n'importe quel graphe sont distinctes des bases de données de graphes spécialisées telles que les triplestores et les bases de données réseau.
  • Un SGBD de type tableau est une sorte de SGBD NoSQL qui permet la modélisation, le stockage et la récupération de tableaux multidimensionnels (généralement volumineux) tels que des images satellites et des sorties de simulation climatique.
  • Dans une base de données hypertexte ou hypermédia, n'importe quel mot ou morceau de texte représentant un objet, par exemple un autre morceau de texte, un article, une image ou un film, peut être lié à cet objet. Les bases de données hypertextes sont particulièrement utiles pour organiser de grandes quantités d'informations disparates. Par exemple, ils sont utiles pour organiser des encyclopédies en ligne, où les utilisateurs peuvent facilement parcourir le texte. Le World Wide Web est donc une grande base de données hypertexte distribuée.
  • Une base de connaissances (en abrégé Ko, ko ou Δ [22][23] ) est un type spécial de base de données pour la gestion des connaissances, fournissant les moyens de la collecte, de l'organisation et de la récupération informatisées des connaissances. Également une collection de données représentant les problèmes avec leurs solutions et les expériences associées.
  • Une base de données mobile peut être transportée ou synchronisée à partir d'un dispositif informatique mobile. stocker des données détaillées sur les opérations d'une organisation. Ils traitent généralement des volumes relativement élevés de mises à jour à l'aide de transactions. Les exemples incluent les bases de données clients qui enregistrent les informations de contact, de crédit et démographiques sur les clients d'une entreprise, les bases de données du personnel qui contiennent des informations telles que le salaire, les avantages, les données de compétences sur les employés, les systèmes de planification des ressources d'entreprise qui enregistrent des détails sur les composants du produit, l'inventaire des pièces et les données financières. bases de données qui gardent une trace de l'argent, de la comptabilité et des transactions financières de l'organisation.
  • Une base de données parallèle cherche à améliorer les performances grâce à la parallélisation pour des tâches telles que le chargement de données, la création d'index et l'évaluation de requêtes.
  • Architecture de mémoire partagée, où plusieurs processeurs partagent l'espace mémoire principal, ainsi que d'autres stockages de données.
  • Architecture de disque partagé, où chaque unité de traitement (généralement constituée de plusieurs processeurs) possède sa propre mémoire principale, mais toutes les unités partagent l'autre stockage.
  • Architecture sans partage, où chaque unité de traitement a sa propre mémoire principale et un autre stockage.
    utiliser la logique floue pour tirer des conclusions à partir de données imprécises. traiter les transactions assez rapidement pour que le résultat revienne et soit immédiatement appliqué.
  • Une base de données spatiale peut stocker les données avec des caractéristiques multidimensionnelles. Les requêtes sur ces données incluent des requêtes basées sur la localisation, telles que "Où se trouve l'hôtel le plus proche dans ma région ?".
  • Une base de données temporelle a des aspects temporels intégrés, par exemple un modèle de données temporel et une version temporelle de SQL. Plus spécifiquement, les aspects temporels incluent généralement le temps de validité et le temps de transaction.
  • Une base de données orientée vers la terminologie s'appuie sur une base de données orientée objet, souvent personnalisée pour un domaine spécifique.
  • Une base de données de données non structurées est destinée à stocker de manière gérable et protégée divers objets qui ne s'intègrent pas naturellement et commodément dans des bases de données communes. Il peut s'agir de messages électroniques, de documents, de journaux, d'objets multimédias, etc. Le nom peut être trompeur car certains objets peuvent être très structurés. Cependant, toute la collection d'objets possible ne rentre pas dans un cadre structuré prédéfini. La plupart des SGBD établis prennent désormais en charge les données non structurées de diverses manières, et de nouveaux SGBD dédiés font leur apparition.

Connolly et Begg définissent le système de gestion de base de données (SGBD) comme un « système logiciel qui permet aux utilisateurs de définir, créer, maintenir et contrôler l'accès à la base de données ». [24] Les exemples de SGBD incluent MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database et Microsoft Access.

L'acronyme SGBD est parfois étendu pour indiquer le modèle de base de données sous-jacent, avec RDBMS pour le relationnel, OODBMS pour l'objet (orienté) et ORDBMS pour le modèle objet-relationnel. D'autres extensions peuvent indiquer d'autres caractéristiques, telles que le SGBD pour un système de gestion de base de données distribué.

Les fonctionnalités fournies par un SGBD peuvent varier énormément. La fonctionnalité principale est le stockage, la récupération et la mise à jour des données. Codd a proposé les fonctions et services suivants qu'un SGBD à usage général à part entière devrait fournir : [25]

  • Stockage, récupération et mise à jour des données
  • Catalogue ou dictionnaire de données accessible par l'utilisateur décrivant les métadonnées
  • Prise en charge des transactions et de la simultanéité
  • Facilités pour récupérer la base de données en cas d'endommagement
  • Prise en charge de l'autorisation d'accès et de la mise à jour des données
  • Accéder à l'assistance depuis des sites distants
  • Appliquer des contraintes pour garantir que les données de la base de données respectent certaines règles

On peut également généralement s'attendre à ce que le SGBD fournisse un ensemble d'utilitaires à des fins qui peuvent être nécessaires pour administrer efficacement la base de données, y compris des utilitaires d'importation, d'exportation, de surveillance, de défragmentation et d'analyse. [26] La partie centrale du SGBD interagissant entre la base de données et l'interface d'application parfois appelée moteur de base de données.

Souvent, les SGBD ont des paramètres de configuration qui peuvent être réglés de manière statique et dynamique, par exemple la quantité maximale de mémoire principale sur un serveur que la base de données peut utiliser. La tendance est de minimiser la quantité de configuration manuelle, et pour les cas tels que les bases de données intégrées, la nécessité de cibler l'administration zéro est primordiale.

Les grands SGBD des grandes entreprises ont eu tendance à augmenter en taille et en fonctionnalités et peuvent avoir nécessité des milliers d'années humaines d'efforts de développement tout au long de leur durée de vie. [une]

Les premiers SGBD multi-utilisateurs n'autorisaient généralement que l'application à résider sur le même ordinateur avec un accès via des terminaux ou un logiciel d'émulation de terminal. L'architecture client-serveur était un développement où l'application résidait sur un poste client et la base de données sur un serveur permettant de répartir le traitement. Cela a évolué vers une architecture multiniveau incorporant des serveurs d'applications et des serveurs Web avec l'interface utilisateur final via un navigateur Web avec la base de données uniquement directement connectée au niveau adjacent. [27]

Un SGBD à usage général fournira des interfaces de programmation d'applications publiques (API) et éventuellement un processeur pour les langages de base de données tels que SQL pour permettre aux applications d'être écrites pour interagir avec la base de données. Un SGBD à usage spécial peut utiliser une API privée et être spécifiquement personnalisé et lié à une seule application. Par exemple, un système de messagerie exécutant de nombreuses fonctions d'un SGBD à usage général telles que l'insertion de messages, la suppression de messages, la gestion des pièces jointes, la recherche de listes de blocage, l'association de messages à une adresse e-mail, etc., mais ces fonctions sont limitées à ce qui est nécessaire pour gérer e-mail.

L'interaction externe avec la base de données se fera via un programme d'application qui s'interface avec le SGBD. [28] Cela peut aller d'un outil de base de données qui permet aux utilisateurs d'exécuter des requêtes SQL de manière textuelle ou graphique, à un site Web qui utilise une base de données pour stocker et rechercher des informations.

Interface du programme d'application

Un programmeur codera les interactions avec la base de données (parfois appelée source de données) via une interface de programme d'application (API) ou via un langage de base de données. L'API ou le langage particulier choisi devra être pris en charge par le SGBD, possible indirectement via un préprocesseur ou une API de pontage. Certaines API visent à être indépendantes des bases de données, ODBC étant un exemple bien connu. D'autres API courantes incluent JDBC et ADO.NET.

Les langages de base de données sont des langages à usage spécial, qui permettent une ou plusieurs des tâches suivantes, parfois distinguées comme des sous-langages :

    (DCL) - contrôle l'accès aux données (DDL) - définit des types de données tels que la création, la modification ou la suppression de tables et les relations entre elles (DML) - effectue des tâches telles que l'insertion, la mise à jour ou la suppression d'occurrences de données (DQL) - permet recherche d'informations et calcul d'informations dérivées.

Les langages de base de données sont spécifiques à un modèle de données particulier. Les exemples notables incluent :

  • SQL combine les rôles de définition de données, de manipulation de données et de requête dans un seul langage. Ce fut l'un des premiers langages commerciaux pour le modèle relationnel, bien qu'il s'écarte à certains égards du modèle relationnel tel que décrit par Codd (par exemple, les lignes et les colonnes d'un tableau peuvent être ordonnées). SQL est devenu une norme de l'American National Standards Institute (ANSI) en 1986 et de l'Organisation internationale de normalisation (ISO) en 1987. Les normes ont été régulièrement améliorées depuis et sont prises en charge (avec divers degrés de conformité) par tous les SGBD relationnel. [29][30] est une norme de langage de modèle objet (de l'Object Data Management Group). Il a influencé la conception de certains des langages de requête les plus récents tels que JDOQL et EJB QL. est un langage de requête XML standard implémenté par des systèmes de bases de données XML tels que MarkLogic et eXist, par des bases de données relationnelles avec des capacités XML telles qu'Oracle et DB2, ainsi que par des processeurs XML en mémoire tels que Saxon. combine XQuery avec SQL. [31]

Un langage de base de données peut également intégrer des fonctionnalités telles que :

  • Configuration spécifique au SGBD et gestion du moteur de stockage
  • Calculs pour modifier les résultats des requêtes, comme le comptage, la sommation, la moyenne, le tri, le regroupement et les références croisées
  • Application des contraintes (par exemple dans une base de données automobile, n'autorisant qu'un seul type de moteur par voiture)
  • Version d'interface de programmation d'application du langage de requête, pour la commodité du programmeur

Le stockage de base de données est le conteneur de la matérialisation physique d'une base de données. Il comprend le interne (physique) niveau dans l'architecture de la base de données. Il contient également toutes les informations nécessaires (par exemple, les métadonnées, les « données sur les données » et les structures de données internes) pour reconstruire le niveau conceptuel et niveau externe du niveau interne en cas de besoin. Le stockage permanent des données est généralement de la responsabilité du moteur de la base de données, également appelé « moteur de stockage ». Bien que généralement accessibles par un SGBD via le système d'exploitation sous-jacent (et en utilisant souvent les systèmes de fichiers des systèmes d'exploitation comme intermédiaires pour l'agencement du stockage), les propriétés de stockage et les paramètres de configuration sont extrêmement importants pour le fonctionnement efficace du SGBD, et sont donc étroitement gérés par administrateurs de bases de données. Un SGBD, lorsqu'il est en fonctionnement, a toujours sa base de données résidant dans plusieurs types de stockage (par exemple, mémoire et stockage externe). Les données de la base de données et les informations supplémentaires nécessaires, éventuellement en très grandes quantités, sont codées en bits. Les données résident généralement dans le stockage dans des structures qui semblent complètement différentes de l'apparence des données aux niveaux conceptuel et externe, mais de manière à tenter d'optimiser (le mieux possible) la reconstruction de ces niveaux lorsque les utilisateurs et les programmes en ont besoin. quant au calcul d'autres types d'informations nécessaires à partir des données (par exemple, lors de l'interrogation de la base de données).

Certains SGBD prennent en charge la spécification du codage de caractères utilisé pour stocker les données, de sorte que plusieurs encodages peuvent être utilisés dans la même base de données.

Diverses structures de stockage de base de données de bas niveau sont utilisées par le moteur de stockage pour sérialiser le modèle de données afin qu'il puisse être écrit sur le support de votre choix. Des techniques telles que l'indexation peuvent être utilisées pour améliorer les performances. Le stockage conventionnel est orienté lignes, mais il existe également des bases de données orientées colonnes et de corrélation.

Vues matérialisées

La redondance du stockage est souvent utilisée pour augmenter les performances. Un exemple courant est le stockage vues matérialisées, qui se composent de fréquemment nécessaires vues externes ou les résultats de la requête. Le stockage de telles vues permet d'économiser leur calcul coûteux à chaque fois qu'elles sont nécessaires. Les inconvénients des vues matérialisées sont les frais généraux encourus lors de leur mise à jour pour les maintenir synchronisées avec leurs données de base de données mises à jour d'origine, et le coût de la redondance du stockage.

Réplication

Parfois, une base de données utilise la redondance de stockage par réplication d'objets de base de données (avec une ou plusieurs copies) pour augmenter la disponibilité des données (à la fois pour améliorer les performances des accès simultanés de plusieurs utilisateurs finaux à un même objet de base de données, et pour fournir une résilience en cas de défaillance partielle de une base de données distribuée). Les mises à jour d'un objet répliqué doivent être synchronisées sur les copies d'objet. Dans de nombreux cas, l'intégralité de la base de données est répliquée.

La sécurité de la base de données traite de tous les aspects de la protection du contenu de la base de données, de ses propriétaires et de ses utilisateurs. Cela va de la protection contre les utilisations intentionnelles non autorisées des bases de données aux accès non intentionnels aux bases de données par des entités non autorisées (par exemple, une personne ou un programme informatique).

Le contrôle d'accès à la base de données consiste à contrôler qui (une personne ou un certain programme informatique) est autorisé à accéder à quelles informations dans la base de données. Les informations peuvent comprendre des objets de base de données spécifiques (par exemple, des types d'enregistrements, des enregistrements spécifiques, des structures de données), certains calculs sur certains objets (par exemple, des types de requêtes ou des requêtes spécifiques), ou en utilisant des chemins d'accès spécifiques aux premiers (par exemple, en utilisant des index spécifiques ou d'autres structures de données pour accéder aux informations). Les contrôles d'accès à la base de données sont définis par un personnel spécialement autorisé (par le propriétaire de la base de données) qui utilise des interfaces SGBD de sécurité protégées dédiées.

Cela peut être géré directement sur une base individuelle, ou par l'attribution d'individus et de privilèges à des groupes, ou (dans les modèles les plus élaborés) par l'attribution d'individus et de groupes à des rôles qui reçoivent ensuite des droits. La sécurité des données empêche les utilisateurs non autorisés de consulter ou de mettre à jour la base de données. À l'aide de mots de passe, les utilisateurs sont autorisés à accéder à l'intégralité de la base de données ou à des sous-ensembles de celle-ci appelés "sous-schémas". Par exemple, une base de données d'employés peut contenir toutes les données sur un employé individuel, mais un groupe d'utilisateurs peut être autorisé à afficher uniquement les données de paie, tandis que d'autres sont autorisés à accéder uniquement à l'historique de travail et aux données médicales. Si le SGBD fournit un moyen de saisir et de mettre à jour de manière interactive la base de données, ainsi que de l'interroger, cette capacité permet de gérer les bases de données personnelles.

La sécurité des données en général concerne la protection de morceaux spécifiques de données, à la fois physiquement (c'est-à-dire contre la corruption, la destruction ou la suppression, par exemple, voir la sécurité physique), ou leur interprétation, ou des parties d'entre elles, en informations significatives (par exemple, en regardant aux chaînes de bits qu'ils comprennent, concluant des numéros de carte de crédit valides spécifiques, par exemple, voir cryptage des données).

La journalisation des modifications et des accès enregistre qui a accédé à quels attributs, ce qui a été modifié et quand cela a été modifié. Les services de journalisation permettent un audit de la base de données médico-légale plus tard en conservant un enregistrement des occurrences d'accès et des modifications. Parfois, le code au niveau de l'application est utilisé pour enregistrer les modifications plutôt que de laisser cela à la base de données. La surveillance peut être configurée pour tenter de détecter les failles de sécurité.

Les transactions de base de données peuvent être utilisées pour introduire un certain niveau de tolérance aux pannes et d'intégrité des données après une récupération après un crash. Une transaction de base de données est une unité de travail, encapsulant généralement un certain nombre d'opérations sur une base de données (par exemple, lire un objet de base de données, écrire, acquérir un verrou, etc.), une abstraction prise en charge dans la base de données et également dans d'autres systèmes. Chaque transaction a des limites bien définies en termes d'exécutions de programme/code qui sont incluses dans cette transaction (déterminées par le programmeur de la transaction via des commandes de transaction spéciales).

L'acronyme ACID décrit certaines propriétés idéales d'une transaction de base de données : atomicité, cohérence, isolation et durabilité.

Une base de données construite avec un SGBD n'est pas portable vers un autre SGBD (c'est-à-dire que l'autre SGBD ne peut pas l'exécuter). Cependant, dans certaines situations, il est souhaitable de migrer une base de données d'un SGBD vers un autre. Les raisons sont principalement économiques (différents SGBD peuvent avoir des coûts totaux de possession ou TCO différents), fonctionnelles et opérationnelles (différents SGBD peuvent avoir des capacités différentes). La migration implique la transformation de la base de données d'un type de SGBD à un autre. La transformation doit conserver (si possible) l'application liée à la base de données (c'est-à-dire tous les programmes d'application liés) intacte. Ainsi, les niveaux conceptuels et architecturaux externes de la base de données doivent être maintenus dans la transformation. Il peut être souhaitable que certains aspects du niveau interne de l'architecture soient également conservés. Une migration de base de données complexe ou volumineuse peut être un projet compliqué et coûteux (unique) en soi, qui doit être pris en compte dans la décision de migrer. Ceci malgré le fait que des outils peuvent exister pour aider à la migration entre des SGBD spécifiques. En règle générale, un fournisseur de SGBD fournit des outils pour aider à importer des bases de données à partir d'autres SGBD populaires.

Après avoir conçu une base de données pour une application, l'étape suivante consiste à créer la base de données. En règle générale, un SGBD à usage général approprié peut être sélectionné pour être utilisé à cette fin. Un SGBD fournit les interfaces utilisateur nécessaires à utiliser par les administrateurs de base de données pour définir les structures de données de l'application nécessaires dans le modèle de données respectif du SGBD. D'autres interfaces utilisateur sont utilisées pour sélectionner les paramètres de SGBD nécessaires (comme les paramètres de sécurité, d'allocation de stockage, etc.).

Lorsque la base de données est prête (toutes ses structures de données et autres composants nécessaires sont définis), elle est généralement remplie avec les données de l'application initiale (initialisation de la base de données, qui est généralement un projet distinct dans de nombreux cas utilisant des interfaces de SGBD spécialisées qui prennent en charge l'insertion en bloc) avant de faire il opérationnel. Dans certains cas, la base de données devient opérationnelle alors qu'elle est vide de données d'application, et des données sont accumulées pendant son fonctionnement.

Une fois la base de données créée, initialisée et remplie, elle doit être maintenue. Divers paramètres de base de données peuvent devoir être modifiés et la base de données peut avoir besoin d'être réglée (réglage) pour de meilleures performances. Les structures de données de l'application peuvent être modifiées ou ajoutées, de nouveaux programmes d'application connexes peuvent être écrits pour ajouter aux fonctionnalités de l'application, etc.

Parfois, il est souhaité de ramener une base de données à un état antérieur (pour de nombreuses raisons, par exemple, les cas où la base de données est trouvée corrompue en raison d'une erreur logicielle, ou si elle a été mise à jour avec des données erronées). Pour y parvenir, une opération de sauvegarde est effectuée occasionnellement ou en continu, où chaque état souhaité de la base de données (c'est-à-dire les valeurs de ses données et leur intégration dans les structures de données de la base de données) est conservé dans des fichiers de sauvegarde dédiés (de nombreuses techniques existent pour le faire efficacement). Lorsqu'il est décidé par un administrateur de base de données de ramener la base de données à cet état (par exemple, en spécifiant cet état à un moment souhaité dans le temps où la base de données était dans cet état), ces fichiers sont utilisés pour restaurer cet état.

Les techniques d'analyse statique pour la vérification logicielle peuvent également être appliquées dans le scénario des langages de requête. En particulier, le cadre d'interprétation *Abstract a été étendu au domaine des langages de requête pour les bases de données relationnelles afin de prendre en charge de bonnes techniques d'approximation. [32] La sémantique des langages de requête peut être ajustée selon des abstractions appropriées du domaine concret des données. L'abstraction du système de base de données relationnelle a de nombreuses applications intéressantes, en particulier, à des fins de sécurité, telles que le contrôle d'accès à grain fin, le tatouage, etc.

Les autres fonctionnalités du SGBD peuvent inclure :

    – Cela aide à garder un historique des fonctions exécutées.
  • Composant graphique pour produire des graphiques et des diagrammes, en particulier dans un système d'entrepôt de données. – Effectue une optimisation des requêtes sur chaque requête pour choisir un plan de requête (un ordre partiel (arbre) d'opérations) à exécuter pour calculer le résultat de la requête. Peut être spécifique à un moteur de stockage particulier.
  • Outils ou crochets pour la conception de bases de données, la programmation d'applications, la maintenance des programmes d'application, l'analyse et la surveillance des performances de la base de données, la surveillance de la configuration de la base de données, la configuration matérielle du SGBD (un SGBD et la base de données associée peuvent couvrir des ordinateurs, des réseaux et des unités de stockage) et le mappage de base de données associé (en particulier pour un SGBD distribué), l'allocation de stockage et la surveillance de l'agencement de la base de données, la migration du stockage, etc.

De plus en plus, il y a des appels pour un système unique qui intègre toutes ces fonctionnalités de base dans le même cadre de construction, de test et de déploiement pour la gestion de base de données et le contrôle des sources. Empruntant à d'autres développements dans l'industrie du logiciel, certains commercialisent des offres telles que "DevOps for database". [33]

La première tâche d'un concepteur de base de données est de produire un modèle de données conceptuel qui reflète la structure des informations à conserver dans la base de données. Une approche courante consiste à développer un modèle entité-relation, souvent à l'aide d'outils de dessin. Une autre approche populaire est le langage de modélisation unifié. Un modèle de données réussi reflétera avec précision l'état possible du monde extérieur modélisé : par exemple, si les gens peuvent avoir plus d'un numéro de téléphone, cela permettra de capturer ces informations. La conception d'un bon modèle de données conceptuel nécessite une bonne compréhension du domaine d'application, cela implique généralement de poser des questions approfondies sur les sujets d'intérêt pour une organisation, comme « un client peut-il aussi être un fournisseur ? » ou « si un produit est vendu avec deux différentes formes d'emballage, s'agit-il du même produit ou de produits différents ?", ou "si un avion vole de New York à Dubaï via Francfort, est-ce un vol ou deux (ou peut-être même trois) ?". Les réponses à ces questions établissent des définitions de la terminologie utilisée pour les entités (clients, produits, vols, segments de vol) et leurs relations et attributs.

La production du modèle de données conceptuel implique parfois la contribution des processus métier ou l'analyse du flux de travail dans l'organisation. Cela peut aider à déterminer quelles informations sont nécessaires dans la base de données et celles qui peuvent être omises. Par exemple, cela peut aider à décider si la base de données doit contenir des données historiques ainsi que des données actuelles.

Après avoir produit un modèle de données conceptuel dont les utilisateurs sont satisfaits, l'étape suivante consiste à le traduire en un schéma qui implémente les structures de données pertinentes au sein de la base de données. Ce processus est souvent appelé conception de base de données logique et le résultat est un modèle de données logique exprimé sous la forme d'un schéma. Alors que le modèle de données conceptuel est (en théorie du moins) indépendant du choix de la technologie de base de données, le modèle de données logique sera exprimé en termes d'un modèle de base de données particulier pris en charge par le SGBD choisi. (Les termes modèle de données et modèle de base de données sont souvent utilisés de manière interchangeable, mais dans cet article, nous utilisons modèle de données pour la conception d'une base de données spécifique, et modèle de base de données pour la notation de modélisation utilisée pour exprimer cette conception).

Le modèle de base de données le plus populaire pour les bases de données à usage général est le modèle relationnel, ou plus précisément, le modèle relationnel tel que représenté par le langage SQL. Le processus de création d'une conception de base de données logique à l'aide de ce modèle utilise une approche méthodique connue sous le nom de normalisation. Le but de la normalisation est de s'assurer que chaque « fait » élémentaire n'est enregistré qu'à un seul endroit, de sorte que les insertions, les mises à jour et les suppressions conservent automatiquement la cohérence.

La dernière étape de la conception de la base de données consiste à prendre les décisions qui affectent les performances, l'évolutivité, la récupération, la sécurité, etc., qui dépendent du SGBD particulier. C'est ce qu'on appelle souvent conception de base de données physique, et la sortie est le modèle de données physique. Un objectif clé au cours de cette étape est l'indépendance des données, ce qui signifie que les décisions prises à des fins d'optimisation des performances doivent être invisibles pour les utilisateurs finaux et les applications. Il existe deux types d'indépendance des données : l'indépendance des données physiques et l'indépendance des données logiques. La conception physique est principalement motivée par les exigences de performances et nécessite une bonne connaissance de la charge de travail et des modèles d'accès attendus, ainsi qu'une compréhension approfondie des fonctionnalités offertes par le SGBD choisi.

Un autre aspect de la conception d'une base de données physique est la sécurité. Cela implique à la fois de définir le contrôle d'accès aux objets de la base de données et de définir des niveaux et des méthodes de sécurité pour les données elles-mêmes.

Des modèles

Un modèle de base de données est un type de modèle de données qui détermine la structure logique d'une base de données et détermine fondamentalement de quelle manière les données peuvent être stockées, organisées et manipulées. L'exemple le plus populaire d'un modèle de base de données est le modèle relationnel (ou l'approximation SQL du relationnel), qui utilise un format basé sur une table.


Le regroupement d'entités est uniquement pris en charge pour les classes d'entités ponctuelles et multipoints stockées dans une géodatabase ou une base de données d'entreprise. Les données ne peuvent pas être versionnées ou activées pour l'archivage.

Utilisez le même système de coordonnées pour les groupes que la carte contenant la couche d'entités regroupées pour éviter une projection dynamique (à la volée). Si vous n'êtes pas sûr du système de coordonnées à utiliser, une projection de surface égale telle que World Cylindrical Equal Area est recommandée. Vous ne pouvez pas utiliser un système de coordonnées personnalisé.

Pour les jeux de données très volumineux ou si les données ne sont pas souvent mises à jour, vous pouvez activer un cache statique de résultats agrégés. Cependant, le cache n'est pas nécessairement créé pour tous les niveaux de détail. Le cache statique peut être géré en exécutant l'outil Manage Feature Bin Cache. Utilisez cet outil pour spécifier les niveaux de détail du cache statique.

Une couche activée par bac passe en mode dynamique dans une carte lorsque vous zoomez au-delà du niveau de détail de l'étendue du cache statique. La propriété Niveau maximum de mise en cache dans la boîte de dialogue Propriétés de la couche d'une couche activée répertorie le niveau de détail maximal du cache statique. Les caches statiques sont générés en utilisant toutes les fonctionnalités du jeu de données. Ainsi, si vous utilisez une requête de définition ou appliquez un filtre de temps ou de plage sur une couche d'entités activée par bac dans une carte, le cache statique est ignoré et l'agrégation de bac se produit dynamiquement.

Utilisez l'outil Désactiver le regroupement d'entités pour désactiver la fonction de regroupement d'une couche si nécessaire. Vous pouvez également désactiver le dessin de compartiment pour une couche dans une carte ou une scène sans désactiver le regroupement d'entités.

Lorsque le regroupement d'entités est dynamique et que vous souhaitez mettre à jour la liste des statistiques récapitulatives stockées dans la classe d'entités, vous devez désactiver et réactiver le regroupement d'entités. Vous pouvez ajouter de nouvelles statistiques récapitulatives à la couche d'entités dans une carte ou une scène à partir de la boîte de dialogue Statistiques récapitulatives de la couche. Ces statistiques récapitulatives sont stockées avec la couche uniquement. Ils ne sont pas stockés dans la classe d'entités source.


Formater la longueur de la colonne dans la sortie SSMS

SQL Server 2012. Exemple de requête au bas de cet article.

J'essaie de créer un rapport simple pour la dernière sauvegarde d'une base de données donnée.

Lors de l'exécution de l'exemple de requête avec sortie en texte dans SSMS, la colonne DB_NAME est formatée pour correspondre à la taille maximale possible des données (le même problème existe dans DB2, btw). Donc, j'ai une colonne qui contient des données qui ne dépassent jamais, disons, 12 caractères, mais elle est stockée dans un varchar(128) , j'obtiens 128 caractères de données quoi qu'il arrive. RTRIM n'a aucun effet sur la sortie.

Connaissez-vous un moyen élégant de faire en sorte que la longueur de la colonne formatée corresponde à la taille maximale des données réelles, plutôt qu'à la taille potentielle maximale des données ?

Je suppose qu'il existe une fonction xp_sprintf(), mais je ne la connais pas et elle n'a pas l'air très robuste.

J'ai essayé de le lancer comme ceci :

Mais alors, SQL Server ne me laissera pas utiliser la variable @database_name_Length dans ma définition varchar lors du casting. SQL Server, apparemment, exige un nombre littéral lors de la déclaration de la variable char ou varchar.

Je suis en train de créer l'instruction dans une chaîne et d'utiliser quelque chose comme sp_executesql , ou de créer une table temporaire avec les longueurs de colonnes réelles dont j'ai besoin, ce qui est vraiment un peu plus difficile que j'espérais aller juste pour ne PAS obtenir 100 espaces dans ma sortie sur une colonne de 128 caractères.

J'ai cherché sur les interwebs et trouvé des bupkus.

Peut-être que je cherche la mauvaise chose, ou Google est fâché avec moi.

Il semble que SSMS formatera la colonne pour qu'elle corresponde à la taille maximale autorisée, même si les données réelles sont beaucoup plus petites. J'espérais un moyen élégant de "réparer" cela sans sauter à travers les cerceaux. J'utilise SSMS 2012.

Si je vais à Résultats à la grille puis vers Excel ou quelque chose de similaire, l'espace de fin est éliminé. J'espérais créer un rapport que j'envoie par e-mail, cependant.