Sobre o Aplicativo

O conteúdo do script nesta página é para navegação apenas e não altera o conteúdo de nenhuma forma.

O aplicativo tem a seguinte finalidade, estrutura e convenções de nomenclatura.

Finalidade da Aplicação

O aplicativo é destinado a dois tipos de usuários em uma empresa.

Os usuários comuns podem concluir as seguintes tarefas:

Os administradores de aplicativos podem concluir as seguintes tarefas:

Estrutura do aplicativo

O aplicativo usa os seguintes objetos de esquema e esquemas.

Objetos de Esquema do Aplicativo

O aplicativo é composto destes objetos de esquema:

Consulte também:

Esquemas do Aplicativo

Por motivos de segurança, o aplicativo usa os cinco esquemas (ou usuários) a seguir, cada um com somente os privilégios necessários.

Suponha que, em vez de app_user e app_admin_user, o aplicativo tivesse apenas um esquema que não possuísse nada e pudesse executar employees_pkg e admin_pkg. O pool de conexões desse esquema teria que ser grande o suficiente para os usuários típicos e para os administradores de aplicativos. Se houvesse um bug de injeção de SQL em employees_pkg, um usuário típico que explorou esse bug poderia acessar admin_pkg.

Suponha que, em vez de app_data, app_code e app_admin, o aplicativo tivesse apenas um esquema que possuísse todos os objetos de esquema, incluindo os pacotes. Os pacotes teriam todos os privilégios nas tabelas, o que seria desnecessário e indesejável.

Por exemplo, suponhamos que você tenha uma tabela de trilha de auditoria, AUDIT_TRAIL. Você quer que os desenvolvedores de employees_pkg possam escrever para AUDIT_TRAIL, mas não ler ou alterar. Você quer que os desenvolvedores de admin_pkg possam ler AUDIT_TRAIL e escrevê-lo, mas não alterá-lo. Se AUDIT_TRAIL, employees_pkg e admin_pkg pertencerem ao mesmo esquema, os desenvolvedores dos dois pacotes terão todos os privilégios em AUDIT_TRAIL. No entanto, se AUDIT_TRAIL pertencer a app_data, employees_pkg pertencer a app_code e admin_pkg pertencer a app_admin, você poderá se conectar ao banco de dados como app_data e fazer isso:

GRANT INSERT ON AUDIT_TRAIL TO app_code;
GRANT INSERT, SELECT ON AUDIT_TRAIL TO app_admin;

Consulte também:

Convenções de Nomenclatura no Aplicativo

O aplicativo usa essas convenções de nomenclatura.

Item Nome
Tabela nº da tabela
Exibição de edição para table# tabela
Disparar na tabela de exibição de edição

table_{a|b}event[_fer] em que:

  • a identifica um gatilho APÓS.

  • b identifica um gatilho ANTES.

  • fer identifica um acionador FOR EACH ROW.

  • event identifica o evento que aciona o trigger. Por exemplo: i para INSERT, iu para INSERT ou UPDATE, d para DELETE.

Constraint PRIMARY KEY em table# table_pk
Constraint NOT NULL em table#.coluna table_column_not_null (Nota de rodapé 1)
Restrição EXCLUSIVA em table#.coluna table_column_unique (Nota de Rodapé 1)
Constraint CHECK em table#.column table_column_check (Nota de Rodapé 1)
Restrição REF em table1#.coluna em table2#.coluna table1_to_table2_fk (Nota de Rodapé 1)
Restrição REF em table1#.column1 para table2#.column2 table1_col1paratable2_col2_fk (Nota de Rodapé 1) (Nota de Rodapé 2)
Sequência para o Nº da tabela sequência_tabela
Nome do parâmetro p_nome
Nome da variável local nome

Rodapé 1: table, table1 e table2 são abreviadas para emp para funcionários, depto para departamentos e job_hist para job_history.

Nota de Rodapé 2: col1 e col2 são abreviações de nomes de coluna coluna1 e coluna2. O nome de uma restrição não pode ter mais de 30 caracteres.