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

Gérer une base de données "multi-société"

5 réponses
Avatar
Gilles TOURREAU
Bonjour tout le monde !

Je suis confronté à un petit problème au niveau de mon analyse :

Je dois développer une application qui gère plusieurs sociétés.

Pour cela je crée autant de base de données qu'il y a de sociétés
(Société1, Société2,...etc) et une base de données commune (Commun).

Dans la base de données "Commun" j'ai toutes les tables communes au
base de données :
Les clients
Les fournisseurs

Dans chaque base de données "SociétéX" je crée les mêmes tables :
- factures
- réglements
- commandes

Ma question est la suivante :
Si je me mets dans cette configuration est-il possible de faire des
requêtes sur des tables se trouvant dans différentes bases de données ?

Un collègue pense qu'on devrait créer une seule base de données avec
une table qui s'appelle Société, et dans chaque table (Facture,
Réglement,...etc) ajouter une colonne IdSociété qui contient
l'identifiant de la société à qui appartient la facture...
Le seul problème c'est qu'il faut propager l'identifiant partout dans
l'application et penser à ajouter partout l'égalité "WHERE
LaTable.IdSociété = IdSociété

Pensez vous que c'est la meilleure solution ?

Avez-vous d'autres idées ?

En vous remerciant par avance de vos lumières !

Cordialement

--
Gilles TOURREAU
Responsable informatique
gilles.tourreau@pos.fr

Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

5 réponses

Avatar
Toff
Salut,

Tout d'abord, de quel type est ton application ?
Si c'est une application web, que tu héberges et que tu la loues à tes
clients en mode ASP, je trouve qu'une base unique serait la meilleure
solution.
Dans ce cas, effectivement, il te faut rajouer un IdSociete dans les tables
où cela est nécessaire : les clients, les fournisseurs, les factures, ...

Par contre, si tu es en client serveur et que tu deploies chez les clients,
il te faut 1 base par client.

La solution dont tu parles, 1 base "commun" est étrange, étant donné que par
définition, les clients et les fournisseurs dépendent de chaque société non
?
Combien même si 2 sociétés ont le même client, elles vont remplir les champs
de la table différemment => il te faut quand même 2 lignes !! Sinon 1
société modifie l'adresse d'un client, cela modifie pour les autres !!

Enfin pour répondre à ta question de requête multi bases, cela est
parfaitement possible en utilisant la syntaxe suivante :

select t1.champs1, t1.champs2, t2.champs1, t2.champs2
from table1 t1
inner join server2.base2.proprietaireobjet.table2 t2
on t1.clef = t2.clef
where ...

Il te faut créer sur le serveur 1 un serveur lié (nommé server2) vers le
deuxième serveur
Si tes bases sont sur sur le même serveur, le nom
..base2.proprietaireobjet.table2 marchera sans serveur lié.

a+

"Gilles TOURREAU" a écrit dans le message de
news:
Bonjour tout le monde !

Je suis confronté à un petit problème au niveau de mon analyse :

Je dois développer une application qui gère plusieurs sociétés.

Pour cela je crée autant de base de données qu'il y a de sociétés
(Société1, Société2,...etc) et une base de données commune (Commun).

Dans la base de données "Commun" j'ai toutes les tables communes au
base de données :
Les clients
Les fournisseurs

Dans chaque base de données "SociétéX" je crée les mêmes tables :
- factures
- réglements
- commandes

Ma question est la suivante :
Si je me mets dans cette configuration est-il possible de faire des
requêtes sur des tables se trouvant dans différentes bases de données ?

Un collègue pense qu'on devrait créer une seule base de données avec
une table qui s'appelle Société, et dans chaque table (Facture,
Réglement,...etc) ajouter une colonne IdSociété qui contient
l'identifiant de la société à qui appartient la facture...
Le seul problème c'est qu'il faut propager l'identifiant partout dans
l'application et penser à ajouter partout l'égalité "WHERE
LaTable.IdSociété = IdSociété

Pensez vous que c'est la meilleure solution ?

Avez-vous d'autres idées ?

En vous remerciant par avance de vos lumières !

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




Avatar
Gilles TOURREAU
Toff a utilisé son clavier pour écrire :
Salut,

