Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD
Décisions SGBD Forum de décisions sur le choix en bases de données. Le Comparatif
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2005, 11h56   #1
Invité de passage
 
Inscription : mai 2002
Messages : 15
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 15
Points : 4
Points : 4
Par défaut Petite Question Modélisation

Bonjour,
j'ai tjrs été tracassé par ce problème alors je vous demande votre avis

Regardez cet exemple simple de SI :

Un employé fait partie de 0 ou 1 société. Une société a 1 à n employés.

Merise nous donne le modèle physique suivant :


Mais dans le cas où un employé n'a PAS de société, vous mettez une valeur null dans le champ id_societe de la table employe ?
Dans ce cas il n'y a plus d'intégrité référentielle, si ?
Et puis c'est un peu chiant à gérer, non ?
Ne vaudrait-il pas mieux faire une table de liaison ?

Merci bcp pour vos réponses !
TiEuM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 12h25   #2
Membre chevronné
 
Avatar de pinocchio
 
Homme François
Développeur informatique
Inscription : novembre 2002
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 35
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : novembre 2002
Messages : 773
Points : 787
Points : 787
Que ce soit chiant est une chose mais ca doit passer après.
Pour l'intégrité référentiel, y'a pas de souci.
Pour les liasons, ce sera un left join ou right join (ce qui alourdit un peu le temps d'éxcution).
Avec une table de liaison tu casses complétement ton schéma. Un employé peut avoir plusieurs sociétés (c'est pas forcément faux d'ailleurs) ce que tu ne désires pas. Ca te fait donc rajouter des contrôles.
NULL est une valeur à part entière.
Bon courage
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 13h23   #3
Invité de passage
 
Inscription : mai 2002
Messages : 15
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 15
Points : 4
Points : 4
Ok merci beaucoup Pinocchio ...
Je voulais surtout cette confirmation que c'est bien la méthode répandue d'utiliser null dans ce cas
Parce que c'est jamais précisé dans les tutos merise par exemple
TiEuM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 16h31   #4
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 450
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 450
Points : 7 559
Points : 7 559
Dans la pratique, on utilise souvent un identifiant "poubelle" (non défini, 9999, ...) dans la table de référence.
L'avantage est qu'on évite les jointures externes, et donc on diminue la charge système.
En plus, on évite de "perdre" des enregistrements si, par inadvertance, on utilise un INNER JOIN à la place du OUTER JOIN (outils de consultation mis à la disposition des utilisateurs...)
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2005, 09h34   #5
Futur Membre du Club
 
Inscription : janvier 2004
Messages : 46
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 46
Points : 19
Points : 19
Par défaut Re: Petite Question Modélisation

Citation:
Envoyé par TiEuM
Un employé fait partie de 0 ou 1 société. Une société a 1 à n employés.
Juste une remarque, même si ce n'est pas le vrai problème :
On ne peut pas être employé d'aucune société ... car sinon on a aucune raison d'être dans la table EMPLOYE.

Dans le cas contraire (si on supose que l'on peut être employé d'aucune société), une société devrait alors pouvoir aussi avoir 0 employé !!

je dis des bêtises ?

izioto
izioto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2005, 16h51   #6
Invité de passage
 
Inscription : mai 2002
Messages : 15
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 15
Points : 4
Points : 4
peu importe c'était juste pour avoir un exemple de cardinalité 0:n

al1_24 merci mais d'un point de vue logique je préfère la valeur null à l'identifiant poubelle
TiEuM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 14h38   #7
Invité de passage
 
Inscription : mai 2005
Messages : 5
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 5
Points : 4
Points : 4
Salut,

le souci du NULL c'est que tu vas devoir faire des jointures externes à chaque requetes ce qui est tres penible. Il vaut vraiment mieux avoir un code à la noix (XXX) avec un libellé associé (Non défini) comme le dit al1_24 !

En plus :
- si ton volume augmente, les jointures externes seront tres penalisantes.
- si qq un d'autre que toi fait une requete, il n'y pensera pas forcément et "ratera" des enregistrements.

@+.
zigwen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 14h53   #8
Membre chevronné
 
Avatar de pinocchio
 
Homme François
Développeur informatique
Inscription : novembre 2002
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 35
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : novembre 2002
Messages : 773
Points : 787
Points : 787
Je ne suis pas d'accord du tout.
La valeur NULL est une valeur qui exprime le cas souhaité.
La valeur xxx est une valeur poubelle et elle porte bien son nom!!!
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 16h01   #9
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 793
Points : 17 793
A Al1_24 :
Au sujet de l'évitement des NULL :
Citation:
Dans la pratique, on utilise souvent un identifiant "poubelle" (non défini, 9999, ...) dans la table de référence.
C'est une imbécilité gravissime...

Un petit exemple de cette stupidité debile :

dans le schéma précédent, calculer le nbre d'employés qui ne relève pas d'une société définie...

Code :
1
2
3
SELECT COUNT(*)
FROM   EMPLOYE
WHERE  ID_SOCIETE = monCodeALaCon
Dans les 9/10° des cac, celui qui va faire la requête obliera le WHERE ou le code à la con. Alors que c'est si simple de faire intelligemment avec les marqueurs NULL :

Code :
1
2
SELECT COUNT(ID_SOCIETE)
FROM   EMPLOYE
Et plus performant !


A Pinocchio :
Citation:
NULL est une valeur à part entière.
Non, c'est justement l'absence de valeur.
A lire sur les erreurs SQL et notamment sur le NULL : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L3
Il est navrant de trouver dans les forums des réponses aussi nulles !!!

Au sujet des marqueurs NUL :
http://sqlpro.developpez.com/cours/null/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h03.


 
 
 
 
Partenaires

Hébergement Web