Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de création d'une vue (conceptuel)

5 réponses
Avatar
news.sunrise.ch
Bonjour,

Je sollicite votre aide afin de m'aider à résoudre un problème: Je rencontre
un problème pour la création d'une vue sur une base de données SQL.

Afin de mieux expliquer le problème, j'ai fait des images illustratives, je
vous invite à télécharger le fichier
sur:

http://selvmatt.no-ip.com/public/vue.doc

Voici le texte sans les images afin de vous donner une idée du problème, si
vous ne voulez pas télécharger le fichier:

Mon logiciel permet d'envoyer des emails et de rattacher des fichier de tous
types à des adresses, des contacts, des projets (de construction ou autre),
des devis, des offres, etc. Toutes les possibilités sont envisagées. Un
fichier peut être associé à tout et à rien. Il peut parfaitement être
associé à un projet, une offre et une adresse, et rien d'autre, tout comme
il peut être associé à un devis, plusieurs adresses et plusieurs contacts et
rien d'autre.

Ces emails et fichiers sont ensuite sauvés et un enregistrement est crée
dans la base de données dans une table FICHIERS (qui sert entre autre à
d'autres
utilisations) et des liens sont crées avec le projet, adresses et contacts
éventuels.

Donc à ce stade, le fichier existe en tant qu'entité dans la base de
données. C'est ce sur quoi je centre mon intérêt à présent, le fichier réel
n'étant pas important. Selon moi, la structure de la base de données est
bien modélisée, d'autant que le logiciel tourne depuis pas mal de temps et
qu'aucun problème n'a été signalé jusqu'à présent. Un table centrale
FICHIERS, et des tables associatives autour, afin de s'y « brancher »

Le problème n'est pas dans la structure de la base pour ces fichiers, mais
plutôt dans la création d'une seule et unique vue, aussi complexe soit-elle,
sur laquelle travailler afin de retrouver les fichiers par critères.

Concrètement, il y a une table FICHIERS, une table PROJETS (si un mail
concerne un projet) une table ADRESSES (qui représente des sociétés), une
table CONTACTS (qui représente des personnes, qui peuvent être liées à une
adresse). Pour chacune de ces tables, il y a une table associative avec la
table FICHIERS afin de faire le lien. Tout ceci fonctionne ainsi :

Lorsqu'un email est créé, j'insère un enregistrement dans la table FICHIERS.
S'il concerne un projet (ou plusieurs), j'insère une association avec la
table PROJETS. Si une adresse de société est dans la liste des destinataires
(ou plusieurs) j'insère une association avec la table ADRESSES. Si un
contact est dans la liste des destinataires (ou plusieurs) j'insère une
association avec la table CONTACTS et une dans la table ADRESSES, si le
contact fait partie de cette adresse (on considère que le mail a aussi été
envoyé à la société, pratique pour la recherche, si le contact
disparaissait).

Ceci étant fait, je peux faire mes requêtes et retrouver tout ce que je
cherche sur mon fichier.

Mon problème est dans le fait que je voudrais faire une vue de TOUS les
fichiers de la base de données (il peut y en avoir 100 000 !) afin de
l'afficher
à l'utilisateur, et que l'utilisateur ait une vue d'ensemble pour chaque
fichier. TOUTES les informations doivent figurer sur cette vue.

En fait cette vue sera reprise dans un formulaire et l'utilisateur aura tous
les fichiers sous les yeux et ensuite il pourra les filtrer par critères.

A noter que pour l'exemple, je ne parle que des liens entre les projets,
adresses et contacts, mais qu'en réalité j'ai beaucoup plus de liens que ça,
avec à chaque fois une table associative.

Le nombre d'associatives et le nombre de fichiers ne me permettent pas de
regrouper les données en code, mais m'oblige à le faire en SQL pour des
raisons de performances.

Exemple pratique :

J'envoie un email pour le projet « TestProjet » à deux Adresses et deux
contacts. :

Adresse1, Adresse2, Contact1 (Attaché à Adresse 3), Contact2 (Attaché à
Adresse 4),

Voilà ce que la vue devrait afficher :

(IMAGE)

Si le même fichier avait été aussi rattaché au projet « TestProjet_Bis »,
voilà ce que la vue devrait afficher :

(IMAGE)

Si il y a un autre fichier « Mon Email 2 » rattaché à rien du tout, mais qui
existe, voilà ce que la vue devrait afficher :

(IMAGE)

Et ainsi de suite.

A noter que dans l'exemple, je décris le fonctionnement des fichiers autour
de projet, adresses et contacts, mais dans la réalité, les fichier sont
aussi rattachés (associatives) à d'autres éléments : offre, prospections,
commandes, articles, sous-projets, catégories, devis etc. Donc la vue est
bien plus complexe.

Structure de la base de données des exemples (très réduite et simplifiée) :

(IMAGE)

Voilà...

Je vous remercie de votre aide, je suis vraiement perdu, SQL n'étant pas
vraiement le domaine dans lequel je suis le plus à l'aise!

5 réponses

Avatar
Fred BROUARD
postez le DDL de vos tables (CREATE TABLE=) ainsi qu'un jeu de données
d'essais cela nous aidera à vous montrer la requête adéquate.

