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?
+1 pour inclure PK, non null, null
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?
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 :
+1, vous pourriez encore développer sur les scénarios de FOREIGN KEY et fournir quelques liens.
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.
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 à:
sys.check_constraints
dans la base de données d'exemple AdventureWorksComme 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
Bonne chance! ;)
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:
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.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.
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)
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)
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).
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).
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.
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.
2 votes
Le titre est trop large, et les sous-questions posent plusieurs questions à la fois -_- Comment TomTom, P, greg-449, bummi et Nit le veulent-ils? Veuillez expliquer. Y a-t-il un moyen de demander des contraintes...?
0 votes
Bien que je comprenne les sentiments envers les questions jugées trop générales et fondées sur l'opinion, je ne suis pas d'accord avec l'exigence de lire d'abord un article de Wikipédia. Cela NE fournit PAS le "même type de vue d'ensemble condensée ou résumée". La réponse acceptée fournit une réponse beaucoup plus condensée et précise que le lien Wikipédia ci-dessus.