Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre régulier
    Inscrit en
    mars 2005
    Messages
    364
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : mars 2005
    Messages : 364
    Points : 86
    Points
    86

    Par défaut Relation 1-1 : où mettre la clé ?

    Bonjour,
    J'aurai aimé votre avis sur une question de conception... J'ai bien ma petite idée, mais je pense qu'un autre avis serait pas mal...

    J'ai une table PROFIL(id, nom, prenom, age) et mon profil peut-être soit acheteur, soit vendeur. J'ai donc 2 tables :
    - PROFIL_VENDEUR(id, prix_moyen, mode_paiement)
    - PROFIL_ACHETEUR(id, habitudes, points)

    Du coup j'ai une relation 1-1 entre PROFIL_VENDEUR et PROFIL : 1 PROFIL_VENDEUR peut avoir 1 et 1 seul PROFIL
    J'ai la même relation entre PROFIL_ACHETEUR et PROFIL.

    Par contre à l'inverse, j'ai une relation 0-1 entre PROFIL et mes PROFIL_VENDEUR et PROFIL_ACHETEUR : 1 PROFIL peut avoir soit un PROFIL_VENDEUR, soit un PROFIL_ACHETEUR. Dans mon cas c'est exclusif, on est soit vendeur, soit acheteur !

    Du coup il va ma falloir des clés étrangères pour lier tous ça... Et voici ma question :
    1- Est-ce que je mets une clé PROFIL dans mes tables vendeur et acheteur ?
    2- Est-ce que je mets 2 clés, une vendeur et une acheteur, dans ma table PROFIL ?

    Merci de votre avis.
    Jérôme

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 454
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 454
    Points : 4 011
    Points
    4 011

    Par défaut

    Bonjour,

    Puisque visiblement vous en êtes à la conception, une première remarque : Votre table PROFIL ne respecte pas la première forme normale : la colonne age n'est pas constante dans le temps : dans un an vos données seront incorrectes ! stockez plutôt une date de naissance, vous pourrez facilement en déduire l'age.

    Pour vos questions maintenant
    1- Est-ce que je mets une clé PROFIL dans mes tables vendeur et acheteur ?
    Oui. elles seront pas ailleurs la clef primaire de ces tables.

    2- Est-ce que je mets 2 clés, une vendeur et une acheteur, dans ma table PROFIL ?
    Non, une unique colonne ID_PROFIL de la table mère servira de clef primaire pour les tables filles, et vous gérez votre exclusion par le biais de déclencheurs

    Pour plus de détails : http://sqlpro.developpez.com/cours/m...n/heritage/#L5

  3. #3
    Membre régulier
    Inscrit en
    mars 2005
    Messages
    364
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : mars 2005
    Messages : 364
    Points : 86
    Points
    86

    Par défaut

    Merci de votre réponse.
    Pour l'age je savais, mais c'était pour donner l'idée du smilblick...
    Donc c'est ce que je pensais, il faut prendre la solution 1.
    Merci beaucoup !
    Jérôme

  4. #4
    Expert Confirmé Sénior
    Avatar de fsmrel
    Homme Profil pro François de Sainte Marie
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    4 409
    Détails du profil
    Informations personnelles :
    Nom : Homme François de Sainte Marie
    Localisation : Autre

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2006
    Messages : 4 409
    Points : 11 162
    Points
    11 162

    Par défaut

    Bonsoir,


    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,
    Puisque visiblement vous en êtes à la conception, une première remarque : Votre table PROFIL ne respecte pas la première forme normale : la colonne age n'est pas constante dans le temps : dans un an vos données seront incorrectes ! stockez plutôt une date de naissance, vous pourrez facilement en déduire l'age.
    Le conseil que vous donnez de préférer une colonne de type Date plutôt que de type Âge est le bon. En revanche, la première forme normale est parfaitement étrangère à cette histoire. Prenons la définition qui en est donnée par C.J. Date — la référence mondiale incontestée sur ce sujet — dans Database Design & Relational Theory, je cite et traduis :
    Définition : Soit une relation r ayant pour attributs A1, ..., An, respectivement de type T1, ..., Tn. Alors r est en première forme normale (1NF) si et seulement si pour tous les tuples t appartenant à r, la valeur de l’attribut Ai dans t est du type Ti (i = 1, ..., n).

    En d’autres termes, par définition chaque relation est en 1NF ! Pour dire les choses autrement, la 1NF signifie seulement que chaque tuple de la relation contient exactement une valeur du type approprié, pour chaque attribut.

    Maintenant, une valeur de table SQL n’est pas forcément une relation et pour en être une et donc respecter la 1NF, elle doit respecter les contraintes suivantes :
    1. Pas d’ordre de rangement quel qu’il soit pour les lignes de la table.
    2. Pas d’ordre de rangement quel qu’il soit pour les colonnes de la table.
    3. Pas de lignes en double.
    4. Chaque intersection d’une ligne et d’une colonne contient exactement une valeur du type applicable, et rien d’autre.
    5. Toutes les colonnes sont régulières.
    En particulier, le point 4 signifie qu’une colonne donnée ne peut pas contenir une liste ou un tableau de valeurs, c'est-à-dire un groupe répétitif de valeurs. De même, NULL n’est pas une valeur et provoque donc un viol de la 1NF.

    Pour sa part, le point 5 signifie que chaque colonne a un nom et ce nom est unique dans l’en-tête de la table (sont évidemment visés les résultats des requêtes SQL, au nom du principe de fermeture : le mariage d’une table et d’une table est aussi une table et pas un machin ne ressemblant ni à son père ni à sa mère). Par ailleurs, une table ne peut pas héberger de colonne cachée, du genre Object ID, timestamp, etc.


    Une dernière remarque :

    Au niveau sémantique (MCD Merise, diagramme de classes UML), la structure présentée par Jejeman est caractéristique de la généralisation/spécialisation :


    MCD Merise (avec Power AMC)




    MLD dérivé




    Avec MySQL Workbench (gratuit, pourvu que ça dure...)

    Faites simple, mais pas plus simple ! (A. Einstein)
    E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)


    De grâce, pas de questions techniques par MP, ma boîte de réception explose !
    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 454
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 454
    Points : 4 011
    Points
    4 011

    Par défaut

    Merci fsmrel pour ces précisions

    J'ai en effet trop tendance à croire ce que l'on raconte ci et plutot que de me fier aux fondamentaux dont la qualité n'est plus à démontrer.
    278 pages, pfiou... quand je vois le temps qu'il m'a fallu pour comprendre le titre

  6. #6
    Expert Confirmé Sénior
    Avatar de fsmrel
    Homme Profil pro François de Sainte Marie
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    4 409
    Détails du profil
    Informations personnelles :
    Nom : Homme François de Sainte Marie
    Localisation : Autre

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2006
    Messages : 4 409
    Points : 11 162
    Points
    11 162

    Par défaut

    Bonjour aieeeuuuuu,


    Il est un fait que ce qui est écrit dans Wiki est affligeant, mais c’est Wiki. Quant au 2e lien, je n’ai pas pu l’ouvrir, mais je me doute que ça ne doit pas être triste là non plus. Merci pour les fondamentaux, lesquels ne sont du reste pas à l’abri d’erreurs...

    J’essaierai de faire un peu de bac à sable Wiki, puis de faire le ménage, mais j'avoue que je ne sais pas quand.
    Faites simple, mais pas plus simple ! (A. Einstein)
    E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)


    De grâce, pas de questions techniques par MP, ma boîte de réception explose !
    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •