none
Guardar HTML - qual a melhor forma? RRS feed

  • Pergunta

  • Olá a todos!

    Preciso guardar contratos no meu banco que serão exibidos na web, no mesmo modelo daqueles que aceitamos ao criar uma conta de e-mail, por exemplo. As dúvidas que tenho:

    1- Guardar em texto ou em html já formatado?
    2- Que tipo de campo usar para salvar os dados?
    3- Uso SQL Server 2005 Express e não consigo criar campos VARCHAR(MAX). O Express tem alguma limitação quanto a isso?

    Procurei informações mas ainda não consegui formar uma opinião sobre a melhor forma de fazer isso.

    Grande abraço!
    segunda-feira, 19 de maio de 2008 14:04

Respostas

  • Bom Dia,

     

    Vamos as sugestões:

     

    1- Guardar em texto ou em html já formatado?

    Isso depende. Penso que o ideal mesmo é guardar os dados que formam um contrato e não o contrato em si. Se o contrato segue um modelo padrão, guardar o contrato em HTML iria armazenar diversas TAGs repetidas em todos os registros e isso seria um desperdício. Acho que só compensa guardar em HTML se tivéssemos contratos mais abertos e cada contrato fosse praticamente de um tipo diferente

     

    2- Que tipo de campo usar para salvar os dados?

    Sugiro utilizar o VARCHAR(MAX) para essa tarefa. No caso de HTMLs bem formados você pode tentar o tipo XML

     

    3- Uso SQL Server 2005 Express e não consigo criar campos VARCHAR(MAX). O Express tem alguma limitação quanto a isso?
    Desconheço esse tipo de limitação. Não vi nada referente a isso no Books OnLine. Independente disso, lembre-se que o SQL Server Express só suporta até 4GB e armazenar grandes quantidades de texto fará com que você chegue nesse limite mais rapidamente.

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 19 de maio de 2008 14:12
  • Olá João,

     

    Mesmo que os contratos variem com o tempo, a menos que eles variassem a todo instante seria melhor separar os dados do contrato de sua formatação (você poderia por exemplo manter o HTML em uma tabela de Tipo do Contrato por exemplo ou deixar isso no sistema de arquivos).

     

    No entanto, se as quebras de linhas, o negrito, o itálico fazem parte do contrato em si, ou seja, é necessário representá-lo dessa forma, pode-se dizer que esses detalhes não se tratam mais de formatação mas compõe o contrato em si. Ness caso, guarde-os com o HTML.

     

    Verifique a observação do Colla em relação ao VARCHAR(MAX)

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 19 de maio de 2008 17:53
  • Boa Tarde,

     

    Tente

     

    Code Snippet

    sp_dbcmptlevel @dbname = 'Banco', @new_cmptlevel = 90

     

     

    [ ]s,

     

    Gustavo

    segunda-feira, 19 de maio de 2008 17:55
  • Boa Tarde,

     

    Se isso acontece, é porque você não está usando o SQL Server Express e nem nenhuma outra edição do SQL Server 2005. As edições do SQL Server 2005 aceitam esse comando com o nível 90. Rode o comando SELECT @@version para verificar a versão que você possui instalada.

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 19 de maio de 2008 18:08

Todas as Respostas

  • Bom Dia,

     

    Vamos as sugestões:

     

    1- Guardar em texto ou em html já formatado?

    Isso depende. Penso que o ideal mesmo é guardar os dados que formam um contrato e não o contrato em si. Se o contrato segue um modelo padrão, guardar o contrato em HTML iria armazenar diversas TAGs repetidas em todos os registros e isso seria um desperdício. Acho que só compensa guardar em HTML se tivéssemos contratos mais abertos e cada contrato fosse praticamente de um tipo diferente

     

    2- Que tipo de campo usar para salvar os dados?

    Sugiro utilizar o VARCHAR(MAX) para essa tarefa. No caso de HTMLs bem formados você pode tentar o tipo XML

     

    3- Uso SQL Server 2005 Express e não consigo criar campos VARCHAR(MAX). O Express tem alguma limitação quanto a isso?
    Desconheço esse tipo de limitação. Não vi nada referente a isso no Books OnLine. Independente disso, lembre-se que o SQL Server Express só suporta até 4GB e armazenar grandes quantidades de texto fará com que você chegue nesse limite mais rapidamente.

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 19 de maio de 2008 14:12
  • Gustavo,

     

    Completando a sua resposta, em relação a terceira questão.

     

    O SQL Server 2005 Express é totalmente compatível com o VarChar(Max).

    segunda-feira, 19 de maio de 2008 16:54
  • Olá Gustavo!

    Com relação aos contratos, não vai haver a necessidade de normatização, pois não precisarei armazenar os 'dados' que compõe o contrato, como contratado, contratante, parágrafos, etc. Os contratos em si serão estáticos, e limitados a 5 ou 6 contratos diferentes, mas pode ser que seu conteúdo se altere com o tempo e preciso permitir que os admins possam fazê-lo.

    Para que fique mais claro, a visualização dos contratos vai ser como no exemplo do e-mail que passei na pergunta: uma textarea com scroll, bem típico dos contratos de internet. Não preciso de um arquitetura elaborada, apenas uma maneira de guardá-los de forma persistente para futuras modificações.

    Eu pergunto sobre salvar em html ou não pois serão necessárias quebras de linha, negrito, itálico, etc. Num cenário como esse, as recomendações se mantém?

    E com relação ao VARCHAR(MAX)? Eu realmente não consigo criar um campo desses usando o SQL Server Management Studio.

    Grande abraço.
    segunda-feira, 19 de maio de 2008 17:22
  • se vc. esta no 2005 e nao consegue criar um varchar(max) vc. deve olhar o nivel de compatibilidade do seu banco se ele foi por exemplo restaurado de um sql 2000 vc. devera alterar para 9, isso esta nas propriedades do banco na tree general

     

    Abs;

     

    segunda-feira, 19 de maio de 2008 17:38
  • Olá Marcelo!

    A sp_dbcmptlevel me retorna o seguinte:
    Valid values of database compatibility level are 60, 65, 70, or 80.

    Existe alguma forma de alterar para 90?

    Obrigado.
    segunda-feira, 19 de maio de 2008 17:51
  • Olá João,

     

    Mesmo que os contratos variem com o tempo, a menos que eles variassem a todo instante seria melhor separar os dados do contrato de sua formatação (você poderia por exemplo manter o HTML em uma tabela de Tipo do Contrato por exemplo ou deixar isso no sistema de arquivos).

     

    No entanto, se as quebras de linhas, o negrito, o itálico fazem parte do contrato em si, ou seja, é necessário representá-lo dessa forma, pode-se dizer que esses detalhes não se tratam mais de formatação mas compõe o contrato em si. Ness caso, guarde-os com o HTML.

     

    Verifique a observação do Colla em relação ao VARCHAR(MAX)

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 19 de maio de 2008 17:53
  • Boa Tarde,

     

    Tente

     

    Code Snippet

    sp_dbcmptlevel @dbname = 'Banco', @new_cmptlevel = 90

     

     

    [ ]s,

     

    Gustavo

    segunda-feira, 19 de maio de 2008 17:55
  • Olá Gustavo.

    Recebo a seguinte a mensagem:

    Msg 15416, Level 16, State 1, Procedure sp_dbcmptlevel, Line 92
    Usage: sp_dbcmptlevel [dbname [, compatibilitylevel]]
     
    Valid values of database compatibility level are 60, 65, 70, or 80.

    Acredito que haja alguma restrição quanto a alteração do modo de compatiblidade.
    segunda-feira, 19 de maio de 2008 18:00
  • Boa Tarde,

     

    Se isso acontece, é porque você não está usando o SQL Server Express e nem nenhuma outra edição do SQL Server 2005. As edições do SQL Server 2005 aceitam esse comando com o nível 90. Rode o comando SELECT @@version para verificar a versão que você possui instalada.

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 19 de maio de 2008 18:08
  • Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)   May  3 2005 23:18:38   Copyright (c) 1988-2003 Microsoft Corporation  Desktop Engine on Windows NT 5.2 (Build 3790: Service Pack 2)

    Erro de iniciante... estou usando a base que disseram ser 2005... que grande porcaria. Ainda tem como alterar?

    Abraços.
    segunda-feira, 19 de maio de 2008 18:13
  • so se vc. instalar uma versao do 2005 ( seja ela express ou trail ou licenca paga ), o sql 2000 nao tem o varchar(max)

     

    Abs;

     

    segunda-feira, 19 de maio de 2008 18:18
  • João,

     

    No SQL Server 2000, não existe o varchar(max), somente o varchar.

     

    Este datatype é novo, existe a partir da versão 2005.

    segunda-feira, 19 de maio de 2008 18:51
  • É, vou ter que dar meus pulos.Muito obrigado a todos!
    segunda-feira, 19 de maio de 2008 18:54