Article image

HM

Henrique Mizevski13/11/2023 19:40
Compartilhe

Entendendo Views, Sequences e Synonyms

  • #SQL
  • #Oracle DB

No contexto de bancos de dados relacionais, especialmente em relação à Linguagem de Consulta Estruturada (SQL), existem diversos recursos destinados a auxiliar no aperfeiçoamento da manipulação de dados, otimização de consultas e no gerenciamento do banco. Neste artigo, exploraremos três artifícios que lidam com essas melhorias: Views, Sequences e Synonyms. Sobretudo, examinaremos suas definições e sintaxes gerais, tal qual suas aplicações práticas, destacando também vantagens e desvantagens associadas ao uso de cada um.

O que são Views?


Uma View (do inglês, visão) é uma tabela virtual que representa o resultado de uma consulta SQL pré-definida. Essencialmente, não há armazenamento físico dos dados da tabela original, mas sim do query realizado para a obtenção dessa tabela; elas podem ser criadas a partir de uma ou mais tabelas, bem como por meio de outras visões. Outra característica é que, assim como qualquer outra tabela, pode-se realizar inserções, exclusões, atualizações e consultas com ela.

Principais usos

No geral, as visões são amplamente utilizadas na hora de simplificar consultas e encapsular dados. No caso da simplificação, ao invés de realizar uma consulta complexa várias vezes reescrevendo-a, encapsula-se a lógica em uma view, tornando as consultas subsequentes facilmente implementáveis, além de diminuir a complexidade de entendimento delas. Já para a proteção de dados, elas são usadas para impedir que determinadas colunas ou linhas de uma tabela sejam acessadas por qualquer usuário. 


Criando Views


A sintaxe básica para a criação de uma view é a seguinte:

CREATE [OR REPLACE] VIEW nome_da_view AS

SELECT consulta_a_ser_feita;

CREATE VIEW: especifica que estamos criando uma visão/visualização.

OR REPLACE: Consulta opcional que permite a substituição de uma view já existente com o mesmo nome. Assim, não há necessidade de deletar a view anterior.

nome_da_view: o nome da visão a ser criada. Isso será usado em consultas futuras para se referir a essa visualização.

AS SELECT: especifica que a view se traduz na consulta SELECT a seguir.

consulta_a_ser_feita: Consulta SELECT a ser armazenada e usada na visão. 

Depois de criar a view, você pode usá-la em consultas como se fosse uma tabela real:

SELECT * FROM nome_da_view;

E, para a sua exclusão:

DROP VIEW nome_da_view;

Vantagens


  • Possibilita fácil reutilização de uma consulta;
  • Facilita a troca do modelo físico sem causar a quebra de consultas já existentes;
  • Segurança reforçada considerando a implementação de restrições de acesso a parte definida dos dados;
  • Melhora a legibilidade;


Desvantagens 


  • Obscurece a complexidade de uma consulta, podendo afetar a performance (pode estar realizando mais queries do que o necessário);
  • Se uma tabela dependente for alterada, a view pode se tornar inválida;



Exemplo prático

A instrução a seguir cria uma visualização de um subconjunto de dados na tabela hr.departments:

CREATE VIEW departments_hq AS

    SELECT department_id, department_name, location_id

    FROM hr.departments

    WHERE location_id = 1700

  WITH CHECK OPTION CONSTRAINT departments_hq_cnst;

A consulta define a visualização departments_hq para retornar apenas departamentos com o local_id igual a 1700. Além disso, o CHECK OPTION adiciona uma restrição que impede a visão de resultar em linhas que não possam ser selecionadas usando as instruções INSERT ou UPDATE. Dessa forma, a seguinte inserção deve funcionar:

INSERT INTO departments_hq VALUES (300, 'NETWORKING', 1700);

Em contrapartida, por conta da restrição, a instrução a seguir não funciona:

INSERT INTO departments_hq VALUES (301, 'TRANSPORTATION', 2700);

Enfim, para chamá-la, basta usar o comando:

SELECT * FROM departments_hq;


O que são Sequences?

