98 votes

Quels sont les contraintes de base de données ?

Quelle est une définition claire d'une contrainte de base de données? Pourquoi les contraintes sont-elles importantes pour une base de données? Quels sont les types de contraintes?

12 votes

Cette question a une réponse claire. Ce n'est pas "trop large." Son grand nombre de votes et de favoris révèlent à quel point elle a été utile à de nombreuses personnes. J'ai corrigé le libellé et l'ai proposé pour une réouverture.

0 votes

@BasilBourque cette question est un très mauvais choix pour les Programmeurs - elle serait rapidement votée en baisse et fermée là-bas, voir meta.programmers.stackexchange.com/questions/6483/… Lecture recommandée: Qu'est-ce qui se passe sur Programmers.SE? Un guide pour Stack Overflow

1 votes

@gnat Bien que cette page me laisse encore perplexe quant à ce qui est ou non pertinent pour le site Programmers Stack Exchange, je peux comprendre et être d'accord avec un seuil minimum selon lequel l'auteur de la publication doit d'abord avoir lu un article pertinent directement sur Wikipédia qui fournit le même type de vue d'ensemble condensée ou résumée demandée sur Stack Exchange.

120voto

Ziga Kranjec Points 276

Les contraintes font partie de la définition du schéma d'une base de données.

Une contrainte est généralement associée à une table et est créée avec une instruction SQL CREATE CONSTRAINT ou CREATE ASSERTION.

Elles définissent certaines propriétés que les données dans une base de données doivent respecter. Elles peuvent s'appliquer à une colonne, à une table entière, à plusieurs tables ou à un schéma entier. Un système de base de données fiable garantit que les contraintes sont respectées en tout temps (à l'exception peut-être à l'intérieur d'une transaction, pour les contraintes dites différées).

Les types courants de contraintes sont :

  • not null - chaque valeur dans une colonne ne doit pas être NULL
  • unique - les valeurs dans la ou les colonnes spécifiées doivent être uniques pour chaque ligne dans une table
  • clé primaire - les valeurs dans la ou les colonnes spécifiées doivent être uniques pour chaque ligne dans une table et ne doivent pas être NULL; normalement chaque table dans une base de données devrait avoir une clé primaire - elle est utilisée pour identifier les enregistrements individuels
  • clé étrangère - les valeurs dans la ou les colonnes spécifiées doivent faire référence à un enregistrement existant dans une autre table (via sa clé primaire ou une autre contrainte d'unicité)
  • vérification - une expression est spécifiée, qui doit être évaluée à vrai pour que la contrainte soit satisfaite

3 votes

+1 pour inclure PK, non null, null

0 votes

+1, vous pourriez encore développer sur les scénarios de FOREIGN KEY et fournir quelques liens.

2 votes

Les contraintes de vérification ne doivent pas être évaluées comme fausses. Elles n'ont pas besoin d'être vraies. L'inconnu est également acceptable.

36voto

Alex Points 925

Pour comprendre pourquoi nous avons besoin de contraintes, vous devez d'abord comprendre la valeur de l'intégrité des données.

L'intégrité des données fait référence à la validité des données. Vos données sont-elles valides? Vos données représentent-elles ce que vous avez conçu?

Quelles questions étranges je vous pose pourriez-vous penser, mais malheureusement, trop souvent, les bases de données sont remplies de données inutiles, de références invalides à des lignes dans d'autres tables, qui n'existent plus... et de valeurs qui n'ont plus de sens pour la logique métier de votre solution.

Toutes ces données inutiles ne se contentent pas de réduire vos performances, mais sont aussi une bombe à retardement sous la logique de votre application qui finira par récupérer des données qu'elle n'est pas censée comprendre.

Les contraintes sont des règles que vous créez au moment de la conception pour protéger vos données de la corruption. C'est essentiel pour la survie à long terme de votre solution de base de données. Sans contraintes, votre solution se détériorera inévitablement avec le temps et une utilisation intense.

Vous devez reconnaître que la conception de votre base de données n'est que la naissance de votre solution. Par la suite, elle doit vivre pendant (espérons-le) longtemps et endurer toutes sortes de comportements (étranges) de la part de ses utilisateurs finaux (c'est-à-dire des applications client). Mais cette phase de conception dans le développement est cruciale pour le succès à long terme de votre solution! Respectez-la et accordez-lui le temps et l'attention nécessaires.

