Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/03/2011, 11h27   #1
Membre Expert
 
Avatar de stailer
 
Homme Jean-François CAMBOT
Développeur informatique
Inscription : mars 2003
Messages : 838
Détails du profil
Informations personnelles :
Nom : Homme Jean-François CAMBOT
Âge : 33
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2003
Messages : 838
Points : 1 101
Points : 1 101
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.
__________________
.o0o__St@iLeR__oOo.

Chef de projet / Développeur

Silverlight / ASP.NET MVC - MCP ASP.NET 4
Zend Framework / Ajax (Jquery et ExtJS)
Adobe Flash Builder (Flex)

Ma librairie pour faire communiquer PHP et Silverlight "à la" WCF : http://code.google.com/p/phpservices-silverlight/
stailer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 11h57   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 12h11   #3
Membre Expert
 
Avatar de stailer
 
Homme Jean-François CAMBOT
Développeur informatique
Inscription : mars 2003
Messages : 838
Détails du profil
Informations personnelles :
Nom : Homme Jean-François CAMBOT
Âge : 33
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2003
Messages : 838
Points : 1 101
Points : 1 101
Merci pour ton éclaircissement et je vais voir de suite cet article
__________________
.o0o__St@iLeR__oOo.

Chef de projet / Développeur

Silverlight / ASP.NET MVC - MCP ASP.NET 4
Zend Framework / Ajax (Jquery et ExtJS)
Adobe Flash Builder (Flex)

Ma librairie pour faire communiquer PHP et Silverlight "à la" WCF : http://code.google.com/p/phpservices-silverlight/
stailer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 13h50   #4
Membre actif
 
Inscription : juin 2006
Messages : 161
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 161
Points : 154
Points : 154
Bonjour,

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

@+
Zabriskir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 14h32   #5
Membre Expert
 
Avatar de stailer
 
Homme Jean-François CAMBOT
Développeur informatique
Inscription : mars 2003
Messages : 838
Détails du profil
Informations personnelles :
Nom : Homme Jean-François CAMBOT
Âge : 33
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2003
Messages : 838
Points : 1 101
Points : 1 101
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.
__________________
.o0o__St@iLeR__oOo.

Chef de projet / Développeur

Silverlight / ASP.NET MVC - MCP ASP.NET 4
Zend Framework / Ajax (Jquery et ExtJS)
Adobe Flash Builder (Flex)

Ma librairie pour faire communiquer PHP et Silverlight "à la" WCF : http://code.google.com/p/phpservices-silverlight/
stailer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 11h54   #6
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

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

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
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,
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 18h07   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Bonjour,

Je travaille dans le domaine hospitalier, et la modélisation comprend une entité personne.
Le personne_id est référencé dans les tables employe, patient, ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 09h03   #8
Membre Expert
 
Avatar de stailer
 
Homme Jean-François CAMBOT
Développeur informatique
Inscription : mars 2003
Messages : 838
Détails du profil
Informations personnelles :
Nom : Homme Jean-François CAMBOT
Âge : 33
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2003
Messages : 838
Points : 1 101
Points : 1 101
@pti dje
Citation:
La solution se fait a l'aide d'une table de reference
Ca par contre j'ai jamais fait !
Pas mal.. intéressant comme solution.
Je crois que SQLPro l'évoque dans son article
__________________
.o0o__St@iLeR__oOo.

Chef de projet / Développeur

Silverlight / ASP.NET MVC - MCP ASP.NET 4
Zend Framework / Ajax (Jquery et ExtJS)
Adobe Flash Builder (Flex)

Ma librairie pour faire communiquer PHP et Silverlight "à la" WCF : http://code.google.com/p/phpservices-silverlight/
stailer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h06.


 
 
 
 
Partenaires

Hébergement Web