Uma Sequence é um objeto do banco de dados usado para gerar números únicos sequencialmente. Geralmente, esses valores são usados como chaves primárias nas tabelas para garantir a unicidade dos registros. 


Uso Geral

Uma Sequence pode ser utilizada para criar um objeto com suas sequências específicas e regras aplicadas na utilização. Capaz de assumir uma ordem crescente ou decrescente, por uma quantidade de vezes predeterminada, em ciclos. Ao contrário de colunas de index, as sequences não são ligadas a tabela principal, mas fazem uma referência aos dados representados.


Sintaxe

No geral, ela pode ser escrita da seguinte maneira:

CREATE SEQUENCE [schema_name . ] sequence_name  

  [ AS [ built_in_integer_type | user-defined_integer_type ] ]  

  [ START WITH <constant> ]  

  [ INCREMENT BY <constant> ]  

  [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]  

  [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]  

  [ CYCLE | { NO CYCLE } ]  

  [ { CACHE [ <constant> ] } | { NO CACHE } ]  

  [ ; ]  

sequence_name: nome exclusivo da sequência.

built_in_integer_type: valor a ser definido, podendo ser:(tinyint, smallint, int, bigint, decial e numeric).

START WITH: valor inicial definido, deve ser menor ou igual ao valor máximo e maior ou igual ao valor mínimo.

INCREMENT BY: valor usado como padrão para aumento, ou diminuição caso negativo.

[ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]: valor mínimo padrão do novo objetivo de sequência.

[ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]:valor máximo padrão do novo objetivo de sequência.

CYCLE | { NO CYCLE }: Especifica se a sequence vai reiniciar, caso alcance o valor especificado. Ou se deve retornar uma exceção caso seja alcançado. A opção padrão é NO CYCLE.

[ { CACHE [ <constant> ] } | { NO CACHE } ]: Aumenta o desempenho de aplicativos que usam objetos de sequência por meio da minimização do número de disco necessárias para gerar números de sequência.

Vantagens


  • São fáceis de criar e usar;
  • São flexíveis: Os pontos de início e a maneira como são incrementadas é facilmente definível. Além disso, caso a sequence alcance o seu valor máximo, ela irá “ciclar”, evitando possíveis problemas de unicidade;
  • São otimizadas: A geração de números é muito mais eficiente do que se comparada às alternativas manuais de identificação de valores únicos, ou até mesmo de incrementação;
  • Evita problemas transacionais: Por ser independentes de transações, as sequences impedem o acontecimento de vários deadlocks e conflitos que acontecem com outros métodos de identificações únicas.


Desvantagens


  • Em grandes sistemas, pode ser difícil gerenciar sobreposições e conflitos dentre várias sequências;
  • Sequences são aplicadas para sempre nos dados. Dessa forma, por independerem das transações, seus valores, por exemplo, não são revertidos em um eventual rollback, o que pode criar lacunas na sequência numérica;


Exemplo prático

Sequência que começa em 1 e é incrementada em 1:

CREATE SEQUENCE Test.CountBy1
  START WITH 1
  INCREMENT BY 1;

Sequência chamada "DecSeq" que começa em 125, é incrementada por 25, possui um valor mínimo de 100, um valor máximo de 200, cicla quando atinge o valor máximo, e tem um cache de 3 valores.

CREATE SEQUENCE Test.DecSeq
START WITH 125
INCREMENT BY 25
MINVALUE 100
MAXVALUE 200
CYCLE
CACHE 3;

O que são Synonyms?


Como o nome indica, os Synonyms (sinônimos) são objetos do banco de dados que representam nomes alternativos para outros objetos, como uma tabela, uma view, entre outros.


Uso


Principalmente, pode ser usado para impedir a visualização real dos dados, sem que possuam nenhuma alteração nos dados originais, independente de quem estiver acessando ou de qual banco os dados estão armazenados.

Sintaxe

CREATE [PUBLIC] SYNONYM [schema .] synonym FOR [schema .] object [@ dblink];

[PUBLIC] / (PRIVATE): especifica se o synonym é público, com acesso disponível a todos usuários ou privado, com acesso disponível a pessoas específicas.

