{Access} Null et clé étrangère?

Fermé
js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 - 11 oct. 2009 à 03:03
js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 - 12 oct. 2009 à 17:04
Bonjour,

j'aimerai modéliser la conception d'un examen d'analyse bio-médical. Je développe sous VB 6.0 et Access 2003 (d'où l'importance de souligner la limite de la taille de ma Base de Données). Un examen peut avoir une ou plusieurs propriétés et une propriété peut avoir une ou plusieurs valeurs. Maintenant mon problème est que je dois ABSOLUMENT "économiser" de l'espace à cause de la limitation des BD Access. Certains examens ont des propriétés avec des valeurs uniquement numérique (pas plus de 12 caractères) alors que pour d'autres examens les propriétés peuvent être alphanumérique (et pouvant faire plus de 80 caractères). Comment faire pour que je puisse économiser le plus d'espace possible? Je pensais à créer une table examen, une table valeurnumerique et une table valeuralphanumerique ainsi :

Examen(numexamen,dateexamen,numpatient)
Propriete(numpropriete,numexamen,numvaleurnumerique,numvaleuralphanumerique)
Valeurnumerique(numvaleurnumerique,valnumerique)
Valeuralphanumerique(numvaleuralphanumerique,valalphanumerique)


Mais comme un examen a soit des propriétés dont les valeurs sont numériques soit alphanumérique, cela veut dire que je risque d'avoir une valeur vide dans ma table Examen selon que la propriété et numérique ou alphanumérique.

Suis-je sur la bonne voie?

Je reste ouvert à toutes vos questions, suggestions et critiques.

Merci d'avance.

Cordialement.
A voir également:

5 réponses

js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 4
11 oct. 2009 à 13:56
Quelqu'un pourrait-il venir à me secours s'il vous plaît? Aidez-moi, je vous en prie.

Merci d'avance.

Cordialement.
0
Bonjour,
Je te conseille de modifier la structure de cette façon :
Examen(numexamen, dateexamen, numpatient)
Propriete(numpropriete, numexamen, idvaleur, typeProp)
Valeurnumerique(idvaleur, valnumerique)
Valeuralphanumerique(idvaleur, valalphanumerique)

C'est à dire mettre une unique case de numéro de valeur dans la table propriété et une valeur qui vaudra 0 (alphanum) ou 1 (num)
choisir le type numérique le plus petit, genre TINYINT ou SMALLLINT.


De cette façon :

Ta table Propriété a des enregistrement plus petits, puisque la taille d'une des colonnes restantes a été diminuée.

Il y aurait une deuxième option, mais qui est moins économe en place :

Examen(numexamen, dateexamen, numpatient)
Propriete(numpropriete, numexamen, typeProp)
Valeurnumerique(numexamen, numpropriete, valnumerique)
Valeuralphanumerique(numexamen, numpropriete, valalphanumerique)


Cette version,donne une table de propriétés encore plus petite, mais par ontre les tables de valeurs ont une colonne de plus, et donc le gain est moindre.
0
js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 4
11 oct. 2009 à 20:13
Bonjour java4ever et Merci pour ton aide. En effet, ta première solution me semble très bonne. Le seul hic c'est que dans Access, il n'y a ni TINYINT ni SMALLINT (mais ce n'est pas bien grave). Concernant ta deuxième solution soit, je n'ai pas compris soit je pense qu'il faut remplacer :

Valeurnumerique(numexamen, numpropriete, valnumerique)
Valeuralphanumerique(numexamen, numpropriete, valalphanumerique)


par

Valeurnumerique(numvaleurnumerique, numpropriete, valnumerique)
Valeuralphanumerique(numvaleuralphanumerique, numpropriete, valalphanumerique)


Est-ce bien cela?

Merci d'avance.

Cordialement.
0
Bonjour js8bleu,
et excuses-moi, je n'avais pas fait, à tort, une réponse orientée ACCESS, mais seulement globale.

Sous ACCESS, je pense que tu peux utiliser le type 'Octet' ou même le type 'Oui/Non' s'il n'y a que 2 cas possibles

Pour ce qui est de la solution 2, même si ce n'est effectivement pas celle dont tu as besoin,

mais ce que j'ai écrit est bien ce à quoi je pense (il faut prendre les 4 tables en compte):
Examen(numexamen, dateexamen, numpatient)
Propriete(numpropriete, numexamen, typeProp)
Valeurnumerique(numexamen, numpropriete, valnumerique)
Valeuralphanumerique(numexamen, numpropriete, valalphanumerique)


Dans ce cas, je fais l'association suivante : la clé primaire d'une propriété étant supposée être <numpropriete, numexamen>, on peut
associer :
1) une valeur (si les clés primaires des tables Valeurnumerique et Valeuralphanumerique sont aussi <numpropriete, numexamen>
2) plusieurs valeurs si pour ces deux tables de valeurs, il y a seulement un index non unique sur ces colonnes, mais pas de KP.

En fait, on peut même aller plus loin dans l'économie si la clé primaire de ta table Propriete est uniquement <numpropriete>
En effet cela devient :

Examen(numexamen, dateexamen, numpatient)
Propriete(numpropriete, numexamen, typeProp) avec clé primaire 'numpropriete'
Valeurnumerique(numpropriete, valnumerique)
Valeuralphanumerique(numpropriete, valalphanumerique)


Et là, on a encore gagné de la place, puisque la table propriété a une colonne de moins que dans ta version initiale, mais il a l'hypothèse sur la clé primaire qui n'est pas forcément la bonne solution !

Bon, c'est juste un exercice de style, puisque, comme tu l'as fait justement remarquer, c'est probablement la 1ère solution qui te concerne !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 4
12 oct. 2009 à 17:04
Bonjour et Merci java4ever pour ton intérêt. Ta dernière solution me paraît bien sauf que je ne sais pas où est passé la clé de la table Valeurnumerique(numvaleurnumerique) et celle de table Valeuralphanumerique(numvaleuralphanumerique)? Sinon voici aussi un MCD que je te propose de voir et de me donner ton avis (s'il te plaît) :

http://www.cijoint.fr/cjlink.php?file=cj200910/cijnboypsE.jpg

Merci d'avance.

Cordialement.
0