Tout d'abord, de quel type est ton application ?
Si c'est une application web, que tu héberges et que tu la loues à tes
clients en mode ASP, je trouve qu'une base unique serait la meilleure
solution.
Dans ce cas, effectivement, il te faut rajouer un IdSociete dans les tables
où cela est nécessaire : les clients, les fournisseurs, les factures, ...

Par contre, si tu es en client serveur et que tu deploies chez les clients,
il te faut 1 base par client.

La solution dont tu parles, 1 base "commun" est étrange, étant donné que par
définition, les clients et les fournisseurs dépendent de chaque société non
?
Combien même si 2 sociétés ont le même client, elles vont remplir les champs
de la table différemment => il te faut quand même 2 lignes !! Sinon 1
société modifie l'adresse d'un client, cela modifie pour les autres !!

Enfin pour répondre à ta question de requête multi bases, cela est
parfaitement possible en utilisant la syntaxe suivante :

select t1.champs1, t1.champs2, t2.champs1, t2.champs2
from table1 t1
inner join server2.base2.proprietaireobjet.table2 t2
on t1.clef = t2.clef
where ...

Il te faut créer sur le serveur 1 un serveur lié (nommé server2) vers le
deuxième serveur
Si tes bases sont sur sur le même serveur, le nom
..base2.proprietaireobjet.table2 marchera sans serveur lié.

a+

"Gilles TOURREAU" a écrit dans le message de
news:
Bonjour tout le monde !

Je suis confronté à un petit problème au niveau de mon analyse :

Je dois développer une application qui gère plusieurs sociétés.

Pour cela je crée autant de base de données qu'il y a de sociétés
(Société1, Société2,...etc) et une base de données commune (Commun).

Dans la base de données "Commun" j'ai toutes les tables communes au
base de données :
Les clients
Les fournisseurs

Dans chaque base de données "SociétéX" je crée les mêmes tables :
- factures
- réglements
- commandes

Ma question est la suivante :
Si je me mets dans cette configuration est-il possible de faire des
requêtes sur des tables se trouvant dans différentes bases de données ?

Un collègue pense qu'on devrait créer une seule base de données avec
une table qui s'appelle Société, et dans chaque table (Facture,
Réglement,...etc) ajouter une colonne IdSociété qui contient
l'identifiant de la société à qui appartient la facture...
Le seul problème c'est qu'il faut propager l'identifiant partout dans
l'application et penser à ajouter partout l'égalité "WHERE
LaTable.IdSociété = IdSociété

Pensez vous que c'est la meilleure solution ?

Avez-vous d'autres idées ?

En vous remerciant par avance de vos lumières !

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr





Je te remercie pour tes réponses...

Je suis en client/serveur.
En fait quand je parle de société je parle plustot de "filiale" ou de
"site"...

Dans ma profession il arrive qu'on est le même système d'information
pour 4 sociétés différentes mais appartenant à un même gus... (pour
résumé il y a 1 actionnaire qui possèdent tout et un gérant par site)

C'est pour cela que les clients sont communes à toutes les sociétés
mais pas les factures.

Donc je pense que j'ai besoin d'une base de données "communes".

Me confirme tu que c'est la bonne solution ?

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Toff
En fait tu es en mono société, multi établissements. Ok je comprends le
contexte.

Par contre d'un point de vue technique, comment cela se passe ?
Il y a un serveur SQL central sur lequel se connectent TOUS les clients ? Ou
un serveur SQL déployé par établissement ?

"Gilles TOURREAU" a écrit dans le message de
news:
Toff a utilisé son clavier pour écrire :
> Salut,
>
> Tout d'abord, de quel type est ton application ?
> Si c'est une application web, que tu héberges et que tu la loues à tes
> clients en mode ASP, je trouve qu'une base unique serait la meilleure
> solution.
> Dans ce cas, effectivement, il te faut rajouer un IdSociete dans les


tables
> où cela est nécessaire : les clients, les fournisseurs, les factures,


...
>
> Par contre, si tu es en client serveur et que tu deploies chez les


clients,
> il te faut 1 base par client.
>
> La solution dont tu parles, 1 base "commun" est étrange, étant donné que


par
> définition, les clients et les fournisseurs dépendent de chaque société