Un sage a dit un jour: "Les données doivent se protéger elles-mêmes!". Et c'est ce que font les contraintes. Ce sont des règles qui maintiennent les données dans votre base de données aussi valides que possible.

Il existe de nombreuses façons de le faire, mais en gros, cela se résume à:

  • Les contraintes de clé étrangère sont probablement les contraintes les plus utilisées, et garantissent que les références à d'autres tables ne sont autorisées que s'il y a réellement une ligne cible à référencer. Cela rend également impossible de rompre une telle relation en supprimant la ligne référencée, ce qui crée un lien mort.
  • Les contraintes CHECK peuvent garantir que seules des valeurs spécifiques sont autorisées dans certaines colonnes. Vous pourriez créer une contrainte n'autorisant que le mot 'Jaune' ou 'Bleu' dans une colonne VARCHAR. Toutes les autres valeurs entraîneraient une erreur. Pour des idées d'utilisation des contraintes CHECK, consultez la vue sys.check_constraints dans la base de données d'exemple AdventureWorks
  • Les règles dans SQL Server ne sont que des contraintes CHECK réutilisables (vous permet de maintenir la syntaxe à partir d'un seul endroit, et facilitant le déploiement de vos contraintes sur d'autres bases de données)

Comme je l'ai laissé entendre ici, il faut une réflexion approfondie pour construire l'approche de contrainte la meilleure et la plus défensive pour la conception de votre base de données. Vous devez d'abord connaître les possibilités et les limites des différents types de contraintes ci-dessus. Des lectures complémentaires pourraient inclure:

Contraintes FOREIGN KEY - Microsoft

Contrainte de clé étrangère - w3schools

Contraintes CHECK

Bonne chance! ;)

0 votes

En tant que nécro-commentaire, il semble que les règles soient maintenant bafouées par Microsoft.

7voto

user3107247 Points 11

Les contraintes ne sont rien d'autre que les règles sur les données. Ce qui est valide et ce qui est invalide peut être défini à l'aide de contraintes. Ainsi, l'intégrité des données peut être maintenue. Voici les contraintes largement utilisées:

  1. Clé primaire : qui identifie de manière unique les données. Si cette contrainte est spécifiée pour certaines colonnes, nous ne pouvons pas entrer de données en double dans cette colonne
  2. Vérification : Tel que NOT NULL. Ici, nous pouvons spécifier les données que nous pouvons entrer pour cette colonne particulière et ce qui n'est pas attendu pour cette colonne.
  3. Clé étrangère : La clé étrangère fait référence à la ligne d'une autre table. Ainsi, les données référencées dans une table à partir d'une autre table sont toujours disponibles pour la table de référence.

3voto

Jon Skeet Points 692016

Les contraintes dictent quelles valeurs sont valides pour les données dans la base de données. Par exemple, vous pouvez contraindre une valeur à ne pas être nulle (une contrainte NOT NULL), ou qu'elle existe en tant que contrainte unique dans une autre table (une contrainte FOREIGN KEY), ou qu'elle soit unique dans cette table (une contrainte UNIQUE ou peut-être PRIMARY KEY en fonction de vos besoins). Des contraintes plus générales peuvent être mises en œuvre en utilisant des CHECK contraintes.

La documentation MSDN pour les contraintes SQL Server 2008 est probablement votre meilleur point de départ.

2voto

Quassnoi Points 191041
  1. UNIQUE contrainte (dont une contrainte PRIMARY KEY est une variante). Vérifie que toutes les valeurs d'un champ donné sont uniques dans toute la table. Il s'agit de la contrainte en X-axe (enregistrements)

  2. CHECK contrainte (dont une contrainte NOT NULL est une variante). Vérifie qu'une certaine condition est vérifiée pour l'expression sur les champs du même enregistrement. Il s'agit de la contrainte en Y-axe (champs)

  3. FOREIGN KEY contrainte. Vérifie que la valeur d'un champ se trouve parmi les valeurs d'un champ dans une autre table. Il s'agit de la contrainte en Z-axe (tables).

0 votes

Les contraintes uniques et les contraintes de clé étrangère peuvent être écrites en utilisant des contraintes CHECK, pourquoi les classer différemment ? c'est-à-dire "Y-axis" (peu importe ce que cela signifie).

2 votes

@onedaywhen: comment implémentez-vous une FOREIGN KEY en utilisant une contrainte CHECK ?

1 votes

@onedaywhen: essayez de créer une table avec cette contrainte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X