Usar um modelo de banco de dados para varias empresas

Bom eu tenho esse modelo de banco de dados, e gostaria de transformar o modelo em um modelo multiempresa permitindo que um mesmo e único modelo de dados possa ser utilizado por várias empresas simultaneamente

Alguém pode me dar uma dica ?
grato desde já

Uma tabela de empresa acima de cliente (chave estrangeira de empresa em cliente) resolve seu problema.

g4j, com perdão, mas esse tipo de relacionamento, onde você adiciona a fk de empresa em cliente, só vai trazer mais problemas, pois nesse modelo um cliente só poderá ser cliente de uma empresa, parou pra pensar nisso?

Sugiro um exemplo com menos tabelas, onde você não vai precisar de tabela de fornecedor nem de categorias, nem de status.
Para categorias e status, crie uma tabela chamada tipo.
Essa tabela é bem versátil e serve para armazenar qualquer tipo de dado auxiliar quebrando pelo tipo_id em cascata.

create table tipo
(
	id int not null,
	tipo_id int
	nome varchar(50),
);

insert into tipo (nome) values ('Fabricante');
insert into tipo (nome) values ('Cliente');
insert into tipo (nome) values ('Empresa');


alter table tipo add constraint foreign key (tipo_id) 
	references tipo(id)	on update cascade on delete no action;

alter table produtos drop fk_fabricante_idx;
drop table fabricantes;
alter table produtos add constraint foreign key (fabricante_id)
		references fabricante(id) on update cascade
		on delete no action;
	
create table vinculo 
(
	id int not null,
	tipo_id int not null,
	entidade_vinculante_id int not null,
	entidade_vinculada_id int not null
);
alter table vinculo add constraint foreign key (tipo_id) 
	references tipo(id)	on update cascade on delete no action;


alter table clientes rename to entidade;
alter table entidade add column tipo_id int not null default '1';
alter table entidade add column entidade_id int;

alter table entidade add constraint foreign key (tipo_id) 
	references tipo(id)	on update cascade on delete no action;

entidade serve para armazenar dados de fabricante, cliente, empresa, quebrando no tipo.
a tabela de vínculo serve de ligação entre as entidades (cliente, empresa)
assim sendo você pode ter um relacionamento N/N entre empresas e clientes, o que é óbvio,
uma vez que um cliente pode comprar de qualquer empresa.

Não vi regra de negócio que diga que um cliente pode ser de varias empresas.

Edit: O modelo pode inclusive já estar em produção. Como você pode dizer pra ele mudar tudo?

[quote=doravan]g4j, com perdão, mas esse tipo de relacionamento, onde você adiciona a fk de empresa em cliente, só vai trazer mais problemas, pois nesse modelo um cliente só poderá ser cliente de uma empresa, parou pra pensar nisso?

Sugiro um exemplo com menos tabelas, onde você não vai precisar de tabela de fornecedor nem de categorias, nem de status.
Para categorias e status, crie uma tabela chamada tipo.
Essa tabela é bem versátil e serve para armazenar qualquer tipo de dado auxiliar quebrando pelo tipo_id em cascata.

create table tipo
(
	id int not null,
	tipo_id int
	nome varchar(50),
);

insert into tipo (nome) values ('Fabricante');
insert into tipo (nome) values ('Cliente');
insert into tipo (nome) values ('Empresa');


alter table tipo add constraint foreign key (tipo_id) 
	references tipo(id)	on update cascade on delete no action;

alter table produtos drop fk_fabricante_idx;
drop table fabricantes;
alter table produtos add constraint foreign key (fabricante_id)
		references fabricante(id) on update cascade
		on delete no action;
	
create table vinculo 
(
	id int not null,
	tipo_id int not null,
	entidade_vinculante_id int not null,
	entidade_vinculada_id int not null
);
alter table vinculo add constraint foreign key (tipo_id) 
	references tipo(id)	on update cascade on delete no action;


alter table clientes rename to entidade;
alter table entidade add column tipo_id int not null default '1';
alter table entidade add column entidade_id int;

alter table entidade add constraint foreign key (tipo_id) 
	references tipo(id)	on update cascade on delete no action;

entidade serve para armazenar dados de fabricante, cliente, empresa, quebrando no tipo.
a tabela de vínculo serve de ligação entre as entidades (cliente, empresa)
assim sendo você pode ter um relacionamento N/N entre empresas e clientes, o que é óbvio,
uma vez que um cliente pode comprar de qualquer empresa.[/quote]
Obrigado, mas como eu deixaria isso na terceira forma normal ?
isso que não to conseguindo conciliar