Comment utiliser des contraintes de bases de données SQL multi-tables

UN contrainte

Sommaire

est une règle d'application que le SGBD applique dans SQL. Après avoir défini une base de données, vous pouvez inclure des contraintes (telles que NOT NULL) Dans une définition de table. Le SGBD fait en sorte que vous ne pouvez jamais commettre une transaction qui viole une contrainte.

Vous disposez de trois types de contraintes:

  • UN contrainte de colonne impose une condition sur une colonne dans une table.

  • UN contrainte de table met une contrainte spécifiée sur une table entière.

  • Un affirmation est une contrainte qui peut affecter plus d'une table.

Les contraintes de colonne

Un exemple d'une contrainte de colonne est montré dans la suite Data Definition Language (DDL):

CREATE TABLE CLIENT (ClientName CHAR (30) NOT NULL, Address1 CHAR (30), Address2 CHAR (30), CityCHAR (25), StateCHAR (2), PostalCode CHAR (10), PhoneCHAR (13), FaxCHAR (13), ContactPerson CHAR (30)) -

La déclaration applique la contrainte NOT NULL au Nom du client colonne, précisant que Nom du client ne peut pas prendre une valeur nulle. UNIQUE est une autre contrainte que vous pouvez appliquer à une colonne. Cette contrainte spécifie que chaque valeur de la colonne doit être unique. La VÉRIFICATION contrainte est particulièrement utile car il peut prendre toute expression valide en argument. Prenons l'exemple suivant:




Créer des tests DE TABLE (TestName CHAR (30) NOT NULL, StandardCharge NUMERIC (6,2) CHECK (StandardCharge> = 0.0AND StandardCharge lt; = 200,0)) -

Charge standard de VetLab pour un test doit toujours être supérieure ou égale à zéro. Et aucun des tests standard coûte plus de 200 $. La VÉRIFICATION clause refuse d'accepter toutes les entrées qui ne relèvent pas de la plage 0 lt; = StandardCharge lt; = 200. Une autre façon d'énoncer la même contrainte est la suivante:

CHECK (StandardCharge entre 0,0 et 200,0)

Les contraintes de table

La CLÉ PRIMAIRE contrainte spécifie que la colonne à laquelle elle applique est une clé primaire. Cette contrainte applique à la totalité de la table et est équivalent à une combinaison de la NOT NULL et UNIQUE les contraintes de colonne. Vous pouvez spécifier cette contrainte dans un CREATE déclaration, comme illustré dans l'exemple suivant:

CREATE TABLE CLIENT (ClientName CHAR (30) PRIMARY KEY, Address1 CHAR (30), Address2 CHAR (30), CityCHAR (25), Etat CHAR (2), PostalCode CHAR (10), Téléphone CHAR (13), FaxCHAR (13 ), ContactPerson CHAR (30)) -

Contraintes nommées peuvent avoir des fonctionnalités supplémentaires. Supposons par exemple que vous voulez faire un chargement en vrac de plusieurs milliers de clients potentiels dans votre table de PROSPECT. Vous disposez d'un fichier qui contient la plupart des perspectives aux États-Unis, mais avec un peu de perspectives canadiennes parsèment le fichier.

Normalement, vous voulez limiter votre table de PROSPECT pour inclure uniquement les perspectives américaines, mais vous ne voulez pas cette charge en vrac pour être interrompu à chaque fois qu'il frappe l'un des records canadiens. (Codes postaux canadiens comprennent des lettres et des chiffres, mais les codes postaux américains contiennent que des chiffres.) Vous pouvez choisir de ne pas appliquer une contrainte sur Code Postal jusqu'à ce que le chargement en vrac est terminée, et puis vous pouvez restaurer l'application contrainte plus tard.

Initialement, votre table de PROSPECT a été créé avec le suivant CREATE TABLE déclaration:

CREATE TABLE PROSPECT (ClientName CHAR (30) PRIMARY KEY, Address1 CHAR (30), Address2 CHAR (30), CityCHAR (25), Etat CHAR (2), PostalCode CHAR (10), Téléphone CHAR (13), FaxCHAR (13 ), ContactPerson CHAR (30), la contrainte postal CHECK (PostalCode entre 0 et 99999)) -

Avant le chargement en vrac, vous pouvez désactiver l'application de la Zip contrainte:

ALTER TABLE PROSPECTCONSTRAINT Zip PAS ENFORCED-

Après la charge en vrac est terminée, vous pouvez restaurer l'application de la contrainte:

ALTER TABLE PROSPECTCONSTRAINT postal ENFORCED-

À ce stade, vous pouvez éliminer toutes les lignes qui ne satisfont pas à la contrainte avec:

DELETE FROM PROSPECTWHERE PostalCode PAS comprise entre 0 et 99999 -

Assertions

Un affirmation spécifie une restriction pour plus d'une table. L'exemple suivant utilise une condition de recherche établi à partir de deux tables pour créer une affirmation:

CREATE TABLE commandes (OrderNumber INTEGER NOT NULL, ClientName CHAR (30), TestOrdered CHAR (30), Salesperson CHAR (30), OrderDate DATE) résultats de la table -Créer (ResultNumber INTEGER NOT NULL, OrderNumber Integer, ResultCHAR (50), DateOrdered DATE , PrelimFinal CHAR (1)) -Créer ASSERTIONCHECK (NOT EXISTS (SELECT * FROM ORDRES, RESULTSWHERE ORDERS.OrderNumber = RESULTS.OrderNumberAND Orders.OrderDate> RESULTS.DateReported)) -

Cette affirmation garantit que les résultats des tests ne sont pas signalés avant le test est commandé.


» » » » Comment utiliser des contraintes de bases de données SQL multi-tables