oui, mais dans la pratique
petite remarque en passant
Citation:
Envoyé par
orafrance
si fonctionnellement on différencie personne morale et physique alors il n'y a pas de raison de les rassembler techniquement... selon moi :P
je suis sur la fond d'accord, mais d'expérience sur les bases du progiciel Siebel, c'est très souvent le cas.
On distingue souvent un objet métier d'un autre (approchant mais bien distinct) en flaggant l'enregistrement avec une colonne.
Exemple: société, établissement, consortium sont modélisés dans la même table.
Idem pour des offres marketing de haut niveau qui sont dans la même table que des services commerciaux de base.
NULL est-il indispensable?
Bonjour,
Les niveaux de normalisation s'imbriquent. (1)
Pour être en 2NF une relvar doit préalablement être en 1NF. Pour être entre 3NF elle doit préalablement être en 2NF.
Une relvar est en 1NF si chaque n-uplet contient exactement une valeur pour chaque attribut.
NULL n'existe pas. Il est interdit de séjour au pays des Relations me semble t'il.
Donc il me semble normal, sans avoir besoin de rentrer dans le détail que la présence de NULL viole la 3NF (et 2NF), par transitivité en quelque sorte, puisqu'il y a viole de la 1NF.
Une base de donnée est une collection de propositions vraies.
C'est une manière de définir ce qu'est une Relation et indirectement une table. (2)
C'est très simple, et logique.
On peut donc lire tout naturellement les propositions vrais que sont les lignes. Pour une table Client: Client {CODE, NOM, PRENOM)
Le Client identifié par le code C048 s'appelle Jean DUPONT.
Mais pour l'éventuelle table Client avec présence de NULL : Client {CODE, NOM, PRENOM, RAISONSOC}
Le Client identifié par le code C083 s'appelle ??? et a pour raison sociale "Aux deux amis".
Ça a du mal à passer, pour moi en tout cas.
Il est toujours possible de réaliser une base de données dont les tables ne contiennent aucun NULL. Le nombre de table sera certainement plus élevé mais on retrouve ses petits grâce aux vues.
Pour en revenir au problème de kaibaa, à moins que quelque chose m'ait échappé; la difficulté est qu'un contrat concerne soit une personne physique, soit une personne morale.
Au niveau du MCD Merisien cela ressemblerai à ceci:
PersonnePhysique -0,N-------(Concerner)----------0,1- Contrat
PersonneMorale -0,N----------(Concerner)---------0,1- Contrat
Ce que je traduirait au niveau du MLD par les tables suivantes (clé primaires soulignées, clé étrangères en italiques):
PersonnePhysique(Code, nom, prénom, etc..)
PersonneMorale(Code, RaisonSociale, etc..)
Contrat(num, Date, etc..)
Contrat_PersPhysique(numContrat, CodePersPhys)
Contrat_PersMorale(numContrat, CodePersMoral)
Il n'y aura aucun NULL dans les tables. Simplement l'information.
Rien n'empêche d'utiliser des vues par dessus pour représenter les données différemment.
Concernant la gestion des personnes physiques et morales, c'est une simple notion d'héritage; la proposition mnitu/Waldar.
Voyez par exemple ce topic où fsmrel traite le sujet: Modélisation gestion commerciale
Une partie du chapitre auquel fait référence mnitu est visible ici.
(1) Bases de données relationnelles et normalisation - Partie 1.5
(2) Date on database: writtings 2000-2006 - Chapitre 10