corrections TD1

Transcription

corrections TD1
Solutions du TD1 : M1 MIAG et INFO
2008-2009
Exercice 1 :
class Client {
attribute string nom;
attribute string addr;
attribute string téléphone;
attribute integer Numss;
relationship Set<Compte> Possède
inverse Compte::PossédéPar;
}
class Compte {
attribute integer num;
attribute string type;
attribute real solde;
relationship Set<Client> PossédéPar
inverse Client::Possède
}
Exercice 2
class Personne ne {
attribute string nom;
relationship Personne mèreDe
inverse Personne::enfantDeFemelle
relationship Personne pèreDe
inverse Personne ::enfantDeMale
relationship Set<Personne > enfant
inverse Personne ::parentsDe
relationship Set<Personne > enfantDeFemelle
inverse Personne :: mèreDe
relationship Set<Personne > enfantDeMale
inverse Personne :: pèreDe
relationship Set<Personne > parentsDe
inverse Personne :: enfant
}
Notons qu’il y a six relations ici. Par exemple, l'inverse de la relation qui relie une Personne à
leur (unique) mère est une relation qui relie une mère (c'est-à-dire, une Personne de sexe
féminin) à l'ensemble de ses enfants. Cette relation, que nous appelons EnfantDeFemelle, est
différente de la relation des enfants, qui relie toute personne - homme ou femme - de leurs
enfants.
Exercice 3
Struct dip {string nom, string lieu, string date} diplôme
Exercice 4.1
Nous pensons que numéro de sécurité sociale doit être la clé de la classe Client, et le numéro
de compte doit être la clé pour la classe compte. Voici la solution ODL avec les déclarations
des clés et de l’extent. (page 36)
class Client
(extent Clients key NumSS)
{
attribute string nom;
attribute string addr;
attribute string téléphone;
attribute integer NumSS;
relationship Set<Compte> Possède
inverse Compte::PossédéPar;
}
class Compte
(extent Comptes key num)
{
attribute integer num;
attribute string type;
attribute real solde;
relationship Set<Client> PossédéPar
inverse Client::Possède
}
Exercice 4.2
Puisque la relation entre les clients et les comptes est many-many le schéma relationnel est le
suivant.
CLients(NmuSS, nom, address, téléphone)
Comptes(num, type, solde)
ClientCompt(NmuSS, num)
Exercise 4.3
Il y a seulement un attribut, et trois paires de relations de Personne à lui-même. Puisque
mèreDe et pèreDe sont deux relations de type many-many, on peut enregistrer leurs inverses
dans la relation de personne. Pour chaque Personne, EnfantDemale et EnfantDefemmelle
indiquera père et mère de Personne. La relation Enfants est many-many, et exige sa propre
relation. Cette relation en réalité s'avère être redondante, dans le sens ou ses tuples peuvent
être déduits des relations enregistrées avec Personne. Le schéma est le suivant:
Personnes (nom, EnfantDeFemelle, EnfantDeMale)
Parent-Enfant(parent, enfant)
Exercice 5
(1) Struct Carte {
enum valeur {2,3, 10,valet, Roi, AS} val ;
enum coul {pique, coeur, carreau, trèfle} couleur;
}
(2.2) Type main : set(Carte);
(2.2) class Mains {
attribute Set(carte) Lamain;
}
(3) Mains(MainId, valeur, couleur)
Notons que la classe Mains n’ a pas de clés, donc nous avons besoin de créer une clés :
MainID. Chaque main a, dans la relation Mains, un tuple pour chaque carte dans la main.
(4)
Struct Joueur-Main {string nomJoeur, Main SaMain }
class Mises {
attribute Set (Joeur-Main) laMise
}
Rq : Joueur-Main peut être définie directement dans la déclaration de l'attribut LaMise.
Comme suit :
class Mises {
attribute Set (Struct Joueur-Main {string nomJoeur, Main
SaMain } LaMise ;
}
(5)
Puisque la classe Mains et la classe Mises n’ont de clés, pour concevoir le schéma de relation
il faut avoir une relation qui lie entre les paires Mises et joueur-Main, et une autre relation
pour spécifier le contenu de la classe Mains.
Mises(MiseID, nom-Joueur, MainID)
Mains(MainID, valeur, couleur)
Toutefois, on peut se débarrasser de MainID et de lier la mise et le joueur directement aux
cartes de joueur :
Mises(MiseID, nom-joueur, valeur, couleur)
(6)
Tout d'abord, la carte est un ensemble constitué d'une valeur et d’une couleur, nous avons
donc besoin de deux attributs dans un schéma de relation pour représenter des cartes.
Toutefois, et le plus important est le fait que le schéma proposé ne distingue pas la carte qui
est dans la main. Ainsi, nous avons besoin d'un autre attribut qui indique à quelle main, dans
la mise, qu’une carte appartient :
Mises(MiseID, MainID, valeur, couleur)