mirror of
https://github.com/treffynnon/sqlstyle.guide.git
synced 2025-03-09 12:49:51 -05:00
optimizing translation
This commit is contained in:
parent
6b4e37f430
commit
e88a310d57
1 changed files with 49 additions and 50 deletions
|
@ -10,7 +10,7 @@ alterações ou correções de bugs, por favor abra uma [issue][issue] ou faça
|
||||||
Estas diretrizes foram desenhadas em conformidade com o livro
|
Estas diretrizes foram desenhadas em conformidade com o livro
|
||||||
[SQL Programming Style][celko] de Joe Celko, para serem adotadas mais facilmente
|
[SQL Programming Style][celko] de Joe Celko, para serem adotadas mais facilmente
|
||||||
por equipes que já leram o livro. Em relação ao livro, este guia é um pouco mais
|
por equipes que já leram o livro. Em relação ao livro, este guia é um pouco mais
|
||||||
opiniativo em algumas áreas, enquanto em outras, é mais relaxado. É certamente
|
opiniativo em algumas áreas e mais tranquilo em outras. Certamente é
|
||||||
mais sucinto que [o livro de Celko][celko], que contém anedotas e racicínios por
|
mais sucinto que [o livro de Celko][celko], que contém anedotas e racicínios por
|
||||||
trás de cada regra.
|
trás de cada regra.
|
||||||
|
|
||||||
|
@ -31,10 +31,10 @@ Baseado no trabalho em [http://www.sqlstyle.guide][sqlstyleguide].
|
||||||
a legibilidade do código.
|
a legibilidade do código.
|
||||||
* Armazene informações de data e hora compatíveis com [ISO-8601][iso-8601]
|
* Armazene informações de data e hora compatíveis com [ISO-8601][iso-8601]
|
||||||
(`YYYY-MM-DD HH:MM:SS.SSSSS`).
|
(`YYYY-MM-DD HH:MM:SS.SSSSS`).
|
||||||
* Por questões de portabilidade, tente utilizar apenas funções SQL padrão ao
|
* Por questões de portabilidade, tente utilizar apenas funções SQL padrão no lugar
|
||||||
invés de funções específicas de servidores SQL de outros fornecedores.
|
de funções específicas de servidores SQL de fornecedores.
|
||||||
* Mantenha o código sucinto e desprovido de SQL redundante—como adição de aspas
|
* Mantenha o código sucinto e desprovido de SQL redundante—como adição de aspas
|
||||||
e parênteses desencessários, ou cláusulas WHERE que podem ser derivadas.
|
e parênteses desnecessários, ou cláusulas WHERE que podem ser derivadas.
|
||||||
* Inclua comentários no código SQL quando necessário. Utilize o estilo C abrindo
|
* Inclua comentários no código SQL quando necessário. Utilize o estilo C abrindo
|
||||||
com `/*` e fechando com `*/` onde possível. Onde não for, preceda os
|
com `/*` e fechando com `*/` onde possível. Onde não for, preceda os
|
||||||
comentários com `--` e termine com uma nova linha.
|
comentários com `--` e termine com uma nova linha.
|
||||||
|
@ -55,7 +55,7 @@ UPDATE file_system
|
||||||
### Evite
|
### Evite
|
||||||
|
|
||||||
* CamelCase—difícil de se analisar rapidamente.
|
* CamelCase—difícil de se analisar rapidamente.
|
||||||
* Prefixos descritivos ou notação Húngara como `sp_` ou `tbl`.
|
* Prefixos descritivos ou notação húngara como `sp_` ou `tbl`.
|
||||||
* Plurais—utilize termos coletivos onde possível. Por exemplo,
|
* Plurais—utilize termos coletivos onde possível. Por exemplo,
|
||||||
`pessoal` ao invés de `funcionários` ou `pessoa` no lugar de `indivíduos`.
|
`pessoal` ao invés de `funcionários` ou `pessoa` no lugar de `indivíduos`.
|
||||||
* Identificadores entre aspas—caso necessário, utilize as aspas duplas SQL92
|
* Identificadores entre aspas—caso necessário, utilize as aspas duplas SQL92
|
||||||
|
@ -69,7 +69,7 @@ UPDATE file_system
|
||||||
### Geral
|
### Geral
|
||||||
|
|
||||||
* Tenha certeza que o nome é único e não é uma [palavra-chave reservada][reserved-keywords].
|
* Tenha certeza que o nome é único e não é uma [palavra-chave reservada][reserved-keywords].
|
||||||
* Matenha o tamanho máximo de 30 bytes—na prática isso são
|
* Matenha o tamanho máximo em 30 bytes—na prática isso são
|
||||||
30 caracateres, a não ser que esteja utilizando um conjunto de
|
30 caracateres, a não ser que esteja utilizando um conjunto de
|
||||||
caracateres multi-byte.
|
caracateres multi-byte.
|
||||||
* Nomes devem começar com uma letra e não devem terminar com underscore.
|
* Nomes devem começar com uma letra e não devem terminar com underscore.
|
||||||
|
@ -78,8 +78,8 @@ UPDATE file_system
|
||||||
se ler.
|
se ler.
|
||||||
* Utilize underscores onde você normalemnte incluiria um espaço
|
* Utilize underscores onde você normalemnte incluiria um espaço
|
||||||
(primeiro nome se torna `primeiro_nome`).
|
(primeiro nome se torna `primeiro_nome`).
|
||||||
* Evite abreviações. Se precisar utilizá-las, tenha certeza de que elas
|
* Evite abreviações. Se precisar utilizá-las, tenha certeza de que serão
|
||||||
serão amplamente compreendidas.
|
amplamente compreendidas.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT first_name
|
SELECT first_name
|
||||||
|
@ -88,13 +88,13 @@ SELECT first_name
|
||||||
|
|
||||||
### Tabelas
|
### Tabelas
|
||||||
|
|
||||||
* Utilize um nome coletivo ou de forma menos ideal, plurais. Por exemplo,
|
* Utilize um nome coletivo ou menos idealmente, plurais. Por exemplo,
|
||||||
(em ordem de preferência) `pessoal` e `empregados`.
|
(em ordem de preferência) `pessoal` e `empregados`.
|
||||||
* Não utilize prefixos com `tbl` ou qualquer outro prefixo descritivo ou notação
|
* Não utilize prefixos com `tbl` ou qualquer outro prefixo descritivo ou notação
|
||||||
húngara.
|
húngara.
|
||||||
* Nunca dê a uma tabela o mesmo nome de uma das suas colunas e vice versa.
|
* Nunca dê a uma tabela o mesmo nome de uma das suas colunas e vice versa.
|
||||||
* Evite, quando possível, concatenar dois nomes de tabelas para criar o nome de
|
* Evite quando possível concatenar dois nomes de tabelas para criar o nome de
|
||||||
uma tabela de relacionamento. Ao invés de utilizar `mecanicos_de_carro`,
|
uma tabela de relacionamento. No lugar de `mecanicos_de_carro`,
|
||||||
prefira `servicos`.
|
prefira `servicos`.
|
||||||
|
|
||||||
### Colunas
|
### Colunas
|
||||||
|
@ -102,8 +102,8 @@ SELECT first_name
|
||||||
* Sempre utilize nomes no singular.
|
* Sempre utilize nomes no singular.
|
||||||
* Quando possível, evite usar apenas `id` como identificador primário da tabela.
|
* Quando possível, evite usar apenas `id` como identificador primário da tabela.
|
||||||
* Não adicione uma coluna como o mesmo nome da tabela e vice versa.
|
* Não adicione uma coluna como o mesmo nome da tabela e vice versa.
|
||||||
* Sempre utilize caixa baixa, exceto onde capitalização fizer sentido, como
|
* Sempre utilize caixa baixa, exceto onde capitalização fizer sentido (como
|
||||||
em nomes próprios.
|
em nomes próprios).
|
||||||
|
|
||||||
### Aliasing ou correlações
|
### Aliasing ou correlações
|
||||||
|
|
||||||
|
@ -158,11 +158,11 @@ onde for apropriado.
|
||||||
Sempre utilize caixa alta para [palavras-chave reservadas][reserved-keywords],
|
Sempre utilize caixa alta para [palavras-chave reservadas][reserved-keywords],
|
||||||
como `SELECT` e `WHERE`.
|
como `SELECT` e `WHERE`.
|
||||||
|
|
||||||
É melhor evitar palavras-chave reservadas abreviadas; utilize suas variações com
|
É melhor evitar palavras-chave abreviadas; utilize suas variações por extenso
|
||||||
nome completo (use `ABSOLUTE` ao invés de `ABS`).
|
(use `ABSOLUTE` ao invés de `ABS`).
|
||||||
|
|
||||||
Não utilize palavras-chave de um fornecedor específico de banco de dados
|
Não utilize palavras-chave de um fornecedor específico de banco de dados. Onde for
|
||||||
onde for possível utilizar palavras-chave ANSI SQL que tenham a mesma função.
|
possível, utilize palavras-chave reservadas ANSI SQL que tenham a mesma função.
|
||||||
Isso ajuda na portabilidade do código.
|
Isso ajuda na portabilidade do código.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
|
@ -173,16 +173,15 @@ SELECT model_num
|
||||||
|
|
||||||
### Espaços em branco
|
### Espaços em branco
|
||||||
|
|
||||||
Para tornar o código mais fácil de ler, é importante que o cumprimento correto
|
Para tornar o código mais fácil de ler, é importante o uso correto do espaçamento.
|
||||||
de espaçamento esteja sendo utilizado. Não coloque código ou remova espaços
|
Não insira código ou remova espaços em linguagem natural.
|
||||||
naturais da linguagem.
|
|
||||||
|
|
||||||
#### Espaços
|
#### Espaços
|
||||||
|
|
||||||
Espaços devem ser utilizados para alinhar o código, de forma que as palavras-chave
|
Espaços devem ser utilizados para alinhar o código, de forma que as palavras-chave
|
||||||
terminem sempre no mesmo limite de caracteres. Isso forma um rio tipográfico,
|
fiquem sempre no mesmo limite. Isso forma um rio tipográfico, tornando fácil visualizar
|
||||||
tornando fácil bater olho, visualizar o código e separar as palavras-chave dos
|
o código e separar as palavras-chave dos detalhes de implementação.
|
||||||
detalhes de implementação. Rios são [ruins na tipografia][rivers], mas úteis aqui.
|
Rios são [ruins na tipografia][rivers], mas úteis aqui.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
(SELECT f.species_name,
|
(SELECT f.species_name,
|
||||||
|
@ -204,15 +203,15 @@ detalhes de implementação. Rios são [ruins na tipografia][rivers], mas úteis
|
||||||
GROUP BY b.species_name, b.observation_date)
|
GROUP BY b.species_name, b.observation_date)
|
||||||
```
|
```
|
||||||
|
|
||||||
Note que o `SELECT`, `FROM`, etc. estão todos a direita, alinhados, enquanto
|
Note que o `SELECT`, `FROM`, etc. estão todos alinhados à direita, enquanto
|
||||||
os nomes das colunas em si e os detalhes específicos de implementação estão
|
os nomes das colunas em si e os detalhes de implementação estão alinhados à
|
||||||
alinhados à esquerda.
|
esquerda.
|
||||||
|
|
||||||
Sempre inclua espaços:
|
Sempre inclua espaços:
|
||||||
|
|
||||||
* antes de depois do símbolo igual (`=`)
|
* antes e depois do símbolo igual (`=`)
|
||||||
* depois de vírgulas (`,`)
|
* depois de vírgulas (`,`)
|
||||||
* ao redor de apóstrofes (`'`) caso não estejam entre parênteses, com uma vírgula
|
* ao redor de apóstrofes (`'`) caso não estejam entre parênteses ou com uma vírgula
|
||||||
ou ponto e vírgula.
|
ou ponto e vírgula.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
|
@ -227,15 +226,15 @@ SELECT a.title, a.release_date, a.recording_date
|
||||||
Sempre inclua novas linhas/espaço vertical:
|
Sempre inclua novas linhas/espaço vertical:
|
||||||
|
|
||||||
* antes de `AND` ou `OR`
|
* antes de `AND` ou `OR`
|
||||||
* depois de vírgulas, separando as queries para uma leitura mais fácil
|
* depois de vírgulas, separando as queries para facilitar a leitura
|
||||||
* depois de cada definição de palavras-chave
|
* depois de cada definição de palavras-chave
|
||||||
* depois de um ponto, quando seperando múltiplas colunas em grupos lógicos
|
* depois de um ponto, quando seperando múltiplas colunas em grupos lógicos
|
||||||
* para separar código em seções relacionadas, o que ajuda na legibilidade de
|
* para separar código em seções relacionadas, o que ajuda na legibilidade de
|
||||||
grandes pedaços de código.
|
grandes pedaços de código.
|
||||||
|
|
||||||
Manter todas as palavras-chave alinhadas ao lado direito e os valores alinhados
|
Manter todas as palavras-chave alinhadas à direita e os valores alinhados
|
||||||
ao lado esquerdo, cria uma lacuna no meio da query. Isso torna muito mais fácil
|
à esqueda cria uma lacuna no meio da query. Isso torna a análise da definição
|
||||||
e rápido a análise da definição da query.
|
da query mais fácil e rápida.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
INSERT INTO albums (title, release_date, recording_date)
|
INSERT INTO albums (title, release_date, recording_date)
|
||||||
|
@ -259,13 +258,13 @@ SELECT a.title,
|
||||||
|
|
||||||
### Indentação
|
### Indentação
|
||||||
|
|
||||||
Para garantir que o SQL fique legível, é importante que padrões de indentação
|
Para garantir que o SQL seja legível, é importante que padrões de indentação
|
||||||
sejam seguidos.
|
sejam seguidos.
|
||||||
|
|
||||||
#### Joins
|
#### Joins
|
||||||
|
|
||||||
Joins devem ser indentados do outro lado do rio e agrupados com uma nova linha
|
Joins devem ser indentados do outro lado do rio tipográfico e agrupados
|
||||||
quando necessário.
|
com uma nova linha quando necessário.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT r.last_name
|
SELECT r.last_name
|
||||||
|
@ -281,10 +280,10 @@ SELECT r.last_name
|
||||||
|
|
||||||
#### Subqueries
|
#### Subqueries
|
||||||
|
|
||||||
Subqueries também devem ser alinhadas do lado direito do rio e então seguir o
|
Subqueries também devem ser alinhadas à direita do rio e seguir o mesmo estilo
|
||||||
mesmo estilo de qualquer outra query. As vezes faz sentido ter o parêntese de
|
de qualquer outra query. As vezes faz sentido ter o parêntese de fechamento em
|
||||||
fechamento em uma nova linha na mesma posição que o parêntese de abertura foi
|
uma nova linha na mesma posição que o parêntese de abertura foi definido—isso é
|
||||||
definido—isso é especialmente importante onde você tem subqueries aninhadas.
|
especialmente importante onde você tem subqueries aninhadas.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT r.last_name,
|
SELECT r.last_name,
|
||||||
|
@ -307,9 +306,9 @@ SELECT r.last_name,
|
||||||
* Onde um valor precisa ser interpretado antes de ser retornado pelo banco de
|
* Onde um valor precisa ser interpretado antes de ser retornado pelo banco de
|
||||||
dados, use a expressão `CASE`. Cláusulas `CASE` podem ser aninhadas para formar
|
dados, use a expressão `CASE`. Cláusulas `CASE` podem ser aninhadas para formar
|
||||||
estruturas lógicas mais complexas.
|
estruturas lógicas mais complexas.
|
||||||
* Evite o uso de cláusulas `UNION` e tabelas temporários quando possível. Se
|
* Evite o uso de cláusulas `UNION` e tabelas temporárias quando possível. Se
|
||||||
o schema pode ser otimizado, removendo a dependência desses recursos, então
|
o schema pode ser otimizado removendo a dependência desses recursos, é melhor
|
||||||
é provável que essa otimização deve ser feita.
|
otimizar.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT CASE postcode
|
SELECT CASE postcode
|
||||||
|
@ -324,19 +323,19 @@ SELECT CASE postcode
|
||||||
|
|
||||||
## Sintaxe Create
|
## Sintaxe Create
|
||||||
|
|
||||||
Enquanto declarando informação do schema, é importante manter código legível
|
Enquanto declarando informação do schema, é importante manter um código humanamente
|
||||||
por humanos. Para facilitar isso, tenha certeza que as definições das colunas
|
legível. Para garantir isso, assegure-se de que as definições das colunas estejam
|
||||||
estão ordenadas e agrupadas onde fizer sentido.
|
ordenadas e agrupadas onde fizer sentido.
|
||||||
|
|
||||||
Indente definições de coluna com quatro (4) espaços dentro da definição `CREATE`.
|
Indente definições de coluna com quatro (4) espaços dentro da definição `CREATE`.
|
||||||
|
|
||||||
### Escolhendo tipos de dados
|
### Escolhendo tipos de dados
|
||||||
|
|
||||||
* Onde possível, não utilize tipos de dados específicos de certos tipos de banco
|
* Onde possível, não utilize tipos de dados específicos de fornecedores de banco
|
||||||
de dados—eles não são portáteis e podem não estar disponíveis em versões antigas
|
de dados—esses formatos geralmente não são portáteis e podem estar indisponíveis
|
||||||
do mesmo banco de dados.
|
em versões antigas do banco de dados do mesmo fornecedor.
|
||||||
* Apenas utilize os tipos `REAL` ou `FLOAT` onde é estritamente necessário para
|
* Utilize os tipos `REAL` ou `FLOAT` apenas onde o uso de pontos flutuantes for
|
||||||
utilizar pontos flutuantes, do contrário prefira sempre `NUMERIC` e `DECIMAL`.
|
estritamente necessário, do contrário prefira sempre `NUMERIC` e `DECIMAL`.
|
||||||
Erros de ponto flutuante são um transtorno!
|
Erros de ponto flutuante são um transtorno!
|
||||||
|
|
||||||
### Especificando valores padrão
|
### Especificando valores padrão
|
||||||
|
|
Loading…
Reference in a new issue