A +

news.sunrise.ch a écrit :
Bonjour,

Je sollicite votre aide afin de m'aider à résoudre un problème: Je rencontre
un problème pour la création d'une vue sur une base de données SQL.

Afin de mieux expliquer le problème, j'ai fait des images illustratives, je
vous invite à télécharger le fichier
sur:

http://selvmatt.no-ip.com/public/vue.doc

Voici le texte sans les images afin de vous donner une idée du problème, si
vous ne voulez pas télécharger le fichier:

Mon logiciel permet d'envoyer des emails et de rattacher des fichier de tous
types à des adresses, des contacts, des projets (de construction ou autre),
des devis, des offres, etc. Toutes les possibilités sont envisagées. Un
fichier peut être associé à tout et à rien. Il peut parfaitement être
associé à un projet, une offre et une adresse, et rien d'autre, tout comme
il peut être associé à un devis, plusieurs adresses et plusieurs contacts et
rien d'autre.

Ces emails et fichiers sont ensuite sauvés et un enregistrement est crée
dans la base de données dans une table FICHIERS (qui sert entre autre à
d'autres
utilisations) et des liens sont crées avec le projet, adresses et contacts
éventuels.

Donc à ce stade, le fichier existe en tant qu'entité dans la base de
données. C'est ce sur quoi je centre mon intérêt à présent, le fichier réel
n'étant pas important. Selon moi, la structure de la base de données est
bien modélisée, d'autant que le logiciel tourne depuis pas mal de temps et
qu'aucun problème n'a été signalé jusqu'à présent. Un table centrale
FICHIERS, et des tables associatives autour, afin de s'y « brancher »

Le problème n'est pas dans la structure de la base pour ces fichiers, mais
plutôt dans la création d'une seule et unique vue, aussi complexe soit-elle,
sur laquelle travailler afin de retrouver les fichiers par critères.

Concrètement, il y a une table FICHIERS, une table PROJETS (si un mail
concerne un projet) une table ADRESSES (qui représente des sociétés), une
table CONTACTS (qui représente des personnes, qui peuvent être liées à une
adresse). Pour chacune de ces tables, il y a une table associative avec la
table FICHIERS afin de faire le lien. Tout ceci fonctionne ainsi :

Lorsqu'un email est créé, j'insère un enregistrement dans la table FICHIERS.
S'il concerne un projet (ou plusieurs), j'insère une association avec la
table PROJETS. Si une adresse de société est dans la liste des destinataires
(ou plusieurs) j'insère une association avec la table ADRESSES. Si un
contact est dans la liste des destinataires (ou plusieurs) j'insère une
association avec la table CONTACTS et une dans la table ADRESSES, si le
contact fait partie de cette adresse (on considère que le mail a aussi été
envoyé à la société, pratique pour la recherche, si le contact
disparaissait).

Ceci étant fait, je peux faire mes requêtes et retrouver tout ce que je
cherche sur mon fichier.

Mon problème est dans le fait que je voudrais faire une vue de TOUS les
fichiers de la base de données (il peut y en avoir 100 000 !) afin de
l'afficher
à l'utilisateur, et que l'utilisateur ait une vue d'ensemble pour chaque
fichier. TOUTES les informations doivent figurer sur cette vue.

En fait cette vue sera reprise dans un formulaire et l'utilisateur aura tous
les fichiers sous les yeux et ensuite il pourra les filtrer par critères.

A noter que pour l'exemple, je ne parle que des liens entre les projets,
adresses et contacts, mais qu'en réalité j'ai beaucoup plus de liens que ça,
avec à chaque fois une table associative.

Le nombre d'associatives et le nombre de fichiers ne me permettent pas de
regrouper les données en code, mais m'oblige à le faire en SQL pour des
raisons de performances.

Exemple pratique :

J'envoie un email pour le projet « TestProjet » à deux Adresses et deux
contacts. :

Adresse1, Adresse2, Contact1 (Attaché à Adresse 3), Contact2 (Attaché à
Adresse 4),

Voilà ce que la vue devrait afficher :

(IMAGE)

Si le même fichier avait été aussi rattaché au projet « TestProjet_Bis »,
voilà ce que la vue devrait afficher :

(IMAGE)

Si il y a un autre fichier « Mon Email 2 » rattaché à rien du tout, mais qui
existe, voilà ce que la vue devrait afficher :

(IMAGE)

Et ainsi de suite.

A noter que dans l'exemple, je décris le fonctionnement des fichiers autour
de projet, adresses et contacts, mais dans la réalité, les fichier sont
aussi rattachés (associatives) à d'autres éléments : offre, prospections,
commandes, articles, sous-projets, catégories, devis etc. Donc la vue est
bien plus complexe.

Structure de la base de données des exemples (très réduite et simplifiée) :

(IMAGE)

Voilà...

Je vous remercie de votre aide, je suis vraiement perdu, SQL n'étant pas
vraiement le domaine dans lequel je suis le plus à l'aise!









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Matteo
Ok. J'avais pensé le faire, mais que la solutions était peut-être évidente
pour certains (pas comme moi ;-)).