non
> ?
> Combien même si 2 sociétés ont le même client, elles vont remplir les


champs
> de la table différemment => il te faut quand même 2 lignes !! Sinon 1
> société modifie l'adresse d'un client, cela modifie pour les autres !!
>
> Enfin pour répondre à ta question de requête multi bases, cela est
> parfaitement possible en utilisant la syntaxe suivante :
>
> select t1.champs1, t1.champs2, t2.champs1, t2.champs2
> from table1 t1
> inner join server2.base2.proprietaireobjet.table2 t2
> on t1.clef = t2.clef
> where ...
>
> Il te faut créer sur le serveur 1 un serveur lié (nommé server2) vers le
> deuxième serveur
> Si tes bases sont sur sur le même serveur, le nom
> ..base2.proprietaireobjet.table2 marchera sans serveur lié.
>
> a+
>
> "Gilles TOURREAU" a écrit dans le message de
> news:
>> Bonjour tout le monde !
>>
>> Je suis confronté à un petit problème au niveau de mon analyse :
>>
>> Je dois développer une application qui gère plusieurs sociétés.
>>
>> Pour cela je crée autant de base de données qu'il y a de sociétés
>> (Société1, Société2,...etc) et une base de données commune (Commun).
>>
>> Dans la base de données "Commun" j'ai toutes les tables communes au
>> base de données :
>> Les clients
>> Les fournisseurs
>>
>> Dans chaque base de données "SociétéX" je crée les mêmes tables :
>> - factures
>> - réglements
>> - commandes
>>
>> Ma question est la suivante :
>> Si je me mets dans cette configuration est-il possible de faire des
>> requêtes sur des tables se trouvant dans différentes bases de données ?
>>
>> Un collègue pense qu'on devrait créer une seule base de données avec
>> une table qui s'appelle Société, et dans chaque table (Facture,
>> Réglement,...etc) ajouter une colonne IdSociété qui contient
>> l'identifiant de la société à qui appartient la facture...
>> Le seul problème c'est qu'il faut propager l'identifiant partout dans
>> l'application et penser à ajouter partout l'égalité "WHERE
>> LaTable.IdSociété = IdSociété
>>
>> Pensez vous que c'est la meilleure solution ?
>>
>> Avez-vous d'autres idées ?
>>
>> En vous remerciant par avance de vos lumières !
>>
>> Cordialement
>>
>> --
>> Gilles TOURREAU
>> Responsable informatique
>>
>>
>> Société P.O.S
>> Spécialiste en motoculture depuis + de 30 ans !
>> http://www.pos.fr

Je te remercie pour tes réponses...

Je suis en client/serveur.
En fait quand je parle de société je parle plustot de "filiale" ou de
"site"...

Dans ma profession il arrive qu'on est le même système d'information
pour 4 sociétés différentes mais appartenant à un même gus... (pour
résumé il y a 1 actionnaire qui possèdent tout et un gérant par site)

C'est pour cela que les clients sont communes à toutes les sociétés
mais pas les factures.

Donc je pense que j'ai besoin d'une base de données "communes".

Me confirme tu que c'est la bonne solution ?

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




Avatar
Gilles TOURREAU
Toff avait énoncé :
En fait tu es en mono société, multi établissements. Ok je comprends le
contexte.

Par contre d'un point de vue technique, comment cela se passe ?
Il y a un serveur SQL central sur lequel se connectent TOUS les clients ? Ou
un serveur SQL déployé par établissement ?

"Gilles TOURREAU" a écrit dans le message de
news:
Toff a utilisé son clavier pour écrire :
Salut,

Tout d'abord, de quel type est ton application ?
Si c'est une application web, que tu héberges et que tu la loues à tes
clients en mode ASP, je trouve qu'une base unique serait la meilleure
solution.
Dans ce cas, effectivement, il te faut rajouer un IdSociete dans les tables
où cela est nécessaire : les clients, les fournisseurs, les factures, ...

Par contre, si tu es en client serveur et que tu deploies chez les clients,
il te faut 1 base par client.

