Mostrando postagens com marcador Objetos de Banco de Dados. Mostrar todas as postagens
Mostrando postagens com marcador Objetos de Banco de Dados. Mostrar todas as postagens

26 de mai. de 2021

Objetos do Banco de Dados

Basicamente o banco de dados possui 2 tipos de objetos: Objetos de schemas e objetos que não são de schemas.

Schema Objects

    Os objetos de schemas são objetos atrelados ao schema do usuário, lembrando que um schema é de propriedade de um usuário que tem o mesmo nome que o schema, e cada usuário é dono de apenas um schema. Os objetos de schema ficam armazenados dentro do schema.

Nota: Embora muitas vezes se confunda usuário com schema, pois tem o mesmo nome, não são a mesma coisa.

Quais são os objetos de schema?

  • Analytic views
  • Attribute dimensions
  • Clusters
  • Constraints
  • Database links
  • Database triggers
  • Dimensions
  • External procedure libraries
  • Hierarchies
  • Index-organized tables
  • Indexes
  • Indextypes
  • Java classes
  • Java resources
  • Java sources
  • Join groups
  • Materialized views
  • Materialized view logs
  • Mining models
  • Object tables
  • Object types
  • Object views
  • Operators
  • Packages
  • Sequences
  • Stored functions
  • Stored procedures
  • Synonyms
  • Tables
  • Views
  • Zone maps

Nonschema Objects

  Os nonschema objects ou objetos fora de schema, são objetos que são armazenados diretamente em banco de dados, o que não impede que sejam criados e manipulados por SQL. Abaixo lista de objetos sem schema.

  • Contexts
  • Directories
  • Editions
  • Flashback archives
  • Lockdown profiles
  • Profiles
  • Restore points
  • Roles
  • Rollback segments
  • Tablespaces
  • Tablespace sets
  • Unified audit policies
  • Users

Regras para nomear Objetos e Qualificadores

    Alguns objetos podem ter seu nome criado de forma sistema pelo banco de dados, contudo, muitos objetos exigem que o usuário faça a nomeação, por exemplo tabelas e colunas. Para realizar essa nomeação existem algumas regras e restrições. Objetos que iniciam com SYS_ ou ORA_ se tratam de objetos do sistema de banco de dados.

    Durante a nomeação de um objeto temos 2 maneiras para fazer a nomeação que são utilizando aspas (") ou sem a utilização de aspas. O que isso muda no uso de um objeto? Quando a nomeação é feita com a utilização de aspas é necessário utilizar aspas para referenciar esse objeto que também se torna sensível aos caracteres maiúsculos ou minúsculos.

Exemplos:

Foi criada uma tabela com nome referenciando e realizado um insert na tabela referenCIANDO, após foi criado uma nova tabela utilizando aspas que se chama referenCIANDO, seguido por mais 2 comandos inserts, um com o nome do objeto entre aspas duplas e outro não.

    Após a criação das tabelas e as inserções, foram realizados consultas em ambas, pode ser notado que apenas 1 dos comandos inserts foi realmente inserido na tabela de nome "referenCIANDO", enquanto o banco de dados entende que sem aspas, REFERENCIANDO é igual referenciando ou qualquer outra combinação das letras entre maiúsculas e minúsculas.


Sabendo que existem essas diferenças para as nomenclaturas, vamos ver as demais regras.

Regra 1 - Tamanhos

Os tamanhos variam de acordo com a configuração do parâmetro COMPATIBLE, mas podem ser de 1 até 30 bytes ou de 1 até 128 bytes, tendo 2 exceções:
  • nome do banco de dados é limitado em 8 bytes;
  • nomes de diskgroups, pdbs, rollback segments, tablespaces e tablespace sets são limitados em 30 bytes.

Regra 2 - Palavras reservadas

Palavras reservadas não podem ser utilizadas como nome de objetos, a exceção é que podem ser utilizadas desde que declaradas fazendo o uso de aspas duplas (").

Regra 3 - Palavras especiais

    No SQL algumas palavras não são reservadas, porem são utilizadas em sintaxes e comandos, essas palavras podem ser utilizadas, embora não seja recomendado, pois podem causar confusão ao analisar um comando, por exemplo.
Algumas dessas palavras são: DIMENSION, SEGMENT, ALLOCATE, DISABLE.
A listagem completa de palavras reservadas e palavras utilizadas no SQL, podem ser encontradas através de uma consulta na view V$RESERVED_WORDS.

Regra 4

    Devem ser utilizados caracteres ASCII para nomes de banco de dados, nomes de links de banco de dados e global name do banco de dados, devido a compatibilidade entre sistemas operacionais. Da mesma maneira em CDBs devem ser utilizados apenas caracteres ASCII para nomes comuns de usuários, roles e profiles.

Regra 5

Caracteres multibytes podem ser incluídos nas senhas. Mais informações podem ser vistas neste link.

Regra 6 

    Nomes que não utilizam aspas duplas devem iniciar com caracteres alfabéticos, enquanto nomes que utilizam aspas duplas podem iniciar com qualquer caractere.

Regra 7 - Caracteres Especiais e pontuação

    Nomes que utilizem aspas duplas suportam os caracteres especiais _ $ e #, desde que não sejam o primeiro caractere.
    Para links de bancos de dados também são suportados . e @, também não é indicado o uso de $ e # nesses casos.
    Para nomes que utilizam aspas duplas nas declarações não há restrições no uso de caracteres especiais, pontuação ou espaços em branco.
    Em ambos os casos não é permito o uso do caractere null (\0).

Regra 8 - Nomes duplicados

    Não é permito que dois objetos tenham o mesmo nome dentro do mesmo namespace.
Objetos que compartilham o mesmo namespace:
  • Packages
  • Private synonyms
  • Sequences
  • Stand-alone procedures
  • Stand-alone stored functions
  • Tables
  • User-defined operators
  • User-defined types
  • Views
Objetos que tem seu próprio namespace:
  • Clusters
  • Constraints
  • Database triggers
  • Dimensions
  • Indexes
  • Materialized views * 
  • Private database links

    Com base nessas informações, podemos entender que não é possível uma sequência e uma tabela possuam o mesmo nome, embora uma tabela pode ter o mesmo nome de um índice. Além disso cada schema tem seu próprio namespace, ou seja, é possível ter 2 tabelas com o mesmo nome em schemas diferentes.
*Quando uma view materializada é criada, o banco de dados cria uma tabela interna de mesmo nome, essa tabela tem o mesmo namespace que as outras tabela no schema. Então não é possível ter uma tabela e uma view materializada com mesmos nomes.
    Há ainda objetos que não estão dentro de schemas e compartilham o mesmo namespace para todo o banco de dados, esses objetos são os seguintes:
  • Editions
  • Parameter files (PFILEs) and server parameter files (SPFILEs)
  • Profiles
  • Public database links
  • Public synonyms
  • Tablespaces
  • User roles

Regra 9 

    Nomes que não são definidos com uso de aspas duplas, não são sensíveis a maiúsculas e minúsculas, o banco de dados Oracle interpreta todos como se fosse maiúsculos, ou seja, uma tabela que foi definida como nome_tabela será interpretada pelo banco de dados como NOME_TABELA, mesmo que seja escrita em um comando de modo minúsculo ou contendo alguns caracteres maiúsculos e outros minúsculos.
    No caso dos nomes definidos com aspas duplas eles são sensíveis aos caracteres maiúsculos e minúsculos, nesse caso deve ser utilizado exatamente como foi definido.

Regra 10

    Quando o Oracle armazena ou faz comparações do identificadores em letras maiúsculas funciona como se Oracle aplicasse a função UPPER neste identificador.
Esse comportamento de comparação em maiúsculas serve para garantir que as comparações serão corretas independente de quais configurações linguísticas a sessão possui.

Regra 11 - Colunas

    Colunas na mesma tabela não podem ter o mesmo nome, colunas podem ter o mesmo nome em tabelas diferentes. Também é possível utilizar na mesma tabela o mesmo nome de coluna desde que usando aspas duplas na definição.



Regra 12 - Procedures e functions

    Procedures ou functions que estão no mesmo pacote podem ter o mesmo nome caso não tenham a mesma quantidade de argumentos e esses não sejam do mesmo tipo.
O processo de criar vários procedimentos ou funções no mesmo pacote com o mesmo nome e diferentes argumentos é chamado de overloading.

Regra 13 - Tablespaces

    Tablespaces são sensíveis a caracteres maiúsculos e minúsculos, diferente de outros identificadores que também são limitados a 30 bytes.


Fonte:

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Database-Objects.html#GUID-1B1818AD-6A70-4C2A-8E86-98BECA723FB8