Je fais cela dès lundi matin.

Merci!

"Fred BROUARD" a écrit dans le message de news:

postez le DDL de vos tables (CREATE TABLE=) ainsi qu'un jeu de données
d'essais cela nous aidera à vous montrer la requête adéquate.

A +

news.sunrise.ch a écrit :
Bonjour,

Je sollicite votre aide afin de m'aider à résoudre un problème: Je
rencontre un problème pour la création d'une vue sur une base de données
SQL.

Afin de mieux expliquer le problème, j'ai fait des images illustratives,
je vous invite à télécharger le fichier
sur:

http://selvmatt.no-ip.com/public/vue.doc

Voici le texte sans les images afin de vous donner une idée du problème,
si
vous ne voulez pas télécharger le fichier:

Mon logiciel permet d'envoyer des emails et de rattacher des fichier de
tous
types à des adresses, des contacts, des projets (de construction ou
autre),
des devis, des offres, etc. Toutes les possibilités sont envisagées. Un
fichier peut être associé à tout et à rien. Il peut parfaitement être
associé à un projet, une offre et une adresse, et rien d'autre, tout
comme
il peut être associé à un devis, plusieurs adresses et plusieurs contacts
et
rien d'autre.

Ces emails et fichiers sont ensuite sauvés et un enregistrement est crée
dans la base de données dans une table FICHIERS (qui sert entre autre à
d'autres
utilisations) et des liens sont crées avec le projet, adresses et
contacts
éventuels.

Donc à ce stade, le fichier existe en tant qu'entité dans la base de
données. C'est ce sur quoi je centre mon intérêt à présent, le fichier
réel
n'étant pas important. Selon moi, la structure de la base de données est
bien modélisée, d'autant que le logiciel tourne depuis pas mal de temps
et
qu'aucun problème n'a été signalé jusqu'à présent. Un table centrale
FICHIERS, et des tables associatives autour, afin de s'y « brancher »

Le problème n'est pas dans la structure de la base pour ces fichiers,
mais
plutôt dans la création d'une seule et unique vue, aussi complexe
soit-elle,
sur laquelle travailler afin de retrouver les fichiers par critères.

Concrètement, il y a une table FICHIERS, une table PROJETS (si un mail
concerne un projet) une table ADRESSES (qui représente des sociétés), une
table CONTACTS (qui représente des personnes, qui peuvent être liées à
une
adresse). Pour chacune de ces tables, il y a une table associative avec
la
table FICHIERS afin de faire le lien. Tout ceci fonctionne ainsi :

Lorsqu'un email est créé, j'insère un enregistrement dans la table
FICHIERS.
S'il concerne un projet (ou plusieurs), j'insère une association avec la
table PROJETS. Si une adresse de société est dans la liste des
destinataires
(ou plusieurs) j'insère une association avec la table ADRESSES. Si un
contact est dans la liste des destinataires (ou plusieurs) j'insère une
association avec la table CONTACTS et une dans la table ADRESSES, si le
contact fait partie de cette adresse (on considère que le mail a aussi
été
envoyé à la société, pratique pour la recherche, si le contact
disparaissait).

Ceci étant fait, je peux faire mes requêtes et retrouver tout ce que je
cherche sur mon fichier.

Mon problème est dans le fait que je voudrais faire une vue de TOUS les
fichiers de la base de données (il peut y en avoir 100 000 !) afin de
l'afficher
à l'utilisateur, et que l'utilisateur ait une vue d'ensemble pour chaque
fichier. TOUTES les informations doivent figurer sur cette vue.

En fait cette vue sera reprise dans un formulaire et l'utilisateur aura
tous
les fichiers sous les yeux et ensuite il pourra les filtrer par critères.

A noter que pour l'exemple, je ne parle que des liens entre les projets,
adresses et contacts, mais qu'en réalité j'ai beaucoup plus de liens que
ça,
avec à chaque fois une table associative.

Le nombre d'associatives et le nombre de fichiers ne me permettent pas de
regrouper les données en code, mais m'oblige à le faire en SQL pour des
raisons de performances.

Exemple pratique :

J'envoie un email pour le projet « TestProjet » à deux Adresses et deux
contacts. :

Adresse1, Adresse2, Contact1 (Attaché à Adresse 3), Contact2 (Attaché à
Adresse 4),

Voilà ce que la vue devrait afficher :

(IMAGE)

Si le même fichier avait été aussi rattaché au projet « TestProjet_Bis »,
voilà ce que la vue devrait afficher :

(IMAGE)

Si il y a un autre fichier « Mon Email 2 » rattaché à rien du tout, mais
qui
existe, voilà ce que la vue devrait afficher :

(IMAGE)

Et ainsi de suite.

A noter que dans l'exemple, je décris le fonctionnement des fichiers
autour
de projet, adresses et contacts, mais dans la réalité, les fichier sont
aussi rattachés (associatives) à d'autres éléments : offre, prospections,
commandes, articles, sous-projets, catégories, devis etc. Donc la vue est
bien plus complexe.

Structure de la base de données des exemples (très réduite et simplifiée)
:

(IMAGE)

Voilà...

Je vous remercie de votre aide, je suis vraiement perdu, SQL n'étant pas
vraiement le domaine dans lequel je suis le plus à l'aise!









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


Avatar
Matteo
Bonjour,

Voici comme convenu le script de création des tables + insertion de quelques
données test. J'ai crée 2 projet, 5 adresses, 2 contacts (liés tous 2 à une
adresse) et 2 fichiers.

J'éspère que vous puissiez m'aider à trouver une solution. En attendant j'ai
mis en place une solution temporaire en interrogeant la base de données avec
une requête et j'arrive encore à m'en sortir.

Merci!

-- Création des tables
CREATE TABLE [dbo].[ADRESSES] (
[ID_Adresse] [int] IDENTITY (1, 1) NOT NULL ,
[NomAdresse] [varchar] (50) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[CONTACTS] (
[ID_Contact] [int] IDENTITY (1, 1) NOT NULL ,
[NomContact] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
[ID_Adresse] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS] (
[ID_Fichier] [int] IDENTITY (1, 1) NOT NULL ,
[Path] [varchar] (255) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_ADRESSES] (
[ID_FichierAdresse] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Adresse] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_CONTACTS] (
[ID_FichierContact] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Contact] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_PROJETS] (
[ID_FichierProjet] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Projet] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[PROJETS] (
[ID_Projet] [int] IDENTITY (1, 1) NOT NULL ,
[NomProjet] [varchar] (50) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ADRESSES] WITH NOCHECK ADD
CONSTRAINT [PK_ADRESSES] PRIMARY KEY CLUSTERED
(
[ID_Adresse]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[CONTACTS] WITH NOCHECK ADD
CONSTRAINT [PK_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_Contact]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS] WITH NOCHECK ADD
CONSTRAINT [PK_FICHIERS] PRIMARY KEY CLUSTERED
(
[ID_Fichier]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_ADRESSES] WITH NOCHECK ADD
CONSTRAINT [PK_ADRESSES_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_FichierAdresse]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_CONTACTS] WITH NOCHECK ADD
CONSTRAINT [PK_FICHIERS_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_FichierContact]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_PROJETS] WITH NOCHECK ADD
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
[ID_FichierProjet]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[PROJETS] WITH NOCHECK ADD
CONSTRAINT [PK_PROJETS] PRIMARY KEY CLUSTERED
(
[ID_Projet]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[CONTACTS] ADD
CONSTRAINT [FK_CONTACTS_ADRESSES] FOREIGN KEY
(
[ID_Adresse]
) REFERENCES [dbo].[ADRESSES] (
[ID_Adresse]
)
GO

ALTER TABLE [dbo].[FICHIERS_ADRESSES] ADD
CONSTRAINT [FK_FICHIERS_ADRESSES_ADRESSES] FOREIGN KEY
(
[ID_Adresse]
) REFERENCES [dbo].[ADRESSES] (
[ID_Adresse]
),
CONSTRAINT [FK_FICHIERS_ADRESSES_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
)
GO

ALTER TABLE [dbo].[FICHIERS_CONTACTS] ADD
CONSTRAINT [FK_FICHIERS_CONTACTS_CONTACTS] FOREIGN KEY
(
[ID_Contact]
) REFERENCES [dbo].[CONTACTS] (
[ID_Contact]
),
CONSTRAINT [FK_FICHIERS_CONTACTS_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
)
GO

ALTER TABLE [dbo].[FICHIERS_PROJETS] ADD
CONSTRAINT [FK_FICHIERS_PROJETS_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
),
CONSTRAINT [FK_FICHIERS_PROJETS_PROJETS] FOREIGN KEY
(
[ID_Projet]
) REFERENCES [dbo].[PROJETS] (
[ID_Projet]
)
GO


-- Création des projets
INSERT INTO dbo.PROJETS (NomProjet) VALUES ('Projet 1')
INSERT INTO dbo.PROJETS (NomProjet) VALUES ('Projet 2')

-- Création des adresses
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 1')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 2')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 3')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 4')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 5')

-- Création des contacts
INSERT INTO dbo.CONTACTS (NomContact, ID_Adresse) VALUES ('Contact 1', 3)
INSERT INTO dbo.CONTACTS (NomContact, ID_Adresse) VALUES ('Contact 2', 4)

-- Crétion des fichiers
INSERT INTO dbo.FICHIERS (Path) VALUES ('..Mon Email 1.eml')
INSERT INTO dbo.FICHIERS (Path) VALUES ('..Mon Email 2.eml')

-- Création des associations avec les fichiers

-- Fichiers - Projets
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (1,1)
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (2,2)
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (1,2)

-- Fichiers - Adresses
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,1)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,2)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,3)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,4)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,5)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (2,5)

-- Fichiers - Contacts
INSERT INTO dbo.FICHIERS_CONTACTS (ID_Fichier, ID_Contact) VALUES (1,1)
INSERT INTO dbo.FICHIERS_CONTACTS (ID_Fichier, ID_Contact) VALUES (1,2)






"Fred BROUARD" a écrit dans le message de news:

