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. 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