[schema .]: Selecione o esquema do banco de dados (ou nome de usuário) que possui o objeto no qual você deseja criar. Se omitido, alguns bancos de dados como oracle, criam seu próprio esquema. Com limite máximo de 32 bytes.

FOR: Regra a ser aplicada especificando sobre qual entidade o synonym está sendo criado. Variando entre:

  • Table ou object table
  • View ou object view
  • Sequence

PUBLIC VS PRIVATE

image

Diferença entre synonyms e views

Os Synonyms têm o papel de agir como aliases, ou nomes alternativos para um objeto, como mencionado anteriormente. As views, por outro lado, são consultas salvas que são executadas quando outras consultas as chamam. Nesse sentido, se o objetivo é apenas usar outro nome para um objeto, usa-se um synonym; caso o objetivo seja realizar instruções de SELECT e outras condições lógicas, usa-se uma view.

Outra diferença é que as views só podem ser criadas em objetos com dados. Isso significa que não se pode criar view de sequências, por exemplo. Por outro lado, isso pode ser feito através de synonyms.

No geral, ambos têm suas vantagens e desvantagens; sobretudo, devem ser utilizados em seus devidos casos.


Vantagens


  • Os sinônimos fornecem independência de dados e ocultação da localização na base.
  • Os sinônimos permitem que os dados funcionem sem modificações, independentemente de qual usuário possui a tabela ou visualização liberada e independente do banco utilizado para acesso.
  • Eles são convenientes para reduzir a complexidade das instruções SQL para usuários de banco de dados.

Desvantagens


  • Podem levar a ambiguidade: Se dois sinônimos forem criados para objetos com o mesmo nome, pode ser difícil dizer qual sinônimo está sendo usado durante a consulta;
  • Podem dificultar a manutenção: Se um objeto for renomeado ou movido, todos os sinônimos que apontam para ele também precisarão ser atualizados;
  • Podem afetar o desempenho: O uso de sinônimos pode adicionar uma pequena sobrecarga de processamento às consultas.

Exemplo prático

A instrução a seguir cria um sinônimo público denominado public_emp na tabela emp contida no esquema de jward:

CREATE PUBLIC SYNONYM public_emp FOR jward.emp

Exemplo 2:

 Cria um sinônimo público chamado "employees" que referencia a tabela "employees" no esquema "hr" no banco de dados de link "sales".

CREATE PUBLIC SYNONYM employees 
 FOR hr.employees@sales;

Considerações Finais

Em síntese, as Views, Sequences e Synonyms são ferramentas valiosas para o gerenciamento de um banco de dados, ajudando e melhorando diversas funcionalidades dele. No entanto, é imperativo destacar que os recursos devem ser devidamente implementados, em casos onde o seu uso faz sentido: As views, por exemplo, têm o poder de simplificar a complexidade das consultas, mas também podem sobrecarregar o processamento. Já as Sequences, fundamentais para a garantia de unicidade e ordem de valores, podem acabar tendo problemas, como lacunas, se não administradas corretamente. O mesmo vale para os Synonyms que, oferecendo uma boa flexibilidade, podem transformar essa liberdade em ambiguidade e dificultar a manutenção. Dessa forma, é preciso conhecer e entender os recursos à disposição e avaliar cuidadosamente as demandas do projeto a ser realizado. Assim, espera-se que este artigo tenha te preparado para aplicar os recursos aqui descritos.

REFERÊNCIAS

Oracle Database 23c. ORACLE, 2023. Disponível em: <https://docs.oracle.com/en/database/oracle/oracle-database/23/> Acesso em: 08/11/2023

The Complete Guide to Oracle Sequences. DatabaseStar, 2023. Disponível em: <https://www.databasestar.com/oracle-sequence/>. Acesso em: 09/11/2023

The Complete Guide to Oracle Synonyms. DatabaseStar, 2023. Disponível em: <https://www.databasestar.com/oracle-synonym//>. Acesso em: 09/11/2023

Create Sequence. MICROSOFT, 2023. Disponível em: <https://learn.microsoft.com/pt-br/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-ver16> Acesso em: 11/11/2023

Compartilhe
Comentários (0)