IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Modélisation de métiers (MCD) / clés étrangères nulles


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Modélisation de métiers (MCD) / clés étrangères nulles
    Bonjour,

    Je ne suis pas informaticien et je réalise mon premier MCD.

    Avant de créer la base PostgreSQL, j’ai encore quelques questions avant de basculer sur le MLD et le code SQL associé (sous DB-Main).

    La question principale concerne les fonctions/métiers des salariés.
    Nous souhaitons pouvoir faire des recherches par service, par pouvoir décisionnel, par fonction et par spécialité.

    Afin d’éviter la redondance et aussi d’avoir le moins de fonctions possibles, tout en gardant le niveau de précision souhaité, j’ai scindé les intitulés de fonctions en 3 parties :
    Catégorie = composant d’une fonction qui se retrouve dans des métiers et services différents
    Exemple : responsable, Directeur, Secrétaire, assistant, etc…
    Précision = composant d’une fonction liée à 1 service
    Exemple : Commercial, Technique, Informatique, Achats, etc….
    Spécialisation CAO = tout composant de la fonction liée à la Conception Assistée par Ordinateur et indépendante du reste
    Exemple = Mécatronique, Méthodes, Calculs/Simulation, etc….
    Un intitulé de fonction doit avoir au minimum 1 de ces 3 valeurs de renseignée, mais pas nécessairement les 2 autres.

    Niveau vue, cela donne :
    CONTACT -- 1,1 – Exercer – 0,N – FONCTION
    FONCTION – 0,1 – Catégoriser – 1,N – JOB_CATEGORIE
    FONCTION – 0,1 – Spécialiser – 1,N – SPE_CAO
    FONCTION – 0,1 – Préciser – 1,N – JOB_PRECISION
    (Et : JOB_PRECISION – 1,1 – Concerner – 1,N – SERVICE)

    PS : oui, pour nous, un contact n’est en base qu’avec une fonction.

    La question est la suivante :
    J’aimerai qu’un métier ne se retrouve qu’1 fois dans la table FONCTION (car la clé primaire de FONCTION va migrer dans la table CONTACT), puis-je définir des occurrences uniques/clés avec des valeurs nulles ? Exemple :
    FONCTION_ID : 12
    JOB_CATEGORIE_ID : Null
    SPE_CAO_ID : 07
    JOB_PRECISION_ID : Null

    Ok, je viens d'apprendre que ce n'est pas possible, par contre, je ne sais pas comment faire du coup car je ne peux pas non plus stocker de valeur Null si j'ai bien compris, cela posera trop de problème.
    Comment puis-je procéder ?

    Merci par avance pour vos réponses.

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Avec un INDEX unique, si je ne m'abuse, c'est possible.

    En effet, une CONTRAINTE d'unicité prends en compte tous les doubles, mais un index unique, lui, voit toutes les valeurs "null" comme une unique ligne.

    En revanche, je ne suis pas certain que ma réponse réponde exactement à la question, car j'ai l'impression que votre demande porte sur un triplet de colonnes.

    Avez-vous un exemple concret (avec des données à nous soumettre ?)
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par renaudjean Voir le message

    La question est la suivante :
    J’aimerai qu’un métier ne se retrouve qu’1 fois dans la table FONCTION (car la clé primaire de FONCTION va migrer dans la table CONTACT), puis-je définir des occurrences uniques/clés avec des valeurs nulles ? Exemple :
    FONCTION_ID : 12
    JOB_CATEGORIE_ID : Null
    SPE_CAO_ID : 07
    JOB_PRECISION_ID : Null
    Bonjour,

    Qu'est-ce qu'un métier ? la combinaison de JOB_CATEGORIE_ID + SPE_CAO_ID + JOB_PRECISION_ID ?

    Si un métier est par exemple "assistant-technique-mécatronique", il faut bien pouvoir l'avoir plusieurs fois, plusieurs employés peuvent exercer ce même métier
    Si par contre le métier est "directeur financier" alors il est normal de garantir l'unicité

    Du coup j'ai un peu du mal à comprendre le besoin

    A priori, je pense qu'il faut revoir votre modèle ainsi :

    EMPLOYE 0,n --- OCCUPER --- 1,1 POSTE
    EMPLOYE 1,n --- PROMOUVOIR (du.. au..) --- 0,n NIVEAU

    POSTE 0,1 --- EXIGER_MINI --- 0,n NIVEAU
    POSTE 0,1 --- EXIGER_MAXI --- 0,n NIVEAU
    POSTE 0,n --- QUALIFIER --- 0,n QUALIFICATION

    NIVEAU 1,1 --- CATEGORISER --- 0,n FONCTION

    Un employé occupe zéro ou plusieurs postes (ex : responsable de projet dans le service xxx de la direction yyy)
    Un employé fait l'objet de promotions successives qui modifient son niveau/échelon

    Pour un poste, on peut définir un niveau/échelon mini
    Pour un poste, on peut définir un niveau/échelon maxi
    Un poste peut nécessiter une ou plusieurs qualifications (ex : maitrise AUTOCAD et ANGLAIS requis)

    Un niveau/échelon appartient à une et une seule fonction (employé, technicien, agent de maitrise, responsable, directeur)

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    La question principale concerne les fonctions/métiers des salariés.
    Un salarié exerce un à plusieurs métier(s), par exemple "Ingénieur en informatique" et exerce une à plusieurs fonction(s), par exemple "Administrateur de base de données".
    Ce sont deux notions différentes, même si parfois ces deux notions peuvent se confondre. Par exemple un comptable (métier) exercera la fonction de comptable, pendant que son voisin de bureau, lui aussi comptable de métier, aura peut-être la fonction de contrôleur comptable (j'invente ; je ne sais même pas si ça existe ).

    Ajoutons qu'une personne est en plus affectée à un poste. Par exemple, mon administrateur de base de données sera peut-être affecté au poste de responsable des bases de données, parmi tous les administrateurs de BDD qui seront sous son autorité.

    Pour reprendre vos termes, un salarié pourra être "dessinateur-projeteur" de métier, exercer la fonction de "opérateur CAO/DAO" et être affecté au poste de "dessinateur CAO/DAO mécatronique".
    Son voisin de bureau, un peu plus qualifié que lui, aura le même métier et la même fonction mais sera affecté au poste de "Projeteur CAO/DAO en mécatronique".

    Je pense que vous devriez clarifier ces notions dans votre contexte avant d'aller plus loin.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour renaudjean,

    Je te propose ce mcd avec le pré requis suivant:
    • Le CAO est pour un est un seul service


    Nom : salarie_cmd.jpg
Affichages : 305
Taille : 49,0 Ko

    Bonjour chez vous
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par renaudjean Voir le message

    La question est la suivante :
    J’aimerai qu’un métier ne se retrouve qu’1 fois dans la table FONCTION (car la clé primaire de FONCTION va migrer dans la table CONTACT), puis-je définir des occurrences uniques/clés avec des valeurs nulles ? Exemple :
    FONCTION_ID : 12
    JOB_CATEGORIE_ID : Null
    SPE_CAO_ID : 07
    JOB_PRECISION_ID : Null

    Ok, je viens d'apprendre que ce n'est pas possible, par contre, je ne sais pas comment faire du coup car je ne peux pas non plus stocker de valeur Null si j'ai bien compris, cela posera trop de problème.
    Comment puis-je procéder ?

    Merci par avance pour vos réponses.
    Ne confondez pas clef informatique et clef fonctionnelle. La solution est d'avoir dans vos trois tables, qui raffine de plus en plus la fonction, une clef informatique (auto incrément) et une clef fonctionnelle. Cette dernière est généralement un littéral et peut être une chaine vide ! Dans ce cas, je forcerait la clef informatique à zéro.

    Bien entendu il faut rattacher au plus fin.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/07/2008, 11h16
  2. Réponses: 4
    Dernier message: 02/04/2008, 14h27
  3. JS : controler de selection de choix unique sur valeur type liste
    Par LutorCorp dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/09/2007, 15h38
  4. [XI] comment obtenir uniquement la valeur entiere d'un nombre ?
    Par c_moi_c_moi dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 18/06/2007, 14h04
  5. Sql Server Express - Probleme index unique et valeurs null
    Par Fayoul dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/02/2006, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo