Bonsoir,
Les valeurs légales définies pour le type (domaine) P# des numéros de [type de] pièce sont effectivement de la forme Px. Autrement dit, P1 est une valeur légale, P2 et P3141 le sont aussi, mais pas la paire P1, P2.
Pour mémoire, la construction datienne est la suivante (Date donne l’exemple du domaine S# des numéros de fournisseur (cf. Databases, Types, and The Relational Model, page 32), mais cela vaut pour les numéros de type de pièce, toutes choses égales) :
POSSREP signifie « une représentation possible », car par exemple dans le cas coordonnés d’un point dans un espace à deux dimensions on peut préférer une représentation à une autre, à savoir coordonnées polaires vs. coordonnées cartésiennes :Code:
1
2
3
4 TYPE P# POSSREP {C CHAR CONSTRAINT SUBSTR (C, 1, 1) = 'P' AND CHAR_LENGTH (C) >= 2 AND CHAR_LENGTH (C) <= 5 AND IS_NUMERIC (SUBSTR (C, 2, 4) } ;
P# est « possiblement représenté » par une chaîne de caractères C de deux à cinq caractères (CHAR chez Date est à interpréter comme VARCHAR en SQL), dont le premier est astreint à être le caractère "P" et les suivants à représenter un nombre (disons un entier >= 0 et <= 9999).Code:
1
2 TYPE POINT POSSREP CARTESIAN {X RATIONAL, Y RATIONAL) POSSREP POLAR {RHO RATIONAL, THETA RATIONAL) ;
En passant, on observera qu'avec la structure retenue pour le type P#, il faudra se lever de bonne heure pour arriver à violer la 1NF...
Cet attribut étant du type VARCHAR(100), sa seule contrainte est de prendre des valeurs qui soient des chaînes de caractères limitées à 100 caractères. Comme la virgule (',') fait partie des caractères légaux au même titre que les caractères 'P', '1', '2', '3', la chaîne de caractères 'P1, P2, P3' est bien une valeur légale du type VARCHAR(100) et par contrecoup la 1NF est respectée.