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

MS SQL Server Discussion :

Représenter une relation 1 -- 0,1 dans un schéma


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut Représenter une relation 1 -- 0,1 dans un schéma
    Bonjour, comment puis je traduire une relation de type 1 ---- 0,1 au niveau d'un schema ms sql server ?

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous voulez dire dans un MPD SQL Server ou un MCD ?

    @++

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Par une double jointure entre les clef primaires de chacune des tables.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T_HOM (HOM_ID, HOM_NOM)
    T_FEM (FEM_ID, FEM_NOM)
    Et si HOM est marié à FEM en 1:1 alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE T_HOM ADD FEM_ID INT NULL CONSTRAINT FK_HOM_FEM FOREIGN KEY REFERENCES T_FEM (FEM_ID)
     
    ALTER TABLE T_FEM ADD HOM_ID INT NULL CONSTRAINT FK_FEM_HOM FOREIGN KEY REFERENCES T_HOM (HOM_ID)
    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/ * * * * *

  4. #4
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Ma relation est la suivante : une demande peut avoir 0 ou 1 rejet mais le rejet a automatiquement une seule demande, si j'ai trés bien compris j'aurais une clé étrangère dans les deux coté ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Oui, et il faudra faire une jointure avec les deux colonnes...

    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/ * * * * *

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Citation Envoyé par Msysteme Voir le message
    Ma relation est la suivante : une demande peut avoir 0 ou 1 rejet mais le rejet a automatiquement une seule demande, si j'ai très bien compris j'aurais une clé étrangère dans les deux coté ?
    La double clé étrangère engendre un cycle, ce qui n’est jamais à recommander. Je propose une alternative.

    Dans ce qui suit, j’utilise l’AGL Power AMC (V11).

    Le rejet est une propriété de la demande. Conceptuellement, si vous décidez de définir une entité-type Demande et une entité-type Rejet, le MCD (représentation Entité/Relation) est alors le suivant :




    Le MLD généré par l’AGL est le suivant :



    La table Demande a pour clé primaire DemandeId.
    La table Rejet a aussi pour clé primaire DemandeId, qui est simultanément clé étrangère.

    Le code SQL généré par l’AGL est le suivant :
    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 Demande (
       DemandeId            Int                  Not null,
       DemandeTexte         Varchar(128)         Not null,
       Constraint Demande_PK Primary Key  (DemandeId)
    ) ;
     
    Create Table Rejet (
       DemandeId            Int                  Not null,
       RejetMotif           Varchar(128)         Not null,
       Constraint Rejet_PK Primary Key  (DemandeId),
       Constraint Rejet_Demande_FK1 Foreign Key (DemandeId)
          References Demande (DemandeId)
             On Delete Cascade
    ) ;

    Diagramme proposé par SQL Server à partir du code ci-dessus :

    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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 »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Oui, mais là tu triches... Car tu utilise un héritage !!!
    Entre nous c'est quand même la meilleure solution !

    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/ * * * * *

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par SQLpro Voir le message
    Oui, mais là tu triches... Car tu utilise un héritage !!!
    Je réfute. J'ai écrit que Rejet est une entité-type faible, relativement à l'entité-type Demande. Si j'en étais passé par l’héritage, j’aurais utilisé la représentation suivante :

    Qui signifie qu’un rejet est une demande spécialisée, ce qui est sémantiquement absurde. Mon MCD initial met en jeu le mécanisme de composition au sens UML du terme. Autrement dit, une demande comporte facultativement un rejet.

    Si je remplace Demande et Rejet par Guitare et Rosace, je dis qu’une guitare comporte parfois une rosace, dont je peux donner toute description. Il serait absurde en l’occurrence de parler d’héritage, car cela reviendrait à dire qu’une rosace est une guitare.

    Si je demande à Power AMC de produire un diagramme de classes à partir de mon MCD initial, il me fournit le résultat suivant, qui correspond bien à une composition :



    Alors que si j’avais utilisé l’héritage, il m’aurait fourni le diagramme de classes suivant :


    Ce qui n’est quand même pas pareil.

    => Ne pas confondre héritage et composition, car ce genre d’erreur peut inciter à parler à tort de tricherie.

    Quod erat demonstrandum.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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 »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  9. #9
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    , mais est ce que cela ne va pas me crée des problèmes au niveau developpement ?

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Msysteme Voir le message
    , mais est ce que cela ne va pas me crée des problèmes au niveau developpement ?
    A quel message faites-vous référence ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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 »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Au final est tu capablme de distinguer dans le MPD la différence ? Moi pas (mais à mon âge la vue baisse !).

    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/ * * * * *

  12. #12
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonjour,

    Citation Envoyé par SQLpro Voir le message
    Au final est tu capablme de distinguer dans le MPD la différence ? Moi pas (mais à mon âge la vue baisse !)
    Concernant la vue, il faudra consulter un oculiste.

    S’il fallait chercher une différence, je le ferais au niveau du MLD, car je ne pense pas que le MPD, c'est-à-dire la quincaillerie (index, buffer pools, méthodes d’accès aux fichiers et toutes ces sortes de choses propres à chaque SGBD) ait à voir avec le sujet.

    Quoi qu’il en soit, au niveau conceptuel où l’on doit appréhender les choses d’un point de vue sémantique, on doit être à même de bien percevoir la différence qu’il y a entre avoir et être, c'est-à-dire entre composition et généralisation/spécialisation.

    Ainsi, j’ai défendu la thèse selon laquelle un rejet n’est pas une demande. Mais, si ma prime de fin d’année en dépendait (le chef étant très chatouilleux et se piquant en effet de mieux connaître que quiconque des sujets pour lesquels il est incompétent), je défendrais la thèse inverse, à savoir qu’une demande rejetée est une demande et j’aménagerais mon MCD de la façon suivante :



    Tout en observant qu’une demande rejetée ne naît pas directement en tant que telle, sinon ça n’est pas la peine d’effectuer la demande. En réalité, une demande naît, puis il s’écoule un laps de temps avant qu’elle puisse faire l’objet d’un rejet, ce qui revient à dire, que dans cet exemple, la généralisation/spécialisation ne se justifie pas sémantiquement parlant et que la modélisation que je viens de proposer est fortement critiquable. Ne confondons pas classification et changement d’état. Ainsi, le chat le chien et la souris sont des animaux mais un chat restera toujours un chat, en vertu de quoi la classification et l’héritage s’imposent dans cet exemple animalier.

    En tout cas, quelle que soit l’option de modélisation que j’ai retenue : composition ou généralisation/spécialisation, il est évident que le MLD produit par dérivation sera le même, donc qu’une rétroconception effectuée à l’aide d’un AGL donnera vraisemblablement lieu à un MCD orienté composition, au risque de décevoir celui qui attendait autre chose.

    Mais, est-il important au niveau logique de faire la différence et savoir si l’on est en présence, soit d’une composition, soit d’une généralisation/spécialisation ? Vu du Modèle Relationnel de Données, cet aspect sémantique des choses est indifférent. En effet, l’algèbre relationnelle ne comporte pas d’opérateurs en ce sens. Ainsi, quand en 1979, Ted Codd a publié son article Extending the Database Relational Model to Capture More Meaning, il s’est positionné au niveau conceptuel et il a repris en long et en large le thème de la généralisation/spécialisation en s’inspirant des travaux de Smith et Smith. Mais quand dans son ouvrage de 1990 The Relational Model for Database Management: Version 2 il en revient au Modèle Relationnel de Données pur et dur, il n’en souffle pas un mot.

    Quoi qu’il en soit, à l’attention de celui qui a modélisé une généralisation/spécialisation au niveau conceptuel, il me paraît nécessaire et suffisant que l’on crée une vue (par exemple Rejet) qui soit la jointure naturelle de la table Demande et de la table Demande_Rejetee.

    Ainsi, on pourra :

    Accéder aux propriétés qui concernent toutes les demandes (table Demande).
    Accéder aux propriétés propres aux demandes rejetées (table Demande_Rejetee).
    Accéder à toutes les propriétés concernant les demandes rejetées (vue Rejet).
    Insérer des demandes non rejetées (table Demande).
    Insérer des demandes rejetées d’office (vue Rejet, et à condition bien sûr que le SGBD soit à niveau, qu'il n’interdise pas les mises à jour des vues de jointure).
    Etc.

    Le Modèle Relationnel de Données prend bien entendu en compte les concepts de généralisation/spécialisation et d’héritage, qui font l’objet des chapitres 12 à 16 de l’ouvrage de Date et Darwen Databases, Types, and the Relational Model, The Third Manifesto, mais ce sont les types qui sont concernés et non pas les tables. Il s’agit d’un autre sujet.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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 »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. Comment représenter une contrainte dans une relation ?
    Par ecervetti dans le forum Langage SQL
    Réponses: 11
    Dernier message: 16/02/2009, 16h35
  2. [MCD] Représenter une relation d'aggrégation
    Par ben_inpt dans le forum Schéma
    Réponses: 9
    Dernier message: 27/03/2008, 09h38
  3. Réponses: 18
    Dernier message: 26/11/2007, 15h43
  4. [XML Schema] Représenter une auto-relation en XSD
    Par Benne dans le forum Valider
    Réponses: 1
    Dernier message: 16/03/2006, 17h00
  5. Question sur une relation ternaire dans un MCD
    Par sylsau dans le forum Schéma
    Réponses: 5
    Dernier message: 05/03/2006, 20h00

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