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 :

Email d'un utilisateur [MCD]


Sujet :

Schéma

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    octobre 2006
    Messages
    8 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 8 813
    Points : 4 278
    Points
    4 278
    Billets dans le blog
    1
    Par défaut Email d'un utilisateur
    Bonjour,

    je modélise l'email d'un utilisateur. Les règles de gestion sont :

    R01 : un utilisateur a 0 ou 1 email
    R02 : un email appartient à 1 seul utilisateur

    J'ai fait ce MCD Looping :

    Nom : email.png
Affichages : 78
Taille : 10,4 Ko

    Looping a créé ces règles de création de table SQL :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TABLE US_user(
       US_ident INT UNSIGNED AUTO_INCREMENT,
       US_firstname VARCHAR(50),
       US_lastname VARCHAR(50),
       PRIMARY KEY(US_ident)
    );
     
    CREATE TABLE EM_mail(
       EM_ident INT UNSIGNED   AUTO_INCREMENT,
       EM_email VARCHAR(80) NOT NULL,
       US_ident INT UNSIGNED NOT NULL,
       PRIMARY KEY(EM_ident),
       UNIQUE(US_ident),
       FOREIGN KEY(US_ident) REFERENCES US_user(US_ident)
    );
    Je suis surpris que la colonne US_ident de la table EM_mail soit NOT NULL alors que la règle R01 spécifie qu'un utilisateur peut ne pas avoir de email. Donc, quelle est mon erreur ?
    Est-il préférable de créer une seule table US_user avec une colonne US_email qui aurait comme valeur par défaut NULL ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  2. #2
    Membre chevronné
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    juin 2019
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2019
    Messages : 457
    Points : 1 856
    Points
    1 856
    Par défaut
    Bonjour,

    US_ident dans EM_mail est une clé étrangère qui fait référence à l'utilisateur qui possède ce mail, et un mail appartient forcément à un utilisateur (cf. cardinalité 1,1).
    Par conséquent, cette clé étrangère ne peut pas être NULL, sinon cela signifierait qu'un mail peut n'appartenir à personne.
    La cardinalité 0,1 indique bien qu'un utilisateur peut ne pas avoir de mail, ce qui est compatible avec le SQL généré, sachant que la clause UNIQUE garantit qu'un utilisateur ne peut pas posséder plusieurs mails.
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 582
    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 : 7 582
    Points : 25 488
    Points
    25 488
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Attention : la norme autorise jusqu'à 64 caractères pour l'adresse locale et 255 pour le nom du domaine.
    cf. https://www.mindbaz.com/technologie-...-adresse-mail/

    Donc, ainsi modélisée, l'adresse courriel présente un risque avéré de troncature.

    Une solution propre est d'externaliser le nom du domaine comme ceci :
    [US_user] 0,1 --- (has) --- 1,1(R) [EM_email] 1,1 --- (resides) --- 0,n[DM_domain]

    Soit le script DDL suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE TABLE US_user(
       US_ident COUNTER,
       US_firstname VARCHAR(50) NOT NULL,
       US_lastname VARCHAR(50) NOT NULL,
       PRIMARY KEY(US_ident)
    );
    
    CREATE TABLE DM_domain(
       DM_ident COUNTER,
       DM_name VARCHAR(255) NOT NULL,
       PRIMARY KEY(DM_ident),
       UNIQUE(DM_name)
    );
    
    CREATE TABLE EM_email(
       US_ident INT,
       EM_ident SMALLINT,
       EM_address VARCHAR(64) NOT NULL,
       DM_ident INT NOT NULL,
       PRIMARY KEY(US_ident, EM_ident),
       UNIQUE(US_ident),
       FOREIGN KEY(US_ident) REFERENCES US_user(US_ident),
       FOREIGN KEY(DM_ident) REFERENCES DM_domain(DM_ident)
    );

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    octobre 2006
    Messages
    8 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 8 813
    Points : 4 278
    Points
    4 278
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    étant parti en vacances, je ne lis les messages de Paprick et Escartefigue que ce soir. Merci Escartefigue pour le lien. Cependant, je ne comprends pas la différence entre domaine complet et nom de domaine. Pour mieux comprendre, pouvez-vous expliciter cet exemple simple ? gmail.com
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 677
    Points : 33 723
    Points
    33 723
    Billets dans le blog
    14
    Par défaut
    Je dirais que le domaine est gmail et le domaine complet est gmail.com (il peut aussi y avoir gmail.fr par exemple).
    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 !

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    octobre 2006
    Messages
    8 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 8 813
    Points : 4 278
    Points
    4 278
    Billets dans le blog
    1
    Par défaut
    Ouf, c'est enfin résolu

    Vu mes problèmes, je ne suis efficace que le matin, donc comme je n'avais pas fini hier après-midi (j'avais modifié le MCD Looping mais pas mis à jour le code PHP), par crainte (légitime) de tout casser, j'ai mis en pause jusqu'à ce matin. J'ai bien fait, car même ce matin, j'y ai quand même passé plusieurs heures. Le debug pas à pas m'a rendu service. Après moult modifs, c'est au point !
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

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

Discussions similaires

  1. [MySQL-8.0] Insérer l'email d'un utilisateur de licence
    Par laurentSc dans le forum Requêtes
    Réponses: 4
    Dernier message: 09/08/2021, 14h44
  2. Réponses: 1
    Dernier message: 22/04/2021, 21h26
  3. Réponses: 2
    Dernier message: 10/09/2008, 09h45

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