Bonsoir sci-ripper,
Envoyé par
sci-ripper
dans le cours il l'on représenté par un cercle avec "CIF" écrit à l'intérieur
C’est une façon de procéder parmi d’autres et il m’arrive de le faire, voyez par exemple le cas du jockey qui ne peut évidemment monter qu’un seul cheval au cours d’une course.
Vous y trouverez à cette occasion la définition de la contrainte d’unicité (donc de la CIF), telle qu’elle a été proposée par le Groupe de Travail 135 de l’Afcet qui a fait du beau travail.
Envoyé par
sci-ripper
Pourquoi la cardinalité maximale entre la relation Est_chargé_de et l'entité CLASSE est N alors qu'une classe donnée est sous la responsabilité d’un seul instituteur?
Parce que d’une année à l’autre, une classe peut changer d’instituteur :
1 2 3 4 5
| Classe Année Instituteur
------ -----
C1 2012 Fernand
C1 2013 Raoul
C1 2014 Fernand |
Ainsi, la classe C1 a eu plus d’un instituteur, d’où la cardinalité N, par contre, au cours d’une année, une classe n’a qu’un instituteur, d’où la clé {Classe, Année}.
Envoyé par
sci-ripper
Si pk est une clé (primaire) donc primary key alors fk serait une clé étrangère?
« pk » est un symbole signifiant « primary key » (clé primaire) et « fk » un autre symbole, signifiant « foreign key » (clé étrangère »). Cela dit, une clé primaire peut être en même temps clé étrangère, dans le 1er cas elle permet de garantir l’intégrité d’entité, dans le2e cas elle permet de garantir l’intégrité référentielle.
Envoyé par
ripper
Si la réponse à la question précédente est oui pourquoi l'entité Instituteur possède une clé primaire qui est à la fois une clé étrangère?
Reprenons le code produit par DB-MAIN, dans lequel je me contente de renommer les contraintes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| CREATE TABLE INSTITUTEUR (
InstitId int NOT NULL,
InstitNom varchar(32) NOT NULL,
constraint INSTITUTEUR_PK PRIMARY KEY (InstitId));
CREATE TABLE CLASSE (
ClasseId int NOT NULL,
ClasseNom varchar(32) NOT NULL,
constraint CLASSE_PK PRIMARY KEY (ClasseId));
CREATE TABLE Est_charge_de (
ClasseId int NOT NULL,
Annee int NOT NULL,
InstitId int NOT NULL,
constraint Est_charge_de_PK PRIMARY KEY (ClasseId, Annee));
ALTER TABLE Est_charge_de ADD constraint Est_charge_de_INSTITUTEUR_FK
FOREIGN KEY (InstitId)
REFERENCES INSTITUTEUR (InstitId);
ALTER TABLE Est_charge_de ADD Est_charge_de_CLASSE_FK
FOREIGN KEY (ClasseId)
REFERENCES CLASSE (ClasseId); |
La table INSTITUTEUR est dotée d’une clé primaire {InstitId} ¹.
La table Est_charge_de est dotée d’une clé primaire {ClasseId, Annee} et de deux clés étrangères, dont {InstitId} qui sert à faire respecter la contrainte d’intégrité référentielle qui veut qu’une classe fasse référence à un instituteur appartenant à la table INSTITUTEUR. Si l’on ne procédait pas ainsi, une classe pourrait se retrouver avec un prétendu professeur, inconnu de la base de données.
Envoyé par
ripper
Par quel procédé avez-vous pris la décision de retirer de la clé de la table Est_chargé_de l'attribut InstitId
La contrainte CK1 selon laquelle une classe a un seul professeur au cours d’une année donne lieu au niveau relationnel à une dépendance fonctionnelle attachée à la table Est_charge_de :
{ClasseId, Annee} -> {InstitId}
Si j’avais conservé l’attribut InstitId dans la clé primaire de la table, j’aurais été délinquant au regard de la dépendance fonctionnelle donc de la contrainte CK1.
Je rappelle à cette occasion qu’une clé candidate (ou clé tout court, la clé primaire n’étant qu’un cas particulier qui a été évacué de la théorie relationnelle, pour cause d’absence de valeur ajoutée) est un sous-ensemble K d’attributs (ou colonnes) de l’en-tête (ensemble des attributs) d’une table T, vérifiant les deux contraintes suivantes :
Unicité. Deux tuples (ou lignes) de T ne peuvent avoir simultanément même valeur de K.
Irréductibilité. Il n’existe pas de sous-emble strict K’ de K vérifiant lui aussi la contrainte d’unicité.
S’il se trouve que le triplet {ClasseId, Annee, InstitId} vérifie la propriété d’unicité, il ne vérifie pas celle d’irréductibilité, alors que la paire {ClasseId, Annee} vérifie les deux (il est facile de vérifier qu’elle est irréductible).
Envoyé par
ripper
Y a-t-il des étapes (un algorithme) générales à suivre et permettent de toujours décider de ce qui est bon à garder ou non dans la clé?
Oui. Le travail consiste à recenser les règles de gestion qui donnent lieu à des dépendances fonctionnelles, puis à mettre en œuvre l’algorithme du seau. Mais ceci suppose une connaissance objective et non fantaisiste des dépendances fonctionnelles et avoir étudié les axiomes d’Armstrong. On n’a rien sans rien...
__________________________
¹ Les accolades sont là pour montrer que les éléments qui en font l’objet sont des ensembles au sens de la théorie des ensembles.
Partager