none
Tabelas RRS feed

  • Pergunta

  • Olá, sou principiante em sql e tenho uma duvida: Porque tenho que desmembrar uma tabela em duas? Exemplo: Tenho uma tabela onde 4 campos podem se repetir muitas vezes, que serão preenchidos por meio de uma tela em vb, então pergunto porque deveria separar em outra tabela esses 4 campos? Qual seria a vantagem ou o porquê de se fazer isso, se para preenchê-los eu terei que fazê-los um a um através da tela de vb?
    segunda-feira, 15 de setembro de 2014 00:57

Respostas

  • Abadom,

    Como o José indicou, este é um princípio de bancos de dados "relacionais". O SQL Server é um destes servidores que trabalha com este modelo. 

    Apenas complementando esta informação, reduzir a quantidade de dados que estão armazenadas em seu banco de dados e ser mais rápido em obter uma informação é uma das grandes vantagens de utilizar o relacionamento dos dados de uma tabela.

    Um pequeno exemplo: Imagine uma tabela de endereços, onde é necessário informar o nome da cidade de todos os usuários de um sistema.

    Se você verificar os tipos de dados no SQL Server, um caracter no datatype "varchar" ocupará mais espaço armazenado e, consequentemente aumentando o I/O em disco e na rede em relação à apenas uma referência numérica (tipo "smallint"). Então adicionar repetidamente em poucos registros um nome extenso de uma cidade (Ex.: "São Jose do Rio Preto") pode ser quase imperceptível nas suas consultas, mas quando ela começa a repetir milhões de vezes, seu banco de dados será muito mais lento e seus usuários não ficarão felizes em utilizar um sistema que demora para obter uma consulta "simples" (muitas vezes é simples apenas na visão do usuário).

    Então adicionar o nome da cidade, apenas uma vez, em uma tabela específica para cidades (Ex.: TB_CIDADE) e referenciar na tabela endereço (TB_ENDERECO) apenas seu código (Ex.: 123 = "São Jose do Rio Preto") será mais rápido e ocupará menos espaço em disco do que manter o nome da cidade se repetindo diversas vezes.

    Para maiores informações veja:

    http://msdn.microsoft.com/pt-br/library/ms187752.aspx

    http://msdn.microsoft.com/pt-br/library/ms176089.aspx

    http://msdn.microsoft.com/pt-br/library/ms187745.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Thiago Patrocinio segunda-feira, 15 de setembro de 2014 13:26
    • Marcado como Resposta Abadom segunda-feira, 15 de setembro de 2014 17:04
    segunda-feira, 15 de setembro de 2014 13:15
    Moderador
  • Deleted
    • Marcado como Resposta Abadom segunda-feira, 15 de setembro de 2014 17:08
    segunda-feira, 15 de setembro de 2014 09:44

Todas as Respostas

  • Deleted
    • Marcado como Resposta Abadom segunda-feira, 15 de setembro de 2014 17:08
    segunda-feira, 15 de setembro de 2014 09:44
  • Abadom,

    Como o José indicou, este é um princípio de bancos de dados "relacionais". O SQL Server é um destes servidores que trabalha com este modelo. 

    Apenas complementando esta informação, reduzir a quantidade de dados que estão armazenadas em seu banco de dados e ser mais rápido em obter uma informação é uma das grandes vantagens de utilizar o relacionamento dos dados de uma tabela.

    Um pequeno exemplo: Imagine uma tabela de endereços, onde é necessário informar o nome da cidade de todos os usuários de um sistema.

    Se você verificar os tipos de dados no SQL Server, um caracter no datatype "varchar" ocupará mais espaço armazenado e, consequentemente aumentando o I/O em disco e na rede em relação à apenas uma referência numérica (tipo "smallint"). Então adicionar repetidamente em poucos registros um nome extenso de uma cidade (Ex.: "São Jose do Rio Preto") pode ser quase imperceptível nas suas consultas, mas quando ela começa a repetir milhões de vezes, seu banco de dados será muito mais lento e seus usuários não ficarão felizes em utilizar um sistema que demora para obter uma consulta "simples" (muitas vezes é simples apenas na visão do usuário).

    Então adicionar o nome da cidade, apenas uma vez, em uma tabela específica para cidades (Ex.: TB_CIDADE) e referenciar na tabela endereço (TB_ENDERECO) apenas seu código (Ex.: 123 = "São Jose do Rio Preto") será mais rápido e ocupará menos espaço em disco do que manter o nome da cidade se repetindo diversas vezes.

    Para maiores informações veja:

    http://msdn.microsoft.com/pt-br/library/ms187752.aspx

    http://msdn.microsoft.com/pt-br/library/ms176089.aspx

    http://msdn.microsoft.com/pt-br/library/ms187745.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Thiago Patrocinio segunda-feira, 15 de setembro de 2014 13:26
    • Marcado como Resposta Abadom segunda-feira, 15 de setembro de 2014 17:04
    segunda-feira, 15 de setembro de 2014 13:15
    Moderador
  • Muito boa as explicações. Obrigado.
    segunda-feira, 15 de setembro de 2014 17:09