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

Développement SQL Server Discussion :

Modélisation de tables génériques


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut Modélisation de tables génériques
    Bonjour,

    En fait je n'ai pas un problème à proprement parlé mais une question générale sur la modélisation.

    J'ai une table dont l'ID lié peut servir à 3 autres tables.

    La solution 1ère est de faire :
    TABLE ENFANT
    ID
    ID_TABLE_PARENT_TRUC
    ID_TABLE_PARENT_MACHIN
    ID_TABLE_PARENT_BIDULE

    C'est vrai que c'est logique.. Mais j'ai une autre idée (que j'ai mise en place et qui fonctionne très bien) :

    TABLE_ENFANT
    ID
    ID_GENERIQUE
    TYPE_LIAISON (chaine = à "truc", "machin" ou "bidule").

    Outre le fait que cette modélisation ne soit pas "normée".. qu'en pensez-vous ? avez-vous déjà vu (ou réalisé) ce type de modélisation ?

    En vous remerciant pour vos avis,

    Ps : Le développement que je suis en train de faire en C# + Linq fonctionne très bien en revanche j'ai du cocher à non : "Appliquer la contrainte de clé étrangère" dans SQL Server sur les relations.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Bien sur que c'est normalisé, cela s'appelle un héritage...
    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/m...tion/heritage/

    Bref, vous devez passer par une table Mère et une exclusion mutuelle entre les filles.

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

  3. #3
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut
    Merci pour ton éclaircissement et je vais voir de suite cet article

  4. #4
    Membre expérimenté
    Inscrit en
    Juin 2006
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 229
    Par défaut
    Bonjour,

    Pouvez-vous donner un exemple concret de ce que vous êtes en train de faire ?
    C'est pour ma culture personnelle.

    @+

  5. #5
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut
    Faudrait que je t'explique le projet c'est un peu long...

    Clairement tu as ce que je veux dans le message (et je le redis : ça fonctionne très bien) :

    Imaginons que pour une contrainte quelconque tu aies une table :

    Situations
    ID
    NOM
    PRENOM
    AGE

    Tu as 3 tables qui utilisent les "situations" et tu ne veux pas faire de table intermédiaire.
    Par exemple : Contacts, Divers et Vips

    Ces 3 tables ont les mêmes champs que "Situations"

    Ca deviendrait "habituellement" :
    Situations
    ID
    ID_Contacts
    ID_Divers
    ID_Vips
    NOM
    PRENOM

    Et bien moi j'utilise une autre technique :
    Situations
    ID
    ID_Generic
    Type_liaison (= "contacts" ou "Divers" ou "Vips")
    NOM
    PRENOM
    AGE

    Voilà.
    L'exemple est bidon, les contraintes sont différentes etc.. Mais le principe c'est ça.

  6. #6
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Hello,

    Je rebondis sur ton message sur une solution que j'ai vue implementee et avec laquelle j'ai travaille.

    Pour ton champs:
    Type_liaison (= "contacts" ou "Divers" ou "Vips")

    Imaginons que tu aies la possibilite d'avoir plusieurs liaisons possibles, cela peut vite devenir un peu "Bordelique" genre un type de liaison :
    contact/divers
    contact/VIP/Divers
    ...

    La solution se fait a l'aide d'une table de reference de type liaison dans le genre:
    id_liaison, type_lisaison, bitWiseCode
    1,contact,1
    2,VIP,2
    3,divers,4

    Le champs bitWiseCode etant le poids de chaque puissance binaire (1,2,4,8...)

    En reutilisant au niveau de type liaison une valeur de type int, tu peux combiner facilement toutes les combinaison:
    exemple:
    Contact et VIP - Type liaison = 3
    Contact et VIP et Divers - Type liaison = 7
    VIP type liaison = 2

    Sur base de la valeur de type liaison, tu peux faire une jointure sur ta table de referenceen te servant de l'operateur binaire & afin de retrouver tout dont tu as besoin.

    Cheers,

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

Discussions similaires

  1. [MS SQL] Problème de modélisation de table
    Par DotNET74 dans le forum Développement
    Réponses: 2
    Dernier message: 24/08/2008, 15h29
  2. [MS-SQL] Modélisation de tables
    Par DotNET74 dans le forum Développement
    Réponses: 5
    Dernier message: 17/08/2008, 19h31
  3. [Séquence] Comment modéliser la table du SGBD à laquelle ma classe accède ?
    Par Mister Nono dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 18/04/2008, 17h37
  4. tables génériques prêtes à l'emploi ?
    Par patbeautifulday1 dans le forum Access
    Réponses: 3
    Dernier message: 20/07/2006, 16h28
  5. Réponses: 5
    Dernier message: 07/07/2006, 05h43

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