La solution dont tu parles, 1 base "commun" est étrange, étant donné que
par définition, les clients et les fournisseurs dépendent de chaque société
non ?
Combien même si 2 sociétés ont le même client, elles vont remplir les
champs de la table différemment => il te faut quand même 2 lignes !! Sinon
1 société modifie l'adresse d'un client, cela modifie pour les autres !!

Enfin pour répondre à ta question de requête multi bases, cela est
parfaitement possible en utilisant la syntaxe suivante :

select t1.champs1, t1.champs2, t2.champs1, t2.champs2
from table1 t1
inner join server2.base2.proprietaireobjet.table2 t2
on t1.clef = t2.clef
where ...

Il te faut créer sur le serveur 1 un serveur lié (nommé server2) vers le
deuxième serveur
Si tes bases sont sur sur le même serveur, le nom
..base2.proprietaireobjet.table2 marchera sans serveur lié.

a+

"Gilles TOURREAU" a écrit dans le message de
news:
Bonjour tout le monde !

Je suis confronté à un petit problème au niveau de mon analyse :

Je dois développer une application qui gère plusieurs sociétés.

Pour cela je crée autant de base de données qu'il y a de sociétés
(Société1, Société2,...etc) et une base de données commune (Commun).

Dans la base de données "Commun" j'ai toutes les tables communes au
base de données :
Les clients
Les fournisseurs

Dans chaque base de données "SociétéX" je crée les mêmes tables :
- factures
- réglements
- commandes

Ma question est la suivante :
Si je me mets dans cette configuration est-il possible de faire des
requêtes sur des tables se trouvant dans différentes bases de données ?

Un collègue pense qu'on devrait créer une seule base de données avec
une table qui s'appelle Société, et dans chaque table (Facture,
Réglement,...etc) ajouter une colonne IdSociété qui contient
l'identifiant de la société à qui appartient la facture...
Le seul problème c'est qu'il faut propager l'identifiant partout dans
l'application et penser à ajouter partout l'égalité "WHERE
LaTable.IdSociété = IdSociété

Pensez vous que c'est la meilleure solution ?

Avez-vous d'autres idées ?

En vous remerciant par avance de vos lumières !

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr





Je te remercie pour tes réponses...

Je suis en client/serveur.
En fait quand je parle de société je parle plustot de "filiale" ou de
"site"...

Dans ma profession il arrive qu'on est le même système d'information
pour 4 sociétés différentes mais appartenant à un même gus... (pour
résumé il y a 1 actionnaire qui possèdent tout et un gérant par site)

C'est pour cela que les clients sont communes à toutes les sociétés
mais pas les factures.

Donc je pense que j'ai besoin d'une base de données "communes".

Me confirme tu que c'est la bonne solution ?

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr





Un seul serveur SQL pour toute la société (Les etablissement sont
reliés par fibre optique pour certains ou par haut débit).

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Toff
Alors, la base unique est la meilleure solution !
Un idEtablissement dans les tables qui le nécessitent (Factures,
Reglements,...).
Ce sera beaucoup plus simple à gérer. Surtout pour le reporting global pour
l'ensemble des établissements !
Faire un calcul de CA général reviendra à requéter simplement sur les tables
d'une base.
Alors qu'avec une base par établissement, c'est plus compliqué (autant
d'UNION que d'établissements)... Si nouvel établissement => il faut modifier
l'ensemble des requêtes de calculs financiers...

En espérant t'être utile



"Gilles TOURREAU" a écrit dans le message de
news:
Toff avait énoncé :
> En fait tu es en mono société, multi établissements. Ok je comprends le
> contexte.
>
> Par contre d'un point de vue technique, comment cela se passe ?
> Il y a un serveur SQL central sur lequel se connectent TOUS les clients


? Ou
> un serveur SQL déployé par établissement ?
>
> "Gilles TOURREAU" a écrit dans le message de
> news:
>> Toff a utilisé son clavier pour écrire :
>>> Salut,
>>>
>>> Tout d'abord, de quel type est ton application ?
>>> Si c'est une application web, que tu héberges et que tu la loues à tes
>>> clients en mode ASP, je trouve qu'une base unique serait la meilleure
>>> solution.
>>> Dans ce cas, effectivement, il te faut rajouer un IdSociete dans les


tables
>>> où cela est nécessaire : les clients, les fournisseurs, les factures,


...
>>>
>>> Par contre, si tu es en client serveur et que tu deploies chez les


clients,
>>> il te faut 1 base par client.
>>>
>>> La solution dont tu parles, 1 base "commun" est étrange, étant donné


que
>>> par définition, les clients et les fournisseurs dépendent de chaque


société
>>> non ?
>>> Combien même si 2 sociétés ont le même client, elles vont remplir les
>>> champs de la table différemment => il te faut quand même 2 lignes !!


Sinon
>>> 1 société modifie l'adresse d'un client, cela modifie pour les autres


!!
>>>
>>> Enfin pour répondre à ta question de requête multi bases, cela est
>>> parfaitement possible en utilisant la syntaxe suivante :
>>>
>>> select t1.champs1, t1.champs2, t2.champs1, t2.champs2
>>> from table1 t1
>>> inner join server2.base2.proprietaireobjet.table2 t2
>>> on t1.clef = t2.clef
>>> where ...
>>>
>>> Il te faut créer sur le serveur 1 un serveur lié (nommé server2) vers


le
>>> deuxième serveur
>>> Si tes bases sont sur sur le même serveur, le nom
>>> ..base2.proprietaireobjet.table2 marchera sans serveur lié.
>>>
>>> a+
>>>
>>> "Gilles TOURREAU" a écrit dans le message de
>>> news:
>>>> Bonjour tout le monde !
>>>>
>>>> Je suis confronté à un petit problème au niveau de mon analyse :
>>>>
>>>> Je dois développer une application qui gère plusieurs sociétés.
>>>>
>>>> Pour cela je crée autant de base de données qu'il y a de sociétés
>>>> (Société1, Société2,...etc) et une base de données commune (Commun).
>>>>
>>>> Dans la base de données "Commun" j'ai toutes les tables communes au
>>>> base de données :
>>>> Les clients
>>>> Les fournisseurs
>>>>
>>>> Dans chaque base de données "SociétéX" je crée les mêmes tables :
>>>> - factures
>>>> - réglements
>>>> - commandes
>>>>
>>>> Ma question est la suivante :
>>>> Si je me mets dans cette configuration est-il possible de faire des
>>>> requêtes sur des tables se trouvant dans différentes bases de données


?
>>>>
>>>> Un collègue pense qu'on devrait créer une seule base de données avec
>>>> une table qui s'appelle Société, et dans chaque table (Facture,
>>>> Réglement,...etc) ajouter une colonne IdSociété qui contient
>>>> l'identifiant de la société à qui appartient la facture...
>>>> Le seul problème c'est qu'il faut propager l'identifiant partout dans
>>>> l'application et penser à ajouter partout l'égalité "WHERE
>>>> LaTable.IdSociété = IdSociété
>>>>
>>>> Pensez vous que c'est la meilleure solution ?
>>>>
>>>> Avez-vous d'autres idées ?
>>>>
>>>> En vous remerciant par avance de vos lumières !
>>>>
>>>> Cordialement
>>>>
>>>> --
>>>> Gilles TOURREAU
>>>> Responsable informatique
>>>>
>>>>
>>>> Société P.O.S
>>>> Spécialiste en motoculture depuis + de 30 ans !
>>>> http://www.pos.fr
>>
>> Je te remercie pour tes réponses...
>>
>> Je suis en client/serveur.
>> En fait quand je parle de société je parle plustot de "filiale" ou de
>> "site"...
>>
>> Dans ma profession il arrive qu'on est le même système d'information
>> pour 4 sociétés différentes mais appartenant à un même gus... (pour
>> résumé il y a 1 actionnaire qui possèdent tout et un gérant par site)
>>
>> C'est pour cela que les clients sont communes à toutes les sociétés
>> mais pas les factures.
>>
>> Donc je pense que j'ai besoin d'une base de données "communes".
>>
>> Me confirme tu que c'est la bonne solution ?
>>
>> Cordialement
>>
>> --
>> Gilles TOURREAU
>> Responsable informatique
>>
>>
>> Société P.O.S
>> Spécialiste en motoculture depuis + de 30 ans !
>> http://www.pos.fr

Un seul serveur SQL pour toute la société (Les etablissement sont
reliés par fibre optique pour certains ou par haut débit).

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr