• Aucun résultat trouvé

contraintes de base sur un attribut

Il y a 11 types de contraintes qu’on peut préciser.

1 : Nom de code

On a donné un nom à l’attribut. Il va falloir leur donner un nom de code qui sera utilisé dans la programmation. Dans une même table, deux attributs ne peuvent pas avoir le même nom. Par contre, deux attributs de deux tables différents peuvent avoir le même nom.

2 : Type

Entier, réel, booléen, date, caractère, chaîne de caractère, texte, image, etc.

3 : Énuméré (valeurs possibles en extension)

C’est une espèce de type. Il précise la liste des valeurs possibles pour un attribut. La liste de valeur peut être fixe, ou bien modifiable, ou encore calculée à partir de ce qu’on trouve dans la base de donnée.

Ø SQL : check, trigger

4 : Limites et contraintes de valeurs (valeurs possibles en intension)

Cette contrainte sur le type qui précise la liste des valeurs possibles pour un attribut en intension.

Par exemple, des bornes inférieures et supérieures. Ces bornes peuvent être fixes, ou bien fonction de la valeur d’autres attributs (attribut 1 < attribut2 ; ou bien attribut 1 < moy (attribut2) ; etc.) On peut aussi préciser une valeur par défaut conditionnelle. Par exemple : si attribut 1=NULL, alors attribut 2=NULL.

5 : Clé primaire

Un attribut clé primaire est tel que la valeur est toujours renseignée (elle est obligatoire) et qu’elle est différente pour tous les éléments de la table (elle est unique).

Ø SQL : PRIMARY KEY 6 : Obligatoire

Un attribut obligatoire possède nécessairement une valeur. On dit aussi « not NULL ». Il faut distinguer entre la valeur « 0 » : c’est une possibilité de valeur entière ou réelle parmi les autres, et la valeur NULL. La valeur NULL signifie que la valeur n’est pas renseignée.

Par défaut un attribut n’est pas obligatoire.

Ø SQL : Not NULL 7 : Unicité

Un attribut unique est telle que sa valeur est différente pour tous les éléments de la table (elle est unique). Cette unicité ne concerne pas la valeur NULL : un attribut peut être unique mais non obligatoire. Les clés primaires et secondaires sont uniques et obligatoires.

Par défaut, un attribut n’est pas unique.

Ø SQL : UNIQUE 8 : Valeur par défaut

La valeur par défaut est une valeur donnée par défaut si aucune valeur n’est donnée.

Toutefois, on peut saisir une autre valeur et aussi la valeur NULL.

La valeur par défaut peut être une constante ou être une valeur calculée. Si c’est une valeur calculée, diffère de l’attribut calculé car elle n’est calculée qu’à la création du tuple et ne sera plus mise à jour automatiquement ensuite.

Par exemple, un attribut « date de création » peut recevoir automatiquement la date du jour au moment de la création. Un attribut clé primaire peut recevoir automatiquement une valeur grâce à un auto-incrément.

Les attributs avec valeur par défaut peuvent être saisissable ou pas (un auto-incrément ou une date de création sont plutôt non saisissables).

Ø SQL : DEFAULT, auto_increment, date de création, date de modification, trigger 9 : Calculé

Un attribut calculé est un attribut dont la valeur est calculée à partir d’informations qui sont dans la base de données. C’est donc un attribut qui duplique l’information.

En général, les attributs calculés sont non-saisissables, mais ce n’est pas obligatoire.

Ø SQL : trigger, vue 10 : Non saisissable

Un attribut non saisissable est un attribut qui ne peut pas être saisi. Donc soit il a une valeur par défaut, soit il est calculé.

Ø SQL : trigger, gestion des droits, vue

11 : Non Modifiable, Modifiable, Fixe

Une valeur d’attribut peut toujours être modifiée dans la base de données. Mais du point de vue du SI, un attribut peut être naturellement modifiable (mon salaire), plutôt fixe (mon nom), plutôt non modifiable (la date de saisie ou l’identifiant). Le terme « plutôt » montre que c’est relatif et pas absolu.

Les contraintes d’intégrité référentielle Notion de clé étrangère

Un attribut clé étrangère est un attribut qui fait référence à un attribut clé primaire.

Les clés étrangères donnent lieu à des contraintes particulières : les contraintes d’intégrité référentielle.

La contrainte d’intégrité référentielle consiste à vérifier que la clé primaire référencée existe, que ce soit au niveau de la table ou au niveau des tuples.

Syntaxe SQL

Ø FOREIGN KEY

Contrainte d’intégrité référentielle pour les tables Contrainte sur la création des tables

On ne peut pas créer une table qui contient un attribut clé étrangère si la clé primaire référencée n’a pas déjà été créée.

Donc on doit d’abord créer les tables qui n’ont pas de clés étrangères. Ensuite on crée les tables avec des clés étrangères.

Par exemple : on ne peut pas créer la table des employés qui fait référence à la table des départements si la table des départements n’a pas déjà été créée.

On peut aussi créer toutes les tables, dans n’importe quel ordre, sans préciser quelles sont les clés étrangères (CREATE TABLE). Après la création, on modifie les tables en ajoutant les clés étrangères (ALTER TABLE).

Contrainte sur la suppression des tables

On ne peut pas supprimer une table dont la clé primaire est clé étrangère dans une autre table.

Il faut commencer par détruire les tables qui ne sont référencées par aucunes autres tables.

Par exemple : il faut commencer par détruire les tables des employés, ensuite on peut détruire la table des départements.

On peut aussi supprimer toutes les clés étrangères dans n’importe quel ordre (ALTER TABLE), et ensuite supprimer les tables dans n’importe quel ordre (DROP TABLE).

Contrainte sur la modification des tables

On ne peut pas modifier le nom d’un attribut dans une table s’il est référencé par un autre attribut.

Contrainte d’intégrité référentielle pour les tuples Contrainte sur la création des tuples

On ne peut pas créer un tuple qui contient un attribut clé étrangère si la clé primaire référencée n’a pas déjà été créée.

Par exemple : on ne peut pas créer un employé dans le département 10 si le département 10 n’existe pas.

Contrainte sur la suppression des tuples

On ne peut pas détruire un tuple s’il est référencé par un autre tuple.

Par exemple : on ne peut pas détruire le département 10 si des employés travaillent dans le département 10.

Ø Paramétrage des contraintes d’intégrité référentielle en suppression On vient de voir la situation par défaut.

Il y a deux autres possibilités :

ON DELETE CASCADE : si on veut détruire un tuple référencé par un ou plusieurs autres tuples, alors on détruit aussi ce ou ces autres tuples. Cette caractéristique s’applique à l’attribut clé étrangère.

ON DELETE SET NULL : si on veut détruire un tuple référencé par un ou plusieurs autres tuples, alors on passe la référence au tuple détruit de ce ou ces autres tuples à NULL. Cette caractéristique s’applique à l’attribut clé étrangère.

Par exemple : si on veut détruire le département 10, alors on détruit tous les employés qui travaillent dans le département 10, ou alors on passe le ND des employés du département 10 à NULL.

Contrainte sur la modification des tuples

On ne peut pas modifier la valeur d’un attribut d’un tuple si cette valeur est référencée par un autre tuple.

Par exemple : on ne peut pas modifier la valeur 10 du département 10 (en la passant à 11 par exemple) si des employés travaillent dans le département 10.

Ø Paramétrage des contraintes d’intégrité référentielle en modification On vient de voir la situation par défaut.

Il y a deux autres possibilités :

ON UPDATE CASCADE : si on veut modifier un tuple référencé par un ou plusieurs autres tuples, alors on modifie la référence au tuple modifié de ce ou ces autres tuples. Cette caractéristique s’applique à l’attribut clé étrangère.

ON UPDATE SET NULL : si on veut modifier un tuple référencé par un ou plusieurs autres tuples, alors on passe la référence au tuple détruit de ce ou ces autres tuples à NULL. Cette caractéristique s’applique à l’attribut clé étrangère.

On peut concevoir une 3ème possibilité :

ON UPDATE « DELETE CASCADE » : si on veut modifier un tuple référencé par un ou plusieurs autres tuples, alors on alors on détruit ce ou ces autres tuples.. Cette caractéristique s’applique à l’attribut clé étrangère.

Par exemple : si on veut modifier la valeur 10 le département 10 et la faire passer à 11, alors on modifie aussi le numéro de département de tous les employés qui travaillent dans le département 10 en les faisant passer à 11.

2. Cycle de vie des tuples

Présentation

Dans une base de données, les tuples ont un cycle de vie déterminé.

Ils peuvent être créés, modifiés, supprimés. Quand ils sont créés ou modifiés, tous les attributs ne sont pas nécessairement concernés.

Les différents cas

Création (insert into) et contrainte obligatoire Un attribut peut être :

• Obligatoire NOT NULL ou pas

La situation par défaut d’un attribut est d’être obligatoire (elle correspond à une « forme normale 1 » stricte).

Modification (update) Un attribut peut être :

• Normalement non modifiable : la date d’embauche d’un employé. Sa valeur est définitive.

• Normalement modifiable : le salaire d’un employé.

• Plutôt fixe : le nom d’un employé.

La situation par défaut d’un attribut est d’être non modifiable.

Il peut être obligatoire et non modifiable et aussi non-obligatoire et non-modifiable : dans ce cas, cela veut dire qu’il peut commencer par valoir NULL (être non renseigné), mais que quand on le renseignera, ce sera définitif.

Si tous les attributs d’un tuple sont non modifiables, alors c’est le tuple lui-même qui est non-modifiable. Les modifications sont des historiques qui se traduisent par un ajout de tuple.

Suppression (delete)

Le tuple peut être entièrement supprimé. C’est finalement assez rare. On a plutôt tendance à tout conserver pour garder des historiques qui permettent ensuite de faire de l’analyse de données et du « data mining ».

Archivage

Le tuple peut être archivé. Cela signifie qu’il est détruit dans la BD courante mais conservé dans une archive. Les données archivées ne sont pas modiables.

3. Cycle de vie et analyse fonctionnelle

Présentation

L’analyse fonctionnelle, c’est l’analyse des usages du système qui va utiliser la BD.

Le cycle de vie des tuples est lié à l’analyse fonctionnelle.

En réfléchissant au cycle de vie des tuples, on met au jour l’usage du SI.

Elément d’analyse

Il faut essentiellement mettre au jour les caractéristiques suivantes : NULL possible (pas obligatoire) : ∅

Normalement modifiable : M

Exemples

Les employés et les départements Ø Présentation

EMPLOYES(NE, nom, job, datemb, sal, comm., #ND, *NEchef) DEPARTEMENTS (ND, nom, ville)

Valoriser le modèle consiste pour chaque attribut à réfléchir aux caractères obligatoire, unique et modifiable ainsi qu’aux valeurs par défaut.

• Tout les attributs sont obligatoires (c’est la situation par défaut) sauf « comm ».

• Job, Sal, Comm, #ND, *NEchef, sont normalement modifiables.

• Nom d’employé, nom de département, et ville sont exceptionnellement modifiable.

• NE, datemb sont non mofiables.

• Aucun attribut n’est unique en dehors des clés primaires.

• Il n’y a pas de valeurs par défaut.

Ø Modèle valorisé

EMPLOYES(NE, nom, job, datemb, sal, comm., #ND, *NEchef) M M ∅M M M DEPARTEMENTS (ND, nom, ville)

Ø Usages du système 1. Saisie d’un employé

2. Modification d’un employé

3. Modification exceptionnelle d’un employé 4. Saisie d’un département

5. Modification exceptionnelle d’un département

La bibliothèque Ø Modèle valorisé

ADHERENTS (NA, nom, prenom, adr, tel) M ∅M OEUVRES (NO, titre, auteur)

LIVRES (NL, editeur, #NO)

EMPRUNTER(#NL, datemp, dureeMax, datret, #NA) today ∅

Ø Usages du système 1. Saisie d’un adhérent

2. Modification de l’adresse et du tél d’un adhérent 3. Saisie d’une aoeuvre

4. Saisie d’un livre

5. Saisie d’un emprunt (avec datemp = date du jour par défaut) 6. Modification d’un emprunt = saisie d’un retour

4. Dictionnaire des attributs

Présentation

Le dictionnaire des attributs regroupe tous les attributs dans un tableau.

On sépare les groupes d’attributs par table. On met la clé primaire en premier et la ou les clés étrangères en dernier.

Le tableau précise en plus les contraintes de valeurs pour tous les attributs.

Exemple 1

Désignation Code Type Uniq. Obligé Modif Enum Val déf Limites Calculé Saisi #

1 Numéro d'adhérent NA E Oui Auto++ Non

2 Nom de l'adhérent Nom A 20

3 Adresse de l'adhérent Adr A 40 Non oui

4 Numéro de livre NL E Oui Auto++ Non

5 Editeur Editeur A 20

6 Numéro d’œuvre NO E 7

7 Numéro d’œuvre NO E Oui Auto++ Non

8 Titre du livre Titre A 20

9 Auteur du livre Auteur A 20

7 Numéro de livre NL E 4

8 Date d'emprunt Datemp D today Non

9 Date de retour Datret D Non today Non

10 Numéro d'adhérent NA E 1

Valeurs par défaut

Auto-incrément pur NA, NL, NO Date du jour pour datemp et datret

Saisissable

Les clés primaires auto-incrémentées seront non saisissables.

Datemp et Datret sont non saisissables

Modifiable

Les clés primaires sont non modifiables.

Dateret et le NA des Emprunts sont non modifiables aussi : quand on fait un emprunt, NL, datemp et NA sont renseignés et ne sont pas modifiables. Quand on ramène le livre, datret est renseigné et n’est pas modifiable. Finalement, tous les attributs de la table des emprunts sont non modifiables.

Exemple 2

Désignation Code Type Uniq. Obligé Modif Enum Val déf Limites Calculé Saisi #

1 N° de l'employé NE E Oui Auto++ Non

2 Nom de l'employé Ename A 10

3 Fonction de l'employé Job A 9 Oui Oui

4 Date d'embauche Hiredate D

5 Salaire Sal R Oui > 0

6 Commission Comm. R Non Oui >= 0

7 Chef NEChef E Non Oui 1

8 N° de départemt Deptno E Oui 9

9 N° de départemt ND E Oui Auto++ Non

10 Nom du département Dname A 14

11 Localité du départemt Loc A 13 oui

Valeurs par défaut

Auto-incrément pur NE, ND

Saisissable

Les clés primaires auto-incrémentées seront non saisissables.

Modifiable

Les clés primaires sont non modifiables.

La date d’embauche est non modifiable.

Enuméré

Fonction : 'SALESMAN', 'MANAGER', 'PRESIDENT'.

Calculé

Pas d’attribut calculé.

5. Jeu de tests

Présentation

Le jeu de tests est un ensemble de tuples qui permet de tester la base de données.

Il doit être construit judicieusement.

En effet, il ne faut pas oublier qu’une requête peut sembler donner de bons résultats sur un jeu de tests et mais pas sur un autre.

Le jeu de tests doit être choisi judicieusement pour permettre de bien tester les requêtes.

Trucs pour bien construire son jeu de tests Nombre de tuples

Pour bien construire son jeu de tests, il faut mettre au minimum 3 tuples par tables-nom et 6 tuples par tables-verbe.

On est amené à grossir le nombre de tuples en appliquant les règles suivantes.

Les clés primaires simples

On peut numéroter les clés primaires de 1 à N.

Les clés étrangères

Pour bien construire son jeu de tests, il faut surtout faire attention aux clés étrangères.

• Les clés étrangères doivent correctement faire référence aux clés primaires.

• Si une clé étrangère peut avoir des doublons, le jeu de test doit le montrer.

• Si une clé étrangère peut valoir NULL, le jeu de test doit le montrer.

• Si une clé primaire doit forcément être référencée par une clé étrangère, le jeu de tests doit le montrer.

• Si une clé primaire peut ne pas être référencée par une clé étrangère, le jeu de tests doit le montrer.

Les dates

Pour bien construire son jeu de tests, il faut faire attention aux attributs date.

Les autres attributs.

Pour bien construire son jeu de tests, il faut faire attention à mettre des doublons dès que cela semble judicieux, et mettre des valeurs NULL dès que c’est possible. On n’est pas obligé de mettre des « vrais valeurs » : on peut mettre des codes : n1, n2, n3 pour des noms, ad1, ad2, ad3 pour des adresses, etc.

Documents relatifs