[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