[firebase-br] Aumentando o tamanho maximodecaracteresdonomedeuam tabela

Daniel / Tecnobyte temp em tecnobyte.com.br
Seg Out 9 16:50:44 -03 2006


> voces são doidos ( brincadeirinha )
> e na ora de programar.
> imagine
> select * from
nome_da_tabel_gigantesca_so_aqui_perco_1_hora_no_dia_digitando
> ou
> select * from T_CLI

Olá Fernando

Concordo que exagerar no tamanho dos nomes pode ser [também] um problema.
Mas da mesma forma as abreviações podem ser problema em sistemas grandes.
Eu, por exemplo, sempre usava "Cli" para "Cliente", "For" para "Fornecedor",
"Pro" para "Produto", etc (hábito do tempo do Clipper, onde o nome de um
arquivo era limitado a 8 caracteres e nome de campos/variáveis não poderia
ultrapassar 10 caracteres). Com o tempo fui percebendo os problemas (for =
fornecedor ou forno, pro = produto ou profissao, cli = cliente ou clima,
etc, etc, etc).

Depois de passar por estas dificuldades, resolvi abusar [um pouco] de nomes
mais exclarecedores. Sei que é realmente muito chato ter que digitar um nome
de 40 caracteres, mas também é terrível tentar entender um SELECT complexo
(como o exemplo abaixo) se cada tabela for representada por uma sigla de 3
letras.

SELECT
  Viagem.Id AS Viagem_Id,
  Viagem.DataSaida AS Viagem_DataSaida,
  Viagem.HoraSaida AS Viagem_HoraSaida,
  Viagem.Tipo,
  Horario.Sentido,
  Horario.Id AS Horario_Id,
  Linha.Id AS Linha_Id,
  Linha.Codigo AS Linha_Codigo,
  IF(Horario.Sentido = "Ida",
    CONCAT(OrigemLinha.Nome, " x ", DestinoLinha.Nome),
    CONCAT(DestinoLinha.Nome, " x ", OrigemLinha.Nome)) AS Linha_Descricao,
  Empresa.Codigo AS Empresa_Codigo,
  Empresa.NomeUsual AS Empresa_Nome,
  TipoVeiculo.Id AS TipoVeiculo_Id,
  TipoVeiculo.Descricao_Empresa AS TipoVeiculo_DescricaoEmpresa,
  TipoVeiculo.Descricao_Reduzida AS TipoVeiculo_DescricaoReduzida,
  TipoVeiculo.CategoriaSAT AS TipoVeiculo_CategoriaSAT,
  IFNULL((SELECT HorarioVerao.DiferencaFuso FROM HorarioVerao
    JOIN HorarioVeraoCidade ON HorarioVeraoCidade.HorarioVerao_Id =
HorarioVerao.Id
    WHERE HorarioVeraoCidade.Cidade_Id = CidRef.Id AND
    TIMESTAMP(Viagem.DataSaida, Viagem.HoraSaida)
      - INTERVAL IFNULL(CidRef.Fuso, 0) MINUTE
      - INTERVAL IFNULL(HorarioVerao.DiferencaFuso, 0) MINUTE
    BETWEEN
      TIMESTAMP(HorarioVerao.DataInicial, HorarioVerao.HoraInicial) AND
      TIMESTAMP(HorarioVerao.DataFinal, HorarioVerao.HoraFinal)), 0) AS
SeccRef_FusoVerao,
  IFNULL((SELECT HorarioVerao.DiferencaFuso FROM HorarioVerao
    JOIN HorarioVeraoCidade ON HorarioVeraoCidade.HorarioVerao_Id =
HorarioVerao.Id
    WHERE HorarioVeraoCidade.Cidade_Id = CidOrigem.Id AND
    TIMESTAMP(Viagem.DataSaida, Viagem.HoraSaida)
      - INTERVAL IFNULL(CidOrigem.Fuso, 0) MINUTE
      - INTERVAL IFNULL(HorarioVerao.DiferencaFuso, 0) MINUTE
      + INTERVAL IFNULL(ItemOrigem.TempoTotal, 0) MINUTE
    BETWEEN
      TIMESTAMP(HorarioVerao.DataInicial, HorarioVerao.HoraInicial) AND
      TIMESTAMP(HorarioVerao.DataFinal, HorarioVerao.HoraFinal)), 0) AS
Origem_FusoVerao,
  TIMESTAMP(Viagem.DataSaida, Viagem.HoraSaida)
    - INTERVAL IFNULL(CidRef.Fuso, 0) MINUTE
    - INTERVAL (SELECT SeccRef_FusoVerao) MINUTE
    + INTERVAL IFNULL(ItemOrigem.TempoTotal, 0) MINUTE
    + INTERVAL IFNULL(CidOrigem.Fuso, 0) MINUTE
    + INTERVAL (SELECT Origem_FusoVerao) MINUTE
  AS DataHoraChegada
FROM Viagem
JOIN ViagemItem AS ItemOrigem ON ItemOrigem.Viagem_Id = Viagem.Id
JOIN ComplementoRota AS CompRotaOrigem ON CompRotaOrigem.Id =
ItemOrigem.ComplementoRota_Id
JOIN ViagemItem AS ItemDestino ON ItemDestino.Viagem_Id = Viagem.Id
JOIN ComplementoRota AS CompRotaDestino ON CompRotaDestino.Id =
ItemDestino.ComplementoRota_Id
JOIN Horario ON Horario.Id = Viagem.Horario_Id
JOIN Linha ON Linha.Id = Horario.Linha_Id
JOIN Seccionamento AS OrigemLinha ON OrigemLinha.Id =
Linha.SeccionamentoOrigem_Id
JOIN Seccionamento AS DestinoLinha ON DestinoLinha.Id =
Linha.SeccionamentoDestino_Id
JOIN TipoVeiculo ON TipoVeiculo.Id = Viagem.TipoVeiculo_Id
JOIN
  (SELECT Pessoa.Id, PessoaEmpresa.Codigo, Pessoa.NomeUsual FROM Pessoa
   JOIN PessoaEmpresa ON PessoaEmpresa.Pessoa_Id = Pessoa.Id)
  AS Empresa ON Empresa.Id = Linha.Pessoa_Id
JOIN Seccionamento AS SeccRef ON SeccRef.Id =
Horario.Seccionamento_Id_Referencia
JOIN Cidade AS CidRef ON CidRef.Id = SeccRef.Cidade_Id
JOIN Seccionamento AS SeccOrigem ON SeccOrigem.Id =
CompRotaOrigem.Seccionamento_Id
JOIN Cidade AS CidOrigem ON CidOrigem.Id = SeccOrigem.Cidade_Id
WHERE
  Viagem.Confirmado AND
  Viagem.DataSaida BETWEEN :DataSaidaMinima AND :DataViagem AND
  CompRotaOrigem.Seccionamento_Id = :Origem_Id AND
  CompRotaDestino.Seccionamento_Id = :Destino_Id AND
  ItemOrigem.TempoTotal <= ItemDestino.TempoTotal AND
  DATE((SELECT DataHoraChegada)) = :DataViagem AND
  EXISTS(SELECT * FROM Linha
    LEFT JOIN EstaduaisLinha ON EstaduaisLinha.Linha_Id = Linha.Id
    JOIN ItinerarioLinha ON ItinerarioLinha.Linha_Id = Linha.Id OR
      ItinerarioLinha.Linha_Id = EstaduaisLinha.Linha_Id_Estadual
    WHERE Linha.Id = Horario.Linha_Id AND
      ((ItinerarioLinha.SeccionamentoInicial_Id = :Origem_Id AND
        ItinerarioLinha.SeccionamentoFinal_Id = :Destino_Id) OR
       (ItinerarioLinha.SeccionamentoInicial_Id = :Destino_Id AND
        ItinerarioLinha.SeccionamentoFinal_Id = :Origem_Id)))

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br





Mais detalhes sobre a lista de discussão lista