Imaginemos um cenário que ou um cliente ou um fornecedor ou um funcionário podem ser ou uma pessoa física ou uma pessoa jurídica. Podemos fazer uma modelagem da seguinte forma:
Na Entidade Pessoa temos uma PK composta, com um id (AI) e um tipo (0 = Física, 1 = Juridica), além dos Atributos comuns entre as Entidade Fisica e Juridica, como inscricao_municipal (null).
Na Entidade Fisica, temos um relacionamento de um-para-um com a Entidade Pessoa, que gera uma PK composta (herda id e tipo da Entidade Pessoa) e os Atributos referentes a ela (nome, cpf, rg, sexo). E na Entidade Juridica temos o mesmo relacionamento com Pessoa, e os Atributos nome, cnpj, inscricao_estadual.
Além disso, também poderíamos aproveitar a Entidade Pessoa e relacioná-la com outras Entidades que Fisica e Juridica poderiam ter relacionamentos em comum, como Endereco, Telefone, etc.
Agora, imaginemos uma outra Entidade, chamada Funcao, que tem id (PK, AI) e nome (Funcao[1][nome] = Cliente, Funcao[2][nome] = Fornecedor, Funcao[3][nome] = Funcionario). Então, as Entidades Funcao e Pessoa tem um relacionamento que gera uma Entidade Associativa. Logo, essa Entidade pode se chamar Pessoas_Funcoes, e poderia ser composta por um atributo id (PK, AI), as FK pessoa_id, pessoa_tipo e funcao_id, além de um atributo data_cadastro.
Se tudo estiver correto, a Pessoa ID 15, Fisica, pode ter a Funcao 1 (cliente), 2 (fornecedor) e 3 (funcionario), que se chama "José da Silva" (com um CPF). E a Pessoa ID 15, Juridica, pode ter a Funcao 1, 2 e 3, com o nome de "Silva LTDA ME" e um CNPJ. Mas em qualquer dos 6 casos, a Pessoa pode ter os mesmos endereços e telefones.
Legenda:
PK = Primary Key
FK = Foreign Key
AI = Auto Increment
Agora, as perguntas que não querem calar:
1) Se em um sistema de compra e venda há tanto produto quanto serviço, vale a pena normalizar para um tipo parecido, citado acima?
Imagine que tanto em um venda quanto em uma compra possa haver um orçamento, um estorno uma nota fiscal (vários atributos em comum e entidades semelhantes) e essa compra ou venda também possa ser de um produto ou um serviço, com atributos comuns e entidades semelhantes.
2) Suponhamos que tudo estivesse normalizado, e que haveria entidades armazenando tanto dados da venda quanto da compra e outras com dados tanto do produto quanto do serviço, o banco de dados não ficaria mais lento para realizar uma consulta?
Imagine que a quantidade de dados de uma entidade em conjunto com compra e venda estivesse com 800 mil registros (é mais provável que haja mais registros de venda do que de compra). O banco de dados não faria menos esforço em uma consulta se esses mesmos dados estivessem separados?
Pergunta
Emilio Ferreira
Até que ponto normalizar vale a pena?
Exemplo:
Imaginemos um cenário que ou um cliente ou um fornecedor ou um funcionário podem ser ou uma pessoa física ou uma pessoa jurídica. Podemos fazer uma modelagem da seguinte forma:
Na Entidade Pessoa temos uma PK composta, com um id (AI) e um tipo (0 = Física, 1 = Juridica), além dos Atributos comuns entre as Entidade Fisica e Juridica, como inscricao_municipal (null).
Na Entidade Fisica, temos um relacionamento de um-para-um com a Entidade Pessoa, que gera uma PK composta (herda id e tipo da Entidade Pessoa) e os Atributos referentes a ela (nome, cpf, rg, sexo). E na Entidade Juridica temos o mesmo relacionamento com Pessoa, e os Atributos nome, cnpj, inscricao_estadual.
Além disso, também poderíamos aproveitar a Entidade Pessoa e relacioná-la com outras Entidades que Fisica e Juridica poderiam ter relacionamentos em comum, como Endereco, Telefone, etc.
Agora, imaginemos uma outra Entidade, chamada Funcao, que tem id (PK, AI) e nome (Funcao[1][nome] = Cliente, Funcao[2][nome] = Fornecedor, Funcao[3][nome] = Funcionario). Então, as Entidades Funcao e Pessoa tem um relacionamento que gera uma Entidade Associativa. Logo, essa Entidade pode se chamar Pessoas_Funcoes, e poderia ser composta por um atributo id (PK, AI), as FK pessoa_id, pessoa_tipo e funcao_id, além de um atributo data_cadastro.
Se tudo estiver correto, a Pessoa ID 15, Fisica, pode ter a Funcao 1 (cliente), 2 (fornecedor) e 3 (funcionario), que se chama "José da Silva" (com um CPF). E a Pessoa ID 15, Juridica, pode ter a Funcao 1, 2 e 3, com o nome de "Silva LTDA ME" e um CNPJ. Mas em qualquer dos 6 casos, a Pessoa pode ter os mesmos endereços e telefones.
Legenda:
PK = Primary Key
FK = Foreign Key
AI = Auto Increment
Agora, as perguntas que não querem calar:
1) Se em um sistema de compra e venda há tanto produto quanto serviço, vale a pena normalizar para um tipo parecido, citado acima?
Imagine que tanto em um venda quanto em uma compra possa haver um orçamento, um estorno uma nota fiscal (vários atributos em comum e entidades semelhantes) e essa compra ou venda também possa ser de um produto ou um serviço, com atributos comuns e entidades semelhantes.
2) Suponhamos que tudo estivesse normalizado, e que haveria entidades armazenando tanto dados da venda quanto da compra e outras com dados tanto do produto quanto do serviço, o banco de dados não ficaria mais lento para realizar uma consulta?
Imagine que a quantidade de dados de uma entidade em conjunto com compra e venda estivesse com 800 mil registros (é mais provável que haja mais registros de venda do que de compra). O banco de dados não faria menos esforço em uma consulta se esses mesmos dados estivessem separados?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.