postez le DDL de vos tables (CREATE TABLE=) ainsi qu'un jeu de données
d'essais cela nous aidera à vous montrer la requête adéquate.

A +

news.sunrise.ch a écrit :
Bonjour,

Je sollicite votre aide afin de m'aider à résoudre un problème: Je
rencontre un problème pour la création d'une vue sur une base de données
SQL.

Afin de mieux expliquer le problème, j'ai fait des images illustratives,
je vous invite à télécharger le fichier
sur:

http://selvmatt.no-ip.com/public/vue.doc

Voici le texte sans les images afin de vous donner une idée du problème,
si
vous ne voulez pas télécharger le fichier:

Mon logiciel permet d'envoyer des emails et de rattacher des fichier de
tous
types à des adresses, des contacts, des projets (de construction ou
autre),
des devis, des offres, etc. Toutes les possibilités sont envisagées. Un
fichier peut être associé à tout et à rien. Il peut parfaitement être
associé à un projet, une offre et une adresse, et rien d'autre, tout
comme
il peut être associé à un devis, plusieurs adresses et plusieurs contacts
et
rien d'autre.

Ces emails et fichiers sont ensuite sauvés et un enregistrement est crée
dans la base de données dans une table FICHIERS (qui sert entre autre à
d'autres
utilisations) et des liens sont crées avec le projet, adresses et
contacts
éventuels.

Donc à ce stade, le fichier existe en tant qu'entité dans la base de
données. C'est ce sur quoi je centre mon intérêt à présent, le fichier
réel
n'étant pas important. Selon moi, la structure de la base de données est
bien modélisée, d'autant que le logiciel tourne depuis pas mal de temps
et
qu'aucun problème n'a été signalé jusqu'à présent. Un table centrale
FICHIERS, et des tables associatives autour, afin de s'y « brancher »

Le problème n'est pas dans la structure de la base pour ces fichiers,
mais
plutôt dans la création d'une seule et unique vue, aussi complexe
soit-elle,
sur laquelle travailler afin de retrouver les fichiers par critères.

Concrètement, il y a une table FICHIERS, une table PROJETS (si un mail
concerne un projet) une table ADRESSES (qui représente des sociétés), une
table CONTACTS (qui représente des personnes, qui peuvent être liées à
une
adresse). Pour chacune de ces tables, il y a une table associative avec
la
table FICHIERS afin de faire le lien. Tout ceci fonctionne ainsi :

Lorsqu'un email est créé, j'insère un enregistrement dans la table
FICHIERS.
S'il concerne un projet (ou plusieurs), j'insère une association avec la
table PROJETS. Si une adresse de société est dans la liste des
destinataires
(ou plusieurs) j'insère une association avec la table ADRESSES. Si un
contact est dans la liste des destinataires (ou plusieurs) j'insère une
association avec la table CONTACTS et une dans la table ADRESSES, si le
contact fait partie de cette adresse (on considère que le mail a aussi
été
envoyé à la société, pratique pour la recherche, si le contact
disparaissait).

Ceci étant fait, je peux faire mes requêtes et retrouver tout ce que je
cherche sur mon fichier.

Mon problème est dans le fait que je voudrais faire une vue de TOUS les
fichiers de la base de données (il peut y en avoir 100 000 !) afin de
l'afficher
à l'utilisateur, et que l'utilisateur ait une vue d'ensemble pour chaque
fichier. TOUTES les informations doivent figurer sur cette vue.

En fait cette vue sera reprise dans un formulaire et l'utilisateur aura
tous
les fichiers sous les yeux et ensuite il pourra les filtrer par critères.

A noter que pour l'exemple, je ne parle que des liens entre les projets,
adresses et contacts, mais qu'en réalité j'ai beaucoup plus de liens que
ça,
avec à chaque fois une table associative.

Le nombre d'associatives et le nombre de fichiers ne me permettent pas de
regrouper les données en code, mais m'oblige à le faire en SQL pour des
raisons de performances.

Exemple pratique :

J'envoie un email pour le projet « TestProjet » à deux Adresses et deux
contacts. :

Adresse1, Adresse2, Contact1 (Attaché à Adresse 3), Contact2 (Attaché à
Adresse 4),

Voilà ce que la vue devrait afficher :

(IMAGE)

Si le même fichier avait été aussi rattaché au projet « TestProjet_Bis »,
voilà ce que la vue devrait afficher :

(IMAGE)

Si il y a un autre fichier « Mon Email 2 » rattaché à rien du tout, mais
qui
existe, voilà ce que la vue devrait afficher :

(IMAGE)

Et ainsi de suite.

A noter que dans l'exemple, je décris le fonctionnement des fichiers
autour
de projet, adresses et contacts, mais dans la réalité, les fichier sont
aussi rattachés (associatives) à d'autres éléments : offre, prospections,
commandes, articles, sous-projets, catégories, devis etc. Donc la vue est
bien plus complexe.

Structure de la base de données des exemples (très réduite et simplifiée)
:

(IMAGE)

Voilà...

Je vous remercie de votre aide, je suis vraiement perdu, SQL n'étant pas
vraiement le domaine dans lequel je suis le plus à l'aise!









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


Avatar
Fred BROUARD
Matteo a écrit :
Bonjour,

Voici comme convenu le script de création des tables + insertion de quelques
données test. J'ai crée 2 projet, 5 adresses, 2 contacts (liés tous 2 à une
adresse) et 2 fichiers.

J'éspère que vous puissiez m'aider à trouver une solution. En attendant j'ai
mis en place une solution temporaire en interrogeant la base de données avec
une requête et j'arrive encore à m'en sortir.

Merci!

-- Création des tables
CREATE TABLE [dbo].[ADRESSES] (
[ID_Adresse] [int] IDENTITY (1, 1) NOT NULL ,
[NomAdresse] [varchar] (50) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[CONTACTS] (
[ID_Contact] [int] IDENTITY (1, 1) NOT NULL ,
[NomContact] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
[ID_Adresse] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS] (
[ID_Fichier] [int] IDENTITY (1, 1) NOT NULL ,
[Path] [varchar] (255) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_ADRESSES] (
[ID_FichierAdresse] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Adresse] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_CONTACTS] (
[ID_FichierContact] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Contact] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_PROJETS] (
[ID_FichierProjet] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Projet] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[PROJETS] (
[ID_Projet] [int] IDENTITY (1, 1) NOT NULL ,
[NomProjet] [varchar] (50) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ADRESSES] WITH NOCHECK ADD
CONSTRAINT [PK_ADRESSES] PRIMARY KEY CLUSTERED
(
[ID_Adresse]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[CONTACTS] WITH NOCHECK ADD
CONSTRAINT [PK_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_Contact]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS] WITH NOCHECK ADD
CONSTRAINT [PK_FICHIERS] PRIMARY KEY CLUSTERED
(
[ID_Fichier]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_ADRESSES] WITH NOCHECK ADD
CONSTRAINT [PK_ADRESSES_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_FichierAdresse]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_CONTACTS] WITH NOCHECK ADD
CONSTRAINT [PK_FICHIERS_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_FichierContact]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_PROJETS] WITH NOCHECK ADD
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
[ID_FichierProjet]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[PROJETS] WITH NOCHECK ADD
CONSTRAINT [PK_PROJETS] PRIMARY KEY CLUSTERED
(
[ID_Projet]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[CONTACTS] ADD
CONSTRAINT [FK_CONTACTS_ADRESSES] FOREIGN KEY
(
[ID_Adresse]
) REFERENCES [dbo].[ADRESSES] (
[ID_Adresse]
)
GO

ALTER TABLE [dbo].[FICHIERS_ADRESSES] ADD
CONSTRAINT [FK_FICHIERS_ADRESSES_ADRESSES] FOREIGN KEY
(
[ID_Adresse]
) REFERENCES [dbo].[ADRESSES] (
[ID_Adresse]
),
CONSTRAINT [FK_FICHIERS_ADRESSES_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
)
GO

ALTER TABLE [dbo].[FICHIERS_CONTACTS] ADD
CONSTRAINT [FK_FICHIERS_CONTACTS_CONTACTS] FOREIGN KEY
(
[ID_Contact]
) REFERENCES [dbo].[CONTACTS] (
[ID_Contact]
),
CONSTRAINT [FK_FICHIERS_CONTACTS_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
)
GO

ALTER TABLE [dbo].[FICHIERS_PROJETS] ADD
CONSTRAINT [FK_FICHIERS_PROJETS_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
),
CONSTRAINT [FK_FICHIERS_PROJETS_PROJETS] FOREIGN KEY
(
[ID_Projet]
) REFERENCES [dbo].[PROJETS] (
[ID_Projet]
)
GO


-- Création des projets
INSERT INTO dbo.PROJETS (NomProjet) VALUES ('Projet 1')
INSERT INTO dbo.PROJETS (NomProjet) VALUES ('Projet 2')

-- Création des adresses
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 1')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 2')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 3')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 4')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 5')

-- Création des contacts
INSERT INTO dbo.CONTACTS (NomContact, ID_Adresse) VALUES ('Contact 1', 3)
INSERT INTO dbo.CONTACTS (NomContact, ID_Adresse) VALUES ('Contact 2', 4)

-- Crétion des fichiers
INSERT INTO dbo.FICHIERS (Path) VALUES ('..Mon Email 1.eml')
INSERT INTO dbo.FICHIERS (Path) VALUES ('..Mon Email 2.eml')

-- Création des associations avec les fichiers

-- Fichiers - Projets
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (1,1)
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (2,2)
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (1,2)

-- Fichiers - Adresses
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,1)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,2)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,3)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,4)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,5)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (2,5)

-- Fichiers - Contacts
INSERT INTO dbo.FICHIERS_CONTACTS (ID_Fichier, ID_Contact) VALUES (1,1)
INSERT INTO dbo.FICHIERS_CONTACTS (ID_Fichier, ID_Contact) VALUES (1,2)







Pouvez vous donner un exemple de la réponse attendue sous la forme :

colone1 colonne2 colonne3
----------- ---------- -----------
sdsdvd zvsvsv svsdvdv
sdvsvs sdvsdvdv sdvsdvsdsd

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Matteo
Bonjour,

Excusez-moi pour la réponse tardive, mais j'ai été passablement occupé cette
semaine...

Selon votre demande, voici le résultat de la vue que je voudrais obtenir:


Path NomProjet NomAdresse
NomContact

--------------------- ------------- ----------------
---------------

..Mon Email.eml Projet 1 Adresse 1
<NULL>

..Mon Email.eml Projet 1 Adresse 2
<NULL>



..Mon Email.eml Projet 1 Adresse 3
Contact 1

..Mon Email.eml Projet 1 Adresse 4
Contact 2

..Mon Email.eml Projet 2 Adresse 1
<NULL>

..Mon Email.eml Projet 2 Adresse 2
<NULL>



..Mon Email.eml Projet 2 Adresse 3
Contact 1

..Mon Email.eml Projet 2 Adresse 4
Contact 2

..Mon Email 2.eml Projet 2 Adresse 5
<NULL>



Ceci étant le résultat avec les données du script que je vous ai envoyé.



Imaginons maintenant que j'ajoute un fichier email 3, que je ne rattache à
aucun projet et aucune adresse ni contact, voici ce que la vue devrait
afficher:



Path NomProjet NomAdresse
NomContact

--------------------- ------------- ----------------
---------------

..Mon Email.eml Projet 1 Adresse 1
<NULL>

..Mon Email.eml Projet 1 Adresse 2
<NULL>



..Mon Email.eml Projet 1 Adresse 3
Contact 1

..Mon Email.eml Projet 1 Adresse 4
Contact 2

..Mon Email.eml Projet 2 Adresse 1
<NULL>

..Mon Email.eml Projet 2 Adresse 2
<NULL>



..Mon Email.eml Projet 2 Adresse 3
Contact 1

..Mon Email.eml Projet 2 Adresse 4
Contact 2

..Mon Email 2.eml Projet 2 Adresse 5
<NULL>

..Mon Email 3.eml <NULL> <NULL>
<NULL>



Imaginons ensuite que j'ajoute un fichier email 4, que je rattache à 3
adresses, et à 2 contacts (je ne les ai pas mis dans le script de création
de la base, je n'y ai pas pensé. Adresse X + Contact X1 et Contact X2) de
l'une d'entre elle, voici ce que la vue devrait afficher:





Path NomProjet NomAdresse
NomContact

--------------------- ------------- ----------------
---------------

..Mon Email.eml Projet 1 Adresse 1
<NULL>

..Mon Email.eml Projet 1 Adresse 2
<NULL>



..Mon Email.eml Projet 1 Adresse 3
Contact 1

..Mon Email.eml Projet 1 Adresse 4
Contact 2

..Mon Email.eml Projet 2 Adresse 1
<NULL>

..Mon Email.eml Projet 2 Adresse 2
<NULL>



..Mon Email.eml Projet 2 Adresse 3
Contact 1

..Mon Email.eml Projet 2 Adresse 4
Contact 2

..Mon Email 2.eml Projet 2 Adresse 5
<NULL>

..Mon Email 3.eml <NULL> Adresse 1
<NULL>

..Mon Email 4.eml <NULL> Adresse 2
<NULL>

..Mon Email 4.eml <NULL> Adresse X
Contact X1 ---> N'est pas dans le script (oublié, désolé)

..Mon Email 4.eml <NULL> Adresse X
Contact X2 ---> N'est pas dans le script (idem)



Voilà le fonctionnement de la vue.



Je me rend compte que ce n'est pas chose facile, je ne cesse de chercher une
solution, mais je n'arrive jamais à afficher exactement ce que je voudrais.
D'autant que dans la réalité, j'ai bien plus de tables associatives!



En ce moment, j'affiche mes résultats à chaque fois avec une requête, et
j'obtiens ce que je veux, mais c'est un peu lourd, car je charge toujours
les mêmes données. De plus, l'utilisateur doit toujours mettre ses critères
de recherche et valider, alors que le but de l'application est de filtrer au
fur et à mesure selon les critères de recherche de l'utilisateur sans
validation de sa part. Mon but est de charger les données de la vue une
seule fois et de travailler en déconnecté, ou alors de ressortir les données
de la vue avec une requête simplifiée, ce choix dépendra des performances et
surtout du volume des données.



En éspérant pouvoir trouver une solution, je vous souhaite à tous un
excellent week-end (pour ceux qui liraient ce message aujourd'hui!).







"Fred BROUARD" a écrit dans le message de news:
%
Matteo a écrit :
Bonjour,

Voici comme convenu le script de création des tables + insertion de
quelques données test. J'ai crée 2 projet, 5 adresses, 2 contacts (liés
tous 2 à une adresse) et 2 fichiers.

J'éspère que vous puissiez m'aider à trouver une solution. En attendant
j'ai mis en place une solution temporaire en interrogeant la base de
données avec une requête et j'arrive encore à m'en sortir.

Merci!

-- Création des tables
CREATE TABLE [dbo].[ADRESSES] (
[ID_Adresse] [int] IDENTITY (1, 1) NOT NULL ,
[NomAdresse] [varchar] (50) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[CONTACTS] (
[ID_Contact] [int] IDENTITY (1, 1) NOT NULL ,
[NomContact] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
[ID_Adresse] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS] (
[ID_Fichier] [int] IDENTITY (1, 1) NOT NULL ,
[Path] [varchar] (255) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_ADRESSES] (
[ID_FichierAdresse] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Adresse] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_CONTACTS] (
[ID_FichierContact] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Contact] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[FICHIERS_PROJETS] (
[ID_FichierProjet] [int] IDENTITY (1, 1) NOT NULL ,
[ID_Fichier] [int] NOT NULL ,
[ID_Projet] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[PROJETS] (
[ID_Projet] [int] IDENTITY (1, 1) NOT NULL ,
[NomProjet] [varchar] (50) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ADRESSES] WITH NOCHECK ADD
CONSTRAINT [PK_ADRESSES] PRIMARY KEY CLUSTERED
(
[ID_Adresse]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[CONTACTS] WITH NOCHECK ADD
CONSTRAINT [PK_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_Contact]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS] WITH NOCHECK ADD
CONSTRAINT [PK_FICHIERS] PRIMARY KEY CLUSTERED
(
[ID_Fichier]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_ADRESSES] WITH NOCHECK ADD
CONSTRAINT [PK_ADRESSES_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_FichierAdresse]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_CONTACTS] WITH NOCHECK ADD
CONSTRAINT [PK_FICHIERS_CONTACTS] PRIMARY KEY CLUSTERED
(
[ID_FichierContact]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[FICHIERS_PROJETS] WITH NOCHECK ADD
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
[ID_FichierProjet]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[PROJETS] WITH NOCHECK ADD
CONSTRAINT [PK_PROJETS] PRIMARY KEY CLUSTERED
(
[ID_Projet]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[CONTACTS] ADD
CONSTRAINT [FK_CONTACTS_ADRESSES] FOREIGN KEY
(
[ID_Adresse]
) REFERENCES [dbo].[ADRESSES] (
[ID_Adresse]
)
GO

ALTER TABLE [dbo].[FICHIERS_ADRESSES] ADD
CONSTRAINT [FK_FICHIERS_ADRESSES_ADRESSES] FOREIGN KEY
(
[ID_Adresse]
) REFERENCES [dbo].[ADRESSES] (
[ID_Adresse]
),
CONSTRAINT [FK_FICHIERS_ADRESSES_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
)
GO

ALTER TABLE [dbo].[FICHIERS_CONTACTS] ADD
CONSTRAINT [FK_FICHIERS_CONTACTS_CONTACTS] FOREIGN KEY
(
[ID_Contact]
) REFERENCES [dbo].[CONTACTS] (
[ID_Contact]
),
CONSTRAINT [FK_FICHIERS_CONTACTS_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
)
GO

ALTER TABLE [dbo].[FICHIERS_PROJETS] ADD
CONSTRAINT [FK_FICHIERS_PROJETS_FICHIERS] FOREIGN KEY
(
[ID_Fichier]
) REFERENCES [dbo].[FICHIERS] (
[ID_Fichier]
),
CONSTRAINT [FK_FICHIERS_PROJETS_PROJETS] FOREIGN KEY
(
[ID_Projet]
) REFERENCES [dbo].[PROJETS] (
[ID_Projet]
)
GO


-- Création des projets
INSERT INTO dbo.PROJETS (NomProjet) VALUES ('Projet 1')
INSERT INTO dbo.PROJETS (NomProjet) VALUES ('Projet 2')

-- Création des adresses
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 1')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 2')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 3')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 4')
INSERT INTO dbo.ADRESSES (NomAdresse) VALUES ('Adresse 5')

-- Création des contacts
INSERT INTO dbo.CONTACTS (NomContact, ID_Adresse) VALUES ('Contact 1', 3)
INSERT INTO dbo.CONTACTS (NomContact, ID_Adresse) VALUES ('Contact 2', 4)

-- Crétion des fichiers
INSERT INTO dbo.FICHIERS (Path) VALUES ('..Mon Email 1.eml')
INSERT INTO dbo.FICHIERS (Path) VALUES ('..Mon Email 2.eml')

-- Création des associations avec les fichiers

-- Fichiers - Projets
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (1,1)
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (2,2)
INSERT INTO dbo.FICHIERS_PROJETS (ID_Fichier, ID_Projet) VALUES (1,2)

-- Fichiers - Adresses
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,1)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,2)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,3)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,4)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (1,5)
INSERT INTO dbo.FICHIERS_ADRESSES (ID_Fichier, ID_Adresse) VALUES (2,5)

-- Fichiers - Contacts
INSERT INTO dbo.FICHIERS_CONTACTS (ID_Fichier, ID_Contact) VALUES (1,1)
INSERT INTO dbo.FICHIERS_CONTACTS (ID_Fichier, ID_Contact) VALUES (1,2)







Pouvez vous donner un exemple de la réponse attendue sous la forme :

colone1 colonne2 colonne3
----------- ---------- -----------
sdsdvd zvsvsv svsdvdv
sdvsvs sdvsdvdv sdvsdvsdsd

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************