web-dev-qa-db-fra.com

Quelles sont les contraintes de base de données?

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

84
bala3569

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

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

Ils définissent certaines propriétés que les données d'une base de données doivent respecter. Ils peuvent s'appliquer à une colonne, à une table entière, à plusieurs tables ou à un schéma complet. Un système de base de données fiable garantit que les contraintes sont valables à tout moment (sauf éventuellement dans une transaction, pour les contraintes dites différées).

Les types de contraintes les plus courants sont:

  • non null - chaque valeur d'une colonne ne doit pas être [~ # ~] null [~ # ~]
  • nique - la ou les valeurs dans la ou les colonnes spécifiées doivent être uniques pour chaque ligne d'un tableau
  • clé primaire - les valeurs dans les colonnes spécifiées doivent être uniques pour chaque ligne d'un tableau et ne pas être [~ # ~] null [~ # ~] ; normalement, chaque table d'une base de données doit avoir une clé primaire - elle est utilisée pour identifier des enregistrements individuels
  • clé étrangère - la ou les valeurs dans la ou les colonnes spécifiées doivent référencer un enregistrement existant dans une autre table (via sa clé primaire ou une autre contrainte unique )
  • check - une expression est spécifiée, qui doit être évaluée à true pour que la contrainte soit satisfaite
110
Ziga Kranjec

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 à quoi vous les avez conçues?

Quelles questions étranges que je vous pose, pourriez-vous penser, mais malheureusement, trop souvent, les bases de données sont remplies de données erronées, de références non valides à des lignes dans d'autres tables, disparues depuis longtemps ... et de valeurs qui ne signifient rien pour la logique métier de votre solution plus longtemps.

Tous ces déchets ne sont pas les seuls facteurs susceptibles de réduire vos performances, mais constituent également une bombe à retardement dans la logique de votre application, qui récupérera éventuellement des données pour lesquelles elle n'est pas conçue.

Les contraintes sont des règles que vous créez au moment de la conception et qui protègent vos données contre la corruption. Il est essentiel pour la survie à long terme de votre cœur d’enfant d’une solution de base de données. Sans contraintes, votre solution se détériorera avec le temps et une utilisation intensive.

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

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

Il y a plusieurs façons de le faire, mais en gros, elles se résument à:

  • 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 existe une ligne cible à référencer. Cela rend également impossible de rompre une telle relation en supprimant la ligne référencée en créant un lien mort.
  • Les contraintes de vérification peuvent garantir que seules des valeurs spécifiques sont autorisées dans certaines colonnes. Vous pouvez créer une contrainte ne permettant que le mot "jaune" ou "bleu" dans une colonne VARCHAR. Toutes les autres valeurs génèrent une erreur. Obtenir des idées sur l'utilisation des contraintes de vérification, consultez le sys.check_constraints vue dans la base de données exemple AdventureWorks
  • Les règles dans SQL Server sont simplement des contraintes de contrôle réutilisables (vous permet de gérer la syntaxe à partir d'un emplacement unique et de faciliter le déploiement de vos contraintes vers d'autres bases de données. )

Comme je l'ai laissé entendre ici, la construction de l'approche de contrainte la plus défensive pour la conception de votre base de données nécessite des considérations approfondies. Vous devez d’abord connaître les possibilités et les limites des différents types de contraintes ci-dessus. Lectures supplémentaires pourraient inclure:

Contraintes de clé étrangère - Microsoft

contrainte de clé étrangère - w3schools

contraintes de vérification

Bonne chance! ;)

36
Alex

Les contraintes ne sont que des règles sur les données. Les données valides et les données non valides peuvent être définies à l'aide de contraintes. Donc, cette 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 a été spécifiée pour certaines colonnes, nous ne pouvons pas entrer de données en double dans cette colonne.
  2. Check: Tels que NOT NULL. Ici, nous pouvons spécifier quelles données 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 de l'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.
6
user3107247

Les contraintes peuvent être utilisées pour imposer des propriétés spécifiques de données. Un exemple simple est de limiter une colonne int à des valeurs [0-100000]. Cette introduction a l'air bien.

3
Anders Abel

Les contraintes déterminent les valeurs valides pour les données de la base de données. Par exemple, vous pouvez appliquer une valeur non nulle (un NOT NULL contrainte), ou qu’elle existe en tant que contrainte unique dans une autre table (a FOREIGN KEY contrainte), ou qu’elle est unique dans cette table (une contrainte UNIQUE ou peut-être PRIMARY KEY contrainte selon vos besoins). Des contraintes plus générales peuvent être implémentées en utilisant CHECK contraintes.

Le documentation MSDN relative aux contraintes de SQL Server 2008 est probablement votre meilleur point de départ.

3
Jon Skeet

Une base de données est la représentation logique informatisée d'un modèle conceptuel (ou commercial) constitué d'un ensemble de règles commerciales informelles. Ces règles sont la signification des données comprise par l'utilisateur. Les ordinateurs ne comprenant que des représentations formelles, les règles métier ne peuvent pas être directement représentées dans une base de données. Ils doivent être mappés sur une représentation formelle, un modèle logique, constitué d'un ensemble de contraintes d'intégrité. Ces contraintes - le schéma de base de données - constituent la représentation logique des règles de gestion dans la base de données et, par conséquent, représentent la signification des données comprise par le SGBD. Il s'ensuit que si le SGBD ignore et/ou n'applique pas l'intégralité de l'ensemble des contraintes représentant les règles de gestion, il ne comprend pas parfaitement le sens des données et ne peut donc pas garantir (a) son intégrité en empêchant la corruption, (b) l'intégrité des déductions qu'il en tire (c'est-à-dire les résultats de la requête) - c'est une autre façon de dire que le SGBD est, au mieux, incomplet.

Remarque: le sens "compris" du SGBD - contraintes d'intégrité - n'est pas identique au sens compris par l'utilisateur - règles métier - mais, malgré la perte d'un certain sens, nous gagnons en capacité de mécaniser des inférences logiques à partir des données.

"Une vieille classe d'erreurs" par Fabian Pascal

2
onedaywhen
  1. UNIQUE contrainte (dont une PRIMARY KEY contrainte est une variante). Vérifie que toutes les valeurs d'un champ donné sont uniques dans la table. Ceci est X- contrainte d'axe (enregistrements)

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

  3. FOREIGN KEY contrainte. Vérifie que la valeur d'un champ est trouvée parmi les valeurs d'un champ dans une autre table. C'est la contrainte Z- (tables).

2
Quassnoi

Il existe essentiellement 4 types de contraintes principales en SQL:

  • contrainte de domaine: si l'une des valeurs d'attribut fournies pour un nouveau tuple ne fait pas partie du domaine d'attribut spécifié

  • Contrainte de clé: si la valeur d'un attribut de clé dans un nouveau tuple existe déjà dans un autre tuple dans la relation

  • Intégrité référentielle: si une valeur de clé étrangère dans un nouveau tuple fait référence à une valeur de clé primaire qui n'existe pas dans la relation référencée

  • Intégrité de l'entité: si la valeur de la clé primaire est nulle dans un nouveau tuple

2
Ragu