PADRÕES E NORMAS PARA ADMINISTRAÇÃO DE DADOS Versão 1.0 Controle de Versões Data 20/07/2011 Versão 1.0 Descrição Criação do Documento Autor Diego Santos Controle de Aprovações Data Versão Descrição Autor Sumário Objetivo ........................................................................................................................................ 4 Aplicabilidade .............................................................................................................................. 5 Estrutura do Documento ........................................................................................................... 5 1. Convenção Básica para Nomenclatura .......................................................................... 6 3. Colunas de Tabelas e Views do Banco de Dados ...................................................... 12 4. Tipos de Dados Padrão por SGBD................................................................................ 14 5. Normas para Modelagem de Banco de Dados ............................................................ 14 6. Dicionário de Dados ......................................................................................................... 16 6.1. 7. Regras Básicas ..................................................................................................... 16 Usuário ............................................................................................................................... 18 7.1. Owner do schema ................................................................................................ 18 7.2. Usuário da aplicação............................................................................................ 19 7.3. Usuário de consulta.............................................................................................. 19 Objetivo Diante deste cenário heterogêneo e considerando a complexidade existente nos modelos de dados, a padronização e criação de normas para nomenclatura de objetos no banco de dados é fundamental para que alcançar um alto grau de qualidade na execução dos serviços, além de garantir a uniformidade e manutenabilidade dos objetos a serem construídos e disponibilizados. A padronização apresenta diversas vantagens, dentre elas: Diminuição de custo na manutenção dos sistemas; Coesão dos dados e sistemas e consistência nas informações fornecidas; Eliminação de suposições, por membros das equipes, de como proceder na criação de objetos de bancos de dados; Facilitação do processo de manutenção dos sistemas e soluções desenvolvidos ao longo do tempo; Estímulo à reutilização dos objetos: Admitir revisões e atualizações com menor impacto possível. E permite atingir os seguintes pilares da administração de dados: Redução ou Eliminação de Redundâncias: Os dados deixam de ser privativos de cada sistema. Eliminação de Inconsistências: O dado contido em um campo sempre será o mesmo, independente de qual sistema esteja acessando. Restrições de Segurança: Impede que pessoas não autorizadas utilizem ou atualizem um determinado arquivo ou campo. Independência dos Dados: Os dados estariam à disposição, independente das manutenções realizadas pela Gerência de Administração de Banco de Dados. Manutenção da Integridade. Aplicabilidade Este documento se aplica a todos os objetos ligados aos bancos de dados (tabelas, sequences, triggers, functions, procedures, packages etc.) Não serão afetados os objetos legados, mas não será permitido que os novos sejam criados ou recebidos fora do padrão. Estrutura do Documento O presente documento está organizado em 07 capítulos: Capítulo 1 – Determina a convenção básica de nomenclatura, ou seja, a regra macro que deverá ser seguida por todos os objetos do banco de dados. Capítulo 2 - Apresenta uma visão geral dos possíveis objetos a serem criados com uma breve descrição de sua utilização, a regra para formação do nome e um exemplo. Capítulo 3 – Determina os tipos de atributos que podem existir em tabelas e views. Capítulo 4 – Apresenta os tipos de dados padrão de cada SGBD. Capítulo 5 – Descreve as principais normas para modelagem de Banco de Dados. Capítulo 6 – Descreve o padrão para documentação do dicionário de dados. Capítulo 7 – Apresenta os tipos de usuários com os respectivos os privilégios de cada uma. 1. Convenção Básica para Nomenclatura Todos os nomes de objetos relacionados ao banco de dados devem estar: em letras maiúsculas, no singular, sem acentuação e sem caracteres especiais (tais como @, #, $, %, &, etc). Os nomes dos objetos devem ser compostos de prefixo indicador da finalidade do objeto e o nome propriamente dito. O separador universal que deverá ser tanto entre prefixo e nome quanto para nomes compostos é o caracter sublinhado ( _ ). Evitar o uso de nomes extensos, sendo que o tamanho máximo é de 30 caracteres. Caso o nome do objeto exceda o limite de 30 caracteres, poderão ser usados acrônimos ou abreviações. O uso de acrônimo deve seguir a convenção nacional, por exemplo: CEP, CPF, PETI. O uso de abreviações deve seguir as regra geral de abreviaturas: A abreviatura deve ter metade ou menos da metade da palavra original, do contrário, será melhor escrever a palavra por extenso. A regra geral para abreviatura das palavras é simples. Basta escrever a primeira sílaba e a primeira letra da segunda sílaba. Ex.: fut. (futuro), adj. (adjetivo), gram. (gramática). Nunca corte a palavra numa vogal, sempre numa consoante. As palavras abreviadas não devem ter comprimento menor que 3(três) caracteres, a não ser que seja auto-explicativa (kg, gb, mb). Caso a primeira letra da segunda sílaba seja vogal, escreve-se até a consoante. Se a segunda sílaba iniciar por duas consoantes, as duas farão parte da abreviatura. Ex.: pess. (pessoa), secr (secretário). 2. Objetos de Banco de Dados Objeto Schema Descrição Padrão de Nomenclatura Um conjunto de objetos de propriedade de um usuário (OWNER). O nome do schema normalmente representa o sistema Tabela utilizada para armazenar dados. TB_+[NOME DA TABELA] Exemplo CERIMONIAL CADUNICO (Tabela de Sistema) Existem diversos tipos de tabelas que serão detalhadas TR_+[NOME DA TABELA1] +_+[NOME DA TABELA2] no próximo capítulo. (Tabela de Relacionamento) TH_+[NOME DA TABELA] TB_ENTIDADE (Tabela de Histórico) TB_CRIANCA_PETI TMP_+[NOME DA TABELA] TR_USUARIO_PERFIL (Tabela Temporária) TH_PAGAMENTO Table BCK+[NOME DA TABELA] (Backup de Tabela ) Obs.: as tabelas TMP e BCK são de uso interno do banco de dados e devem ficar em um schema separado no banco. View É uma representação lógica de uma ou de várias tabelas VW_+[NOME DA VIEW] armazenadas em banco, mas sem armazenamento próprio. VW_CRAS VW_PLANO_2009 O comentário da VW deverá ser feito como o de uma tabela. Materialized View ou É uma representação lógica de uma ou de várias tabelas armazenadas em banco, mas MV_+[NOME DA VIEW] com armazenamento próprio. MV_STATUS_PLANO Snapshots Sequence Constraint Check Objeto do banco utilizado SQ_+[NOME DA TABELA] para gerar números inteiros únicos. Normalmente utilizado Obs1: O nome da tabela deve perder o prefixo TB. para gerar códigos que servirão como primary key. Define restrições de preenchimento para a coluna. O processamento é realizado pelo banco de dados sobre valores informados. SQ_ENTIDADE SQ_ENDERECO CK_+[NOME DA TABELA]+_+[NOME DA COLUNA] Obs: CK_ENTIDADE_STATIV O Os nomes da tabela e da coluna devem perder os prefixos. O caracter ‘_’ deve ser suprimido quando existir. Determina uma coluna ou um conjunto de colunas que possuem valores em outras tabelas. Relativa a uma referência ou a um relacionamento. Foreign Key FK_+[NOME DA TABELA PAI]+_+ [NOME DA TABELA FILHO] Onde: NOME DA TABELA PAI – tabela que é referenciada, que contém a PK; NOME DA TABELA FILHO – tabela que referência, que contém a FK; Obs: O nome da tabela deve perder o prefixo TB. O caracter ‘_’ deve ser suprimido do nome da tabela quando existir. FK_UF_MUNICIPIO FK_TIPOENTIDADE_EN TIDADE Índice utilizado para identificar Índice utilizado para identificar univocamente cada linha da univocamente cada linha da tabela. tabela.PK_+[NOME DA TABELA] Obs: PK_MUNICIPIO PK_ENTIDADE Primary Key O nome da tabela deve perder o prefixo TB. O caracter ‘_’ deve ser suprimido do nome da tabela quando existir. Índice que não é o primário, mas que evita a duplicidade de registro, isto é, esta constraint determina que uma coluna não poderá ter duas linhas com o mesmo valor. 1-Formação simples UK_+[NOME DA TABELA]+_+[NOME DA COLUNA] 2-Formação com mais de um atributo na UK UK_+[NOME DA TABELA]+_+[NOME DA COLUNA] +_+[NOME DA COLUNA] Unique Key UK_BENEFICIARIO_NIS UK_SERVIDOR_CPF Obs: Os nomes da tabela e da coluna devem perder os prefixos. O caracter ‘_’ deve ser suprimido do nome da tabela e da coluna quando existir. Objeto de um esquema que pode otimizar a recuperação de linhas. Index 1-Formação simples IX_+[NOME DA TABELA]+_+[NOME DA COLUNA] 2-Formação com mais de um atributo na formação do índice IX_+[NOME DA TABELA]+_+[SEQUENCIAL COM 3 DÍGITOS] Obs: Os nomes da tabela e da coluna devem perder os IX_USUARIO_NUCPF IX_ENTIDADE_001 prefixos. O caracter ‘_’ deve ser suprimido do nome da tabela e da coluna quando existir. Armazena o rowid com o valor IB_+[NOME DA da chave. TABELA]+_+[NOME DA COLUNA] Obs: Bitmap Index IB_USUARIO_NUCPF O nome da tabela e o nome da coluna devem perder o prefixo e os caracteres ‘_’ devem ser suprimidos. Table Partition Partition Index Consiste em partições (tabelas menores) para cada grupo de valor de entrada indexado em colunas de uma tabela. Por exemplo, particionar beneficiários por UF. PD+_+[NOME DA TABELA] +_+[NOME DA COLUNA]+_+[RANGE] Obs: PD_BENEFICIARIO_UF _AC O nome da tabela e o nome da coluna perdem o prefixo e o caracter ‘_’. Consiste em partições para PI+_+[NOME DA TABELA] cada valor de entrada +_+[NOME DA COLUNA] indexado em colunas de uma +_+[RANGE] tabela. Obs: PI_BENEFICIARIO_UF_ AC O nome da tabela e o nome da coluna perdem o prefixo e o caracter ‘_’. Database Link Nomenclatura para links entre DBL+_+[BANCO] schemas/bancos para os +_+[USUARIO] usuários externos a este O nome do usuário perde o schema/banco caracter ‘_’. Function São rotinas de FC_+[NOME DA FUNÇÃO] processamento que retornam O nome da função deve indicar valores. o objetivo da mesma. FC_CALCULA_DV Stored Procedure PR_+[NOME DA Conjunto de procedimentos PROCEDURE] armazenados no banco. O nome da procedure deve indicar o objetivo da mesma. PR_IMPORTA_ARQUIV O Package Grupo funções, PC_ACERTO_DADOS_ de procedures, PC_+[NOME DO PACKAGE] comandos sql e DBL_GEOBD_SCOTT variáveis, diretamente dados. que executa O nome da procedure deve no banco de indicar o objetivo da mesma. Agrupamento de comandos PL/SQL e especificações Utilizar o mesmo nome da Package Body disponíveis para todos os Package objetos públicos listados na Package. METAS PC_ACERTO_DADOS_ METAS TG_+[AÇÃO] +_+[NOME DA TABELA] TGA_+[NOME DA TABELA] (Trigger de Auditoria) Obs: Trigger (Row / Statement) Procedimento a ser disparado O nome da tabela deve perder antes ou após a exclusão de o prefixo TB. um registro da tabela associada. O caracter ‘_’ deve ser suprimido do nome da tabela e da coluna quando existir. TG_ATUALIZASTATUS_ ENTIDADE TG_DELETAHISTORIC O_BENEFICIARIO TGA_ENTIDADE TG_ATUALIZASTATUS_ ENTIDADE_001 Caso exista Trigger com o mesmo nome deverá ser incluído +’_’+ [SEQUENCIAL COM 3 DÍGITOS] TS_+[NOME DO SCHEMA]_DAT+[N°SEQUENC IALCOM 3 DÍGITOS] Tablespace Genérico de Dados ou Obs. O número sequencial só TS_CADUNICO_DAT_0 deve ser usado quando q 01 quantidade de tablespaces de dados do schema for maior que 1. TS_+[NOME DO SCHEMA]_IDX+[N°SEQUENCI ALCOM 3 DÍGITOS] Tablespace Tablespace de Índices Tablespace de Lob TS_CERIMONIAL_DAT Obs. O número sequencial só deve ser usado quando q quantidade de tablespaces de índices do schema for maior que 1. TS_ CERIMONIAL _IDX TS_CADUNICO_IDX_00 1 TS_+[NOME DO TS_ CERIMONIAL _LOB SCHEMA]_LOB+[N°SEQUENC TS_CADUNICO_LOB_0 IALCOM 3 DÍGITOS] 01 Obs. O número sequencial só deve ser usado quando q quantidade de tablespaces de lobs do schema for maior que 1. 3. Colunas de Tabelas e Views do Banco de Dados Tipos de Colunas das Tabelas e Views Padrão de Nomenclatura Data Type Padrão Código numérico, seqüencial e único que representa a chave primária, identificador da tabela. ID_+[NOME DO ATRIBUTO] Numérico Código numérico que representa a chave primária, identificador da tabela. A unicidade neste campo não é obrigatória. (não necessariamente seqüencial) CD_+[NOME DO ATRIBUTO] Numérico Número NU_+[NOME DO ATRIBUTO] Texto DT_+[NOME DO ATRIBUTO] Data Referência RF_+[NOME DO ATRIBUTO] Texto Hora HR_+[NOME DO ATRIBUTO] Hora DS_+[NOME DO ATRIBUTO] Texto NM_+[NOME DO ATRIBUTO] Texto VL_+[NOME DO ATRIBUTO] Valor Data Descrição Nome Valor Exemplo ID_PESSOA ID_DOMICILIO CD_PRODUTO CD_DOMICILIO NU_CPF NU_ANO_BASE DT_VENDA DT_INICIO_ATIVIDADE RF_FOLHA HR_CHEGADA HR_EMISSAO_TITULO DS_OBSERVACAO DS_ENDERECO_LOJA NM_UF NM_PESSOA VL_PAGAMENTO VL_SALARIO_BRUTO Sigla Quantidade SG_UF SG_+[NOME DO ATRIBUTO] Texto QT_+[NOME DO ATRIBUTO] Valor ST_+[NOME DO ATRIBUTO] Caractere SG_PREFIXO_DOC QT_PESSOA_DOMICILIO QT_INTEGRANTE_FAMILIA Status O Status representa um campo que só permite 2 valores, geralmente Sim ou Não. ST_ATIVO Domínio: S ou N IN_ESTADO_CIVIL Domínio: Indicador O indicador representa um IN_+[NOME DO campo que possui um ATRIBUTO] conjunto de domínio maior que 2 elementos. S (Solteiro) Caractere C (Casado) E (Separado) D (Divorciado) V(Viúvo) Tipo Tipo é um campo que obrigatoriamente são TP_+[NOME DO referenciados pelas ATRIBUTO] tabelas DOMINIO_TIPO e TIPO, explicadas no Item 7 do Capítulo 5 Número TP_DOCUMENTO 4. Tipos de Dados Padrão por SGBD Tipo de Dados Oracle SQL Server DB2 PostgreSql My Sql Integer Integer Numeric(n) Smallint Integer Numérico Number(n) Decimal(n) Smallint Smallint Texto Varchar2(n) Date Varchar(n) Date Varchar(n) Character varying(n) Varchar(n) Date Date Date timestamp Timestamp Timestamp Timestamp Time Time Data Timestamp Hora Timestamp Valor Number(n,m) Datetime Integer Caractere Char(1) Decimal(n,m) Numeric(n,m) Decimal(n,m) Decimal(n,m) Char(1) Character(1) Character (1) Char(1) 5. Normas para Modelagem de Banco de Dados 1. Nenhum atributo deve ser armazenado com máscaras, exemplo: CEP, CPF, CNPJ e etc. 2. Nenhum atributo deve ser armazenado com formatação, como por exemplo tags html. 3. Os dados que representam informações compostas por números (números de documentos, números de processos, números de endereço, etc..) devem ser armazenados com o tipo de dados caractere (varchar), sem guardar mascaras para estes números. Isso é necessário considerando a existência de “zeros a esquerda” que podem ser significativos para estes números. Por exemplo, a informação de um CPF 00275478942, se guardada como numero no banco de dados irá ter os zeros excluídos. 4. Quanto uma tabela possuir Chave primária composta além de outros atributos, e esta tabela estiver envolvida em relacionamentos com outras tabelas do banco de dados, para evitar a transposição de chaves estrangeiras compostas, deve ser criado um índice único para os atributos da chave primária verdadeira, de forma a garantir a integridade real dos dados, e adicionado um novo atributo do tipo “ID” para a tabela, que será a chave primária “falsa” gerada seqüencialmente. 5. Deve-se evitar o uso de sinônimos. O acesso do sistema (SCHEMA) deverá ser preferencialmente referenciado. Esta norma evita de que um schema tenha duplicidade em sinônimos por acessar tabelas de mesmo nome em schema diferentes. 6. Todos os objetos temporários devem ser criados em schemas temporários, nunca nos schemas reais. As rotinas de auditoria realizadas mensalmente nos schemas irá dropar os objetos que não fizerem parte do schema. 7. As procedures e functions devem possuir um cabeçalho com as seguintes informações: Nome da Procedure/Function: Objetivo: Parâmetros de Entrada: Pré-Condições: Autor: Data Criação Data Modificação: Motivo Modificação: 6. Dicionário de Dados Entendemos por dicionarização o “Registro detalhado dos conceitos que compõem um universo pré-definido”. Os seus objetivos principais são: Registrar e padronizar conceitos; Aumentar a fidelidade ao negócio na interpretação dos conceitos. 6.1.Regras Básicas No momento de escrevermos uma descrição é importante entender que “A representação gráfica e denominação dos elementos que compõem um modelo de dados não são suficientes para traduzir todos os conceitos do negócio”. Portanto deve-se levar em consideração os seguintes itens: 1) Fatores que devem ser considerados na descrição: Clareza; Objetividade; Respeito à terminologia da área negocial que está sendo tratado; Respeito às normas da língua portuguesa; Citação de exemplos. 2) Fatores que devem ser evitados na descrição: Ambigüidade; Sintetização exagerada; Distorção do sentido dos termos. 3) Fatores para melhor compreensão do modelo de dados, visando a aumentar o grau de fidelidade na interpretação dos mesmos: Nenhum modelo é suficientemente claro se não for acompanhado de uma definição formal dos elementos; Descrições que possam parecer triviais a quem está modelando não serão do mesmo modo triviais a outras pessoas que não tenham o conhecimento prévio do assunto tratado. Assumir que um conceito é trivial e não precisa ser detalhado é assumir os riscos de futuras interpretações equivocadas. O estabelecimento de definições completas e inequívocas é extremamente importante, portanto devemos buscar durante essa definição meios para sermos precisos, claros e específicos. 4) Fatores que devem ser considerados para UMA BOA DESCRIÇÃO: Regras nas quais os elementos conceituados se encaixam; Exceções às regras, quando aplicáveis; Exemplos ilustrativos; Correlação entre conceitos descritos; Acréscimo de qualquer outro tipo de informação que contribua para a compreensão. 5) Perguntas que devem ser respondidas sobre a entidade: O que é a entidade? O que faz a entidade? Para que serve? O que engloba a categoria de elementos que compõem a entidade? O que está excluído dessa categoria? Quando alguém ou algo passa a ser, ou deixa de ser, um elemento dessa entidade? Sua permanência nessa categoria é imutável? É importante observar que ao responder essas perguntas estamos procurando conceituar a entidade, pois na descrição deve-se ficar claro o que é a entidade representada na tabela e não que esta tem como finalidade armazenar os dados da entidade. O conjunto mínimo de informações que um dicionário de dados deve conter, considerando os itens acima, é: Descrição de todas as entidades: as entidades devem ter seu significado descrito, com informações sobre quais dados serão armazenados na mesma; Tabelas: considerando que este é o objeto mais significativo do banco de dados devemos documentá-lo com bastante atenção, a sua descrição deve conter o conceito da entidade por ela representada, incluindo a importância e a relação com outras tabelas e objetos do banco. Sequences: deve conter a descrição e a regra de incremento; Chaves e Índices: devem estar descritos relacionando os atributos que compõem estes objetos; Descrição dos atributos: os atributos devem ser detalhados, os dados que os mesmos irão armazenar devem ser descritos, correlações entre atributos que envolvam regras de negócios devem ser relatados; opção por tipos de dados específicos devem ser documentadas; Relacionamentos: Os relacionamentos devem estar documentados quanto a sua cardinalidade e obrigatoriedade, explicando questões sensíveis a regra de negócios definida; Visões: as mesmas devem estar descritas, principalmente no que diz respeito a sua usabilidade; Gatilhos (Triggers): Devem estar descritas, suas ações devem ser explicadas e também a sua correlação com a implementação de regras de negócios devem ser descritas; Procedimentos armazenados(Stored Procedure): os procedimentos armazenados devem ser descritos quanto a sua funcionalidade; 7. Usuário Cada schema de banco de dados deverá ter no mínimo 2 usuários: owner de schema usuário de aplicação. 7.1.Owner do schema Este usuário tem privilégios totais no schema, por isso deve ser de conhecimento apenas da equipe de Banco de Dados (Administradores de Dados e Administradores de Banco de Dados) O nome deste usuário é formado pelo <<nome do objeto>>. Ex.: CERIMONIAL 7.2. Usuário da aplicação O usuário da aplicação deverá ter privilégios apenas de execute nas funções, select nas tabelas, sequences e views e insert, update, delete das tabelas. Apenas nos casos em que for necessário deverão ser criados sinônimos para acesso das tabelas, sequences e views. O nome do usuário da aplicação é o formado pelo <<nome do objeto>> +_ USU. Exemplo: CERIMONIAL_USU 7.3.Usuário de consulta Caso seja necessário que algum departamento execute consultas diretamente na base de dados, deverá ser disponibilizado um usuário específico para isso. Esse usuário só terá privilégios de select nos objetos (tabelas ou views) necessárias. Este usuário não deve ter sinônimos para os schemas de banco de dados, o acesso aos schemas deve ser referenciado. As finalidades, padrões de nomenclatura e forma de acesso são descritos a seguir: SCHEMA FINALIDADE USUÁRIO (Exemplo) [SCHEMA] Onwer do schema. Deve ter privilégio de DBA no schema CERIMONIAL [SCHEMA]_+USU Usuário para operação da aplicação. Tem privilégio de INSERT, SELECT, UPDATE E DELETE nas tabelas, SELECT nas views e sequences e EXECUTE nas procedures e functions. CERIMONIAL_USU [SCHEMA]_+CONS Usuário com direito só para consulta. Tem privilégio apenas de SELECT em tabelas e views. CERIMONIAL_CONS