Escolar Documentos
Profissional Documentos
Cultura Documentos
typesese
M
PADRÕES DE
NOMENCLATURA PARA
OBJETOS DE BANCO DE
DADOS
Oracle
Resumo
Formalizar os padrões de nomenclatura dos objetos criados no banco de dados.
Sumário
Os padrões de nomenclatura para objetos criados de banco de dados (BD) detalhados nesse
documento são válidos para objetos de sistemas desenvolvidos e mantidos pela GTIT e sistemas
desenvolvidos em parceria com fornecedores, o que não inclui soluções de prateleira.
Os sistemas em sua maioria estão associados a um Owner no BD, contudo pode acontecer de não ter
como no caso dos sistemas Corporativo e PGCURSO - Cadastro de Cursos PRPPG.
Todos os sistemas devem possuir uma sigla, composta por 2 ou 3 letras. A sigla será utilizada como
prefixo no nome dos objetos de banco de dados gerados para o sistema, assim facilitando a identificação e
evitando duplicidade.
Alguns exemplos:
Sigla Sistema
ATA Sistema de Atas
EX Extensão
FA Financeiro
GEN Genérico (Contêm tabelas, rotinas, funções, etc. genéricas à PUCRS)
GR Graduação
PG Pós-Graduação
SIU Sistema de Identificação Unificada
Abaixo os objetos mantidos no BD serão detalhados com seus respectivos conceitos, em linhas
gerais, e o padrão de nomenclatura adotado pela GTIT o qual deve ser seguido. É responsabilidade das
equipes de desenvolvimento e DBAs garantir o uso correto desses.
Regras gerais ao criar objetos no BD:
Possuir nomes sugestivos, facilitando a identificação do seu conteúdo e objetivo;
Estar no singular;
Sem acentuação;
Sem preposição (tais como: do, de etc.);
Sem caracteres especiais (tais como: @, #, $, %, &, etc.);
No caso de nome compostos devem ser separados por sublinhado ( _ );
Possuir no máximo 30 caracteres, abrevie se necessário.
2.1. Tabela
É uma estrutura matricial composta por linhas, também conhecida como tuplas, e colunas, onde
cada linha representa um objeto do negócio e cada coluna representa uma característica dele.
Ao criar novas tabelas, lembre-se de inclui comentários*, criar uma chave primária* e avaliar a
necessidade de criar colunas padrões para auxiliar na identificação do último usuário que atualizou o
registro:
DT_ALTERACAO;
NR_OPERADOR varchar2 (15) not null;
CD_IP varchar2 (30) null.
Tabelas resultantes do relacionamento <SIGLA SISTEMA>_<NOME TABELA 1> __<NOME TABELA 2>
entre outras duas tabelas: utilize dois
Exemplo: CP_ATIVIDADE__PROFESSOR
sublinhados (__) para separar as tabelas.
Legenda:
<SIGLA SISTEMA>: formada por 2 ou 3 letras;
<NOME TABELA>, <NOME TABELA1> e <NOME TABELA2>: nome representativo.
Para tabelas de log utilize trigger que mantém o formato padrão facilitando o entendimento e
manutenção futura por toda a equipe de desenvolvimento. Veja o exemplo:
CREATE OR REPLACE TRIGGER trg_gr_curriculo_nivel_aiud
AFTER INSERT OR UPDATE OR DELETE
on gr_curriculo_nivel
FOR EACH ROW
declare
V_USU varchar2(10);
V_IP varchar2(15);
E_USU exception;
begin
V_USU:= pkg_contexto.p_get_contexto_var('contexto_usuario','sistseg_user');
V_IP := pkg_contexto.p_get_contexto_var('contexto_usuario','ip');
IF inserting THEN
INSERT INTO GR_CURRICULO_NIVEL_LOG (
CHAVE_PRIMARIA,COLUNA,
tp_operacao, dt_operacao, cd_operador, tx_ip
)
VALUES (
:new.CHAVE_PRIMARIA,:new.COLUNA,
'I', sysdate, V_USU, V_IP
);
ELSIF updating THEN
IF
NVL(:NEW.COLUNA,'X') <> NVL(:OLD.COLUNA,'X')
THEN
INSERT INTO GR_CURRICULO_NIVEL_LOG (
CHAVE_PRIMARIA,COLUNA,
tp_operacao, dt_operacao, cd_operador, tx_ip
)
VALUES (
nvl(:new.CHAVE_PRIMARIA,:old.CHAVE_PRIMARIA),
decode (:new.COLUNA, :old.COLUNA, null, :new.COLUNA),
'A', sysdate, V_USU, V_IP
);
END IF;
ELSIF deleting THEN
INSERT INTO GR_CURRICULO_NIVEL_LOG (
CHAVE_PRIMARIA,
COLUNA,
tp_operacao, dt_operacao, cd_operador, tx_ip
)
VALUES (
:old.CHAVE_PRIMARIA,
:old.COLUNA,
'E', sysdate, V_USU, V_IP
);
END IF;
Exception
when E_USU then
RAISE_APPLICATION_ERROR(-20300, 'Usuário e/ou Ip não foi definido.');
end;
/
*Para a chave primária (Primary Keys – PKs) deve ser seguida a orientação:
Deverá ser criada uma coluna numérica especificamente para o uso da PK, sendo uma sequência.
Conforme as boas práticas descritas abaixo.
Algumas situações que podem ocorrer:
Há algum campo único na tabela (CPF, COD_MATRICULA): neste caso, deverá ser criada uma coluna
numérica e sequencial especificamente para o uso da PK. O campo único deverá ser estabelecido
através de Unique Key.
Deve ser criada uma nova tabela em um Owner cuja a tabela de relacionamento tenha uma PK que é
um código (CPF, MATRÍCULA): neste caso, deverá ser criada uma coluna numérica e sequencial
especificamente para o uso da PK. Se houver campo único (nova tabela) deverá ser estabelecido
através de Unique Key e o relacionamento feito por Foreign Key entre a PK da tabela antiga e a UK
da tabela nova.
#######################################################################################
See Also:
Oracle Database Concepts for general information about primary key constraints
o Oracle Database SQL Language Reference for complete information about primary key
constraints, including restrictions
Fonte:
https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_constraints.htm#ADFNS99957
*Os comentários devem ser incluídos a fim de facilitar a identificação do objetivo da tabela e de cada
coluna.
Por exemplo:
O campo DT_INCLUSAO com o comentário 'Data de inclusão do registro', não é necessário.
Já o comentário para o campo NR_CARGA_HORARIA_USADA = 'Carga horária usada para a liberação
da disciplina curricular' será útil para o entendimento do campo.
2.2. Coluna
É um item de dados do registro, com um nome e um tipo associado, as colunas de uma tabela são
também conhecidas por campos ou atributos.
Quando o conteúdo de uma coluna for letras, esse conteúdo deve ser armazenado em maiúsculo.
Essa regra pode ser validada no BD através de uma constraint específica para a coluna.
Exemplo: coluna SEXO deve conter “M” e “F” maiúsculo.
<PREFIXO>_<NOME DA COLUNA>
Onde nome coluna deve receber um nome significativo que reflita claramente o conteúdo que deve ser
armazenado na coluna. Evitar nomes redundantes que não agregam valor, por exemplo: NM_NOME,
ST_STATUS
2.3. Constraint
São restrições estabelecidas para uma coluna do BD, e podem ser dos seguintes tipos:
Primary Key (Chave primária): coluna ou conjunto de colunas que servem para definir de forma
única um registro na tabela. Uma coluna de chave primária não pode conter valores nulos nem pode
conter valores repetidos, isto é, ela identifica cada registro dando-lhe unicidade.
Foreign Key (Chave estrangeira): determina uma coluna ou um conjunto de colunas que possuem
valores em outras tabelas, referente a um relacionamento. Ela verifica se o valor referido ao atributo
já foi inserido na tabela base (origem).
Unique Key (Chave única): é uma coluna que obedeça à restrição de unicidade, isto é, não pode
ter valores repetidos. Contudo, pode conter valores nulos.
Check Constraint: é possível obrigar que na inserção de dados sejam verificadas condições, sendo
a inserção de dados realizada somente se o valor devolvido for verdade ou desconhecido no caso de
existir comparações com valores nulos. As condições podem incluir expressões aritméticas e
chamadas de funções SQL.
Utilize check constraint quando uma coluna possuir uma lista de valores pré-definida (com poucos
valores e estáveis) e a coluna não admitir ocorrência de valor nulo.
Exemplo: SEXO CHAR(1) NOT NULL CONSTRAINT CK_PG_SEXO CHECK (TP_SEXO IN ('F','M')).
Constraint para Foreign key: utilize dois <TIPO OBJETO>_<SIGLA SISTEMA>_<NOME TABELA
sublinhados (__) para separar as tabelas de DESTINO>__<NOME TABELA ORIGEM>_ <NUM>:. Exemplo:
destino (filha) e origem (pai). FK_SIM_INDICADOR__ACAO.
Legenda:
<TIPO OBJETO>:
o PK para primary key;
2.4. Trigger
É um tipo especial de procedimento armazenado no banco de dados, que é executado sempre que
há uma tentativa de modificar os dados de uma tabela. Quando há uma tentativa de inserir, atualizar ou
excluir os dados em uma tabela, e uma Trigger tiver sido definida na tabela para essa ação específica, ela
será executada automaticamente, não podendo nunca ser ignorada.
Ao criar triggers tenha cuidado para manter a coerência com o tipo correto <TIPO TRIGGER>. Atente
aos os eventos que disparados pela trigger.
Before: onde os campos :old e :new podem ser lidos e alterados;
After: onde os campos :old e :new podem somente ser lidos.
Instead Of; usada para manipular views não atualizáveis.
Legenda:
TRG : representa um objeto do tipo trigger;
<SIGLA SISTEMA>: formada por 2 ou 3 letras;
<NOME TABELA ALTERADA>: nome da tabela alterada, sobre a qual a trigger se referencia;
<NUM>: número sequencial para distinguir os diversos tipos de objeto, se necessário;
<TIPO DE TRIGGER>: conforme padrões descritos abaixo
2.5. View
É uma representação virtual de uma tabela, pois não possui linhas próprias, mas sim as obtém em
tempo de execução e as disponibiliza em memória para acesso por uma query. Este objeto tem suas linhas e
colunas calculadas dinamicamente através de um SELECT pré-estabelecido, cada vez que solicitamos. Pode
conter colunas de uma ou várias tabelas físicas ou até mesmo de outras Views.
Uma View funciona de forma semelhante a uma tabela, sendo possível utilizá-la em qualquer lugar
onde se possa utilizar uma tabela.
Ao criar uma view, lembre-se:
Crie-as com funções específicas, mesmo que para isso precise criar mais de uma view;
Tenha cuidado no uso de views encadeadas (view que chama outra view), pois isso afeta
consideravelmente o desempenho;
Otimize as querys a serem utilizadas, caso a query possua mais de uma tabela utilize aliás.
Siga as orientações do item 2.2 para as colunas
Legenda:
VW: representa um objeto do tipo view;
<SIGLA SISTEMA>: ser formada por 2 ou 3 letras;
<NOME VIEW>: nome significativo que reflita claramente o conteúdo que será trazido por ela.
São utilizadas para fazermos cálculos, armazenamentos de dados e dar agilidade na troca de
informações entre um BD ou entre tabelas, com o seu uso é possível melhorar o desempenho do sistema.
Legenda:
MV: representa um objeto do tipo materialized view;
<SIGLA SISTEMA>: ser formada por 2 ou 3 letras;
<NOME MATERIALIZED VIEW>: nome significativo que reflita claramente o conteúdo que será
trazido por ela.
2.6.1. Sequence
É um objeto com estrutura de dados independente utilizado para gerar uma sequência de valores.
Sua utilização como Primary Key facilita a manutenção do modelo de dados no caso de alteração na chave de
negócio.
Ao criar uma sequence, lembre-se:
Devem sempre ser lidas na trigger de insert;
Cuidado ao utilizar o parâmetro nocache, pois apresentarão pior performance (gera mais I/O
para atualizar o dicionário de dados);
Em ambientes RAC, que é o nosso caso, sequences com a cláusula order apresentam pior
performance, pois os valores das sequences precisam ser sincronizados entre os nós do RAC,
através de um serviço global de cache, no qual ocorre o evento chamado global lock.
Legenda:
SQ: representa um objeto do tipo sequence;
<SIGLA SISTEMA>: formada por 2 ou 3 letras;
<NOME TABELA>: receber o nome da tabela que se referência com esta sequence;
<NUM>: número sequencial para distinguir sequences que tenham o mesmo nome.
2.7. Índice
Legenda:
IND: representa um objeto do tipo índice;
<SIGLA SISTEMA>: formada por 2 ou 3 letras;
<NOME TABELA>: nome da tabela que se referência com este índice;
<NUM>: um número sequencial para distinguir os diversos índices de uma tabela.
Function (função): é uma função armazenada no BD que pode ser chamado de dentro do próprio
Oracle ou a partir de alguma linguagem de programação, via ODBC/JDBC. Funções sempre retornam
um valor a quem as chamou.
No uso de Function, Stored Procedure e Package defina uma área de identificação geral do objeto,
onde deverão existir informações tais como: Autor, Data, Função/Objetivo.
Legenda:
<TIPO OBJETO>:
o FUN para function.
o PRD para procedure.
o PKG para package.
o TP para tipos.
<SIGLA SISTEMA>: formada por 2 ou 3 letras;
<NOME OBJETO>: nome significativo que reflita claramente o conteúdo que deve ser armazenado no
objeto.
LOG HISTÓRICO
C
3. Histórico de Revisões