Arquivos de Categoria: Conceitos Básicos

Banco de Dados I – Aula 11A

INTRODUÇÃO À ÁLGEBRA RELACIONAL – RESUMO

  • Como o nome indica, a álgebra relacional (AR) é uma álgebra de expressões envolvendo relações. A partir de uma ou mais relações da BD tomadas como operandos, outras relações podem ser progressivamente construídas através de operadores especiais, sendo resultado da consulta sobre a BD.
  • Uma consulta é, portanto, uma expressão da consulta sobre a BD.
  • Alguns operadores básicos foram propostos por CODD. Se lembrarmos de que relações são conjuntos matemáticos (de tuplas) esses operadores essencialmente manipulam conjuntos e estão em quatro categorias:
    • Operadores convencionais sobre conjuntos: união, subtração, interseção e produto cartesiano;
    • Operadores que removem parte de uma relação; um operador que elimina linhas (seleção) e um operador que elimina colunas, ou seja, atributos (projeção)
    • Operadores que combinam linhas de duas relações de acordo com condições booleanas diversas (essas operações selecionam subconjuntos do produto cartesiano das duas relações);
    • Um operador especial p (Rô) permite renomear o esquema de uma relação, essencialmente para permitir expressar de forma não ambígua operações envolvendo auto-relacionamentos;

Notação

– Letras do final do alfabeto para denotar relações (R, S, T etc)

– Letras do inicio do alfabeto para denotar atributos (A, B, C etc)

– Letra grega ScreenHunter_253 Oct. 19 20.13 (téta) é  usada para denotar um dos seis operadores de comparação:

UNIÃO

ScreenHunter_254 Oct. 19 20.24: é uma relação que contém as tuplas que estão em R, em S ou em ambas; se uma tupla está presente em R e em S, ela só aparece uma vez na união.

Esta operação primitiva também requer como operandos tabelas união-compatíveis. Produz como resultado uma tabela que contém todas as linhas da primeira tabela seguidas de todas as linhas da segunda tabela. A tabela resultante possui a mesma quantidade de colunas que as tabelas originais, e tem um número de linhas que é no máximo igual à soma das linhas das tabelas fornecidas como operandos, já que as linhas que são comuns a ambas as tabelas aparecem uma única vez no resultado.

ScreenHunter_255 Oct. 19 20.26

INTERSECÇÃO

ScreenHunter_256 Oct. 19 20.27 : é a relação que contém as tuplas que estão em ambas R e S.

Esta é uma operação adicional que produz como resultado uma tabela que contém, sem repetições, todos os elementos que são comuns às duas tabelas fornecidas como operandos. As tabelas devem ser união-compatíveis.

ScreenHunter_257 Oct. 19 20.28

O mesmo efeito pode ser obtido fazendo-se uma combinação de diferenças entre conjuntos

ScreenHunter_258 Oct. 19 20.29

ou com uniões e diferenças

ScreenHunter_259 Oct. 19 20.30

Diferença

ScreenHunter_260 Oct. 19 20.31: contém as tuplas que estão em R porém não estão em S. Observe que R – S é diferente de S – R

É uma operação primitiva que requer como operandos duas tabelas união-compatíveis, ou seja, estruturalmente idênticas. O resultado é uma tabela que possui todas as linhas que existem na primeira tabela e não existem na segunda.

ScreenHunter_261 Oct. 19 20.32

EXEMPLO PARA ESSAS OPERAÇÕES

ScreenHunter_263 Oct. 19 21.38.jpg

PROJEÇÃO

Projeção: ScreenHunter_264 Oct. 19 21.40   constrói uma nova relação a partir de R contendo apenas os atributos  . Observe que tuplas duplicadas devem ser eliminadas ao se fazer a projeção. Exemplo:

ScreenHunter_265 Oct. 19 21.40.jpg

Geralmente indicada na literatura por ScreenHunter_266 Oct. 19 21.42.jpg  (a letra grega pi) produz um conjunto onde há um elemento para cada elemento do conjunto de entrada, sendo que a estrutura dos membros do conjunto resultante é definida nos argumentos da operação.

Pode ser entendida como uma operação que filtra as colunas de uma tabela. Por operar sobre apenas um conjunto de entrada, a projeção é classificada como uma  operação unária.

Ex.: ScreenHunter_266 Oct. 19 21.42  NmFunc (funcionário)

Essa expressão produz um conjunto contendo um elemento para cada funcionário, e cada elemento contém apenas a informação referente a NmFunc da relação funcionário original

ScreenHunter_267 Oct. 19 21.43

Agora estamos interessados em identificar todos os funcionários de sexo masculino existentes no banco de dados. É uma situação que não podemos resolver com projeções apenas, uma vez que deveremos descartar elementos do conjunto inicial. Para casos desse tipo existe uma operação relacional chamada Seleção.

 

SELEÇÃO (OU RESTRIÇÃO)

Seleção: seja uma expressão booleana C do tipo R.A ScreenHunter_253 Oct. 19 20.13C, onde C é uma constante do tipo de A que queremos comparar com o atributo A de uma linha de R. Então,

ScreenHunter_268 Oct. 19 21.45 c(R) é uma relação que inclui unicamente as linhas de R para as quais C é verdadeiro.

Exemplo:

ScreenHunter_269 Oct. 19 21.46

Expressões booleanas mais complexas envolvendo “ands” ou “ors” de operandos do tipo R.A  c podem ser avaliadas através de operações de união e interseção, mas, para simplificar a notação, vamos admitir em C expressões booleanas arbitrariamente complexas.

Se quisermos, podemos compor quaisquer operações, por exemplo:

ScreenHunter_270 Oct. 19 22.01

Indicada por   ScreenHunter_268 Oct. 19 21.45  (a letra grega sigma), é uma operação que para um conjunto inicial fornecido como argumento, produz um subconjunto estruturalmente idêntico, mas apenas com os elementos do conjunto original que atendem a uma determinada condição (também chamada de predicado). A seleção pode ser entendida como uma operação que filtra as linhas de uma tabela, e é também uma operação unária, já que opera sobre um único conjunto de dados.

Ex.:  ScreenHunter_268 Oct. 19 21.45 Sexo = ‘M’ (funcionário)

Produz o conjunto dos elementos de funcionário que atendem ao predicado [Sexo = ‘M’], ou seja, representa um subconjunto dos funcionários para o qual essa condição é avaliada como verdadeira.

ScreenHunter_271 Oct. 19 22.03.jpg

No caso de querermos descobrir o nome completo e a data de admissão de todos os funcionários do sexo feminino existentes na empresa, será necessário combinar uma projeção com uma seleção. Isso porque se decidirmos projetar as colunas desejadas diretamente a partir da relação funcionário, estaremos considerando também os elementos do sexo masculino, o que não queremos.

Como a projeção não permite descartar linhas, apenas colunas, deveremos fornecer a essa operação o subconjunto resultante de uma filtragem (seleção) da relação de funcionários original, como mostram as duas figuras a seguir, que representam as relações e as operações de duas maneiras diferentes.

ScreenHunter_272 Oct. 19 22.04.jpg

 

ScreenHunter_273 Oct. 19 22.05

Assim, a expressão que atende nossos objetivos nesse caso é

ScreenHunter_266 Oct. 19 21.42 NmFunc, DtAdm ( ScreenHunter_268 Oct. 19 21.45 Sexo = ‘F’ (funcionário))

cabendo observar que devido ao aninhamento das operações está implícito que primeiro será executada a seleção e depois a projeção, sendo que nesse exemplo não poderíamos inverter essa ordem.

Você poderia explicar porquê?

Por esse motivo, dizemos que a álgebra relacional é uma linguagem procedural, já que requer alguma definição quanto à ordem em que as operações serão realizadas. Linguagens em que apenas  mencionamos o resultado desejado, sem fazer menção alguma à forma como isso deve ser feito são chamadas de linguagens não-procedurais.

Suponha agora que precisamos obter o nome completo, a data de admissão e o salário de cada funcionário cadastrado.

Para essa consulta temos um fato novo, que é a referência a colunas de mais de uma tabela, uma vez que o nome e a data de admissão fazem parte da relação funcionário, enquanto que o salário existe apenas em cargos.

Isso é problemático, pois as duas operações que conhecemos até o momento são unárias, e temos necessidade de combinar os dados de mais de uma relação. Para situações como essa existe uma operação chamada Produto Cartesiano.

Produto Cartesiano

Produto Cartesiano: R x S : é uma relação obtida concatenando-se cada linha de R com cada linha de S, isto é, os atributos do produto cartesiano são os atributos de R, seguidos pelos atributos de S (se houver coincidência nos nomes de alguns atributos de R e S, a forma conveniente de distingui-los deve ser usada, como por exemplo R.C e S.C). Se R possui n atributos e K linhas e S possui m atributos e 1 linha então R x S possui n + m atributos e k x l linhas.

Exemplo de Produto Cartesiano

ScreenHunter_274 Oct. 19 22.08A notação geralmente adotada (na forma ‘conjunto1 x conjunto2’) para representar essa operação binária indica bem a sua natureza: o resultado do produto cartesiano de duas tabelas é uma terceira tabela contendo todas as combinações possíveis entre os elementos das tabelas originais.

Essa tabela resultante possuirá um número de colunas que é igual à soma das quantidades de colunas das duas tabelas iniciais, e um número de linhas igual ao produto do número de suas linhas.

Portanto, se fizermos o produto cartesiano de uma tabela A que possua 4 colunas e 10 linhas com uma tabela B onde existem 3 colunas e 7 linhas, a tabela resultante terá 4+3= 7 colunas e 10*7= 70 linhas. Assim, cada linha dessa tabela corresponderá à concatenação de uma linha da primeira tabela com uma linha da segunda.

O produto cartesiano não é muito usado como um fim em si mesmo, ou seja, dificilmente estaremos interessados em saber quais são todas as combinações possíveis entre as linhas de duas tabelas, pois a utilidade prática desse tipo de conhecimento é muito discutível.

Entretanto, é a única forma primitiva de que dispomos para fundir informações de duas tabelas heterogêneas para posterior processamento.

Nesse caso, tipicamente será necessário executar uma Seleção sobre o resultado do Produto Cartesiano, de maneira a descartar as combinações inválidas entre as linhas das tabelas originais.

Ex.: ScreenHunter_266 Oct. 19 21.42 NmFunc, DtAdm, VrSalário  ScreenHunter_268 Oct. 19 21.45(funcionário.CdCargo = cargo.CdCargo (funcionário x cargo))

Observe que primeiro é produzido o produto cartesiano correspondente a todas as combinações possíveis entre funcionários e cargos.

Essa relação vai conter linhas onde um funcionário estará associado a cargos que não são o seu, e devemos então aplicar um filtro (uma seleção) para gerar um subconjunto apenas com as combinações logicamente válidas (aquelas em que a chave estrangeira CdCargo de funcionário tem valor igual á chave primária CdCargo de cargo).

Como temos nesse subconjunto duas colunas com o mesmo nome (CdCargo que veio de funcionário e CdCargo proveniente de cargo), sempre que precisarmos mencionar uma delas será necessário especificar exatamente a qual das duas colunas estamos nos referindo, senão teremos uma situação ambígua, formalmente inaceitável.

Dizemos, nesse caso, que é necessário qualificar a coluna, e isso é feito escrevendo o nome da relação original antes do nome da coluna, separando-os por um ponto, ou seja, <nome-da-relação>.<nome-da-coluna>. É por esse motivo que escrevemos o predicado da seleção como sendo funcionário.CdCargo = cargo.CdCargo. Finalmente, a projeção é realizada a partir desse subconjunto, fornecendo os dados inicialmente desejados.

ScreenHunter_275 Oct. 19 22.11.jpg

ScreenHunter_276 Oct. 19 22.12.jpg

ScreenHunter_277 Oct. 19 22.13

ScreenHunter_278 Oct. 19 22.13.jpg

Caso desejemos obter uma variação ligeiramente diferente dessa consulta, acrescentando a restrição de que precisamos dos dados apenas dos funcionários do sexo masculino, teríamos a seguinte expressão algébrica:

ScreenHunter_279 Oct. 19 22.14.jpg

onde o símbolo “^” presente no predicado representa o conectivo lógico “E”. Portanto, com apenas 3 operações relacionais básicas foi possível extrair do banco de dados de exemplo várias informações importantes, representativas de uma grande parcela das consultas que um sistema gerenciador de bancos de dados deve processar.

As consultas realizadas foram:

  1. obter o nome completo de todos os funcionários;
  2. identificar todos os funcionários do sexo masculino;
  3. obter o nome completo e a data de admissão de todos os funcionários do sexo feminino;
  4. obter o nome completo, a data de admissão e o salário de todos os funcionários;
  5. descobrir o nome completo, a data de admissão e o salário de todos os funcionários do sexo masculino.

JUNÇÃO

Junção ScreenHunter_253 Oct. 19 20.13: nesta operação comparamos duas colunas do mesmo tipo de R e S, por exemplo R.A   S.B. Se a comparação der verdadeira, selecionamos a linha correspondente do produto cartesiano RxS. A junção ScreenHunter_253 Oct. 19 20.13é denotada por:

R | X | S

R.A ScreenHunter_253 Oct. 19 20.13S.B

A junção ScreenHunter_253 Oct. 19 20.13de duas relações é, portanto, um subconjunto do seu produto cartesiano e pode ser expressa pela identidade:

R | X | S = ScreenHunter_268 Oct. 19 21.45 (R.A ScreenHunter_253 Oct. 19 20.13S.B) (R X S)

R.A ScreenHunter_253 Oct. 19 20.13S.B

Exemplo: vamos utilizar outra relação para exemplificar a junção ScreenHunter_253 Oct. 19 20.13 Seja a relação T com esquema T(B,C,D) e uma instancia de T abaixo:

ScreenHunter_280 Oct. 19 22.18.jpg

ScreenHunter_281 Oct. 19 22.19

Para isso, temos a seguinte explicação:

Produto cartesiano entre R  X  T

ScreenHunter_282 Oct. 19 22.20

Posteriormente, comparamos as linhas de R.B que sejam >= a TD, tendo o resultado apresentado.

É uma operação que produz uma combinação entre as linhas de uma tabela com as linhas correspondentes de outra tabela, sendo em princípio correspondente a uma seleção pelos atributos de relacionamento sobre um produto cartesiano dessas tabelas:

ScreenHunter_283 Oct. 19 22.21

A operação de junção foi criada justamente porque esse tipo de combinação de tabelas é de uso muito comum, facilitando com isso a escrita de expressões.

A tabela resultante de uma junção tem todas as colunas da primeira tabela e todas da segunda tabela.

Isso faz com que os valores dos campos utilizados como critério para a correspondência entre as linhas apareça duplicado, já que um vem da primeira tabela e outro da segunda.

Existe uma variação da junção, chamada junção natural, que fornece o mesmo resultado, mas sem essa repetição de valores: uma das colunas correspondentes aos atributos de relacionamento é descartada.

JUNÇÃO NATURAL

Junção natural: quando ScreenHunter_253 Oct. 19 20.13é o operador de igualdade, o resultado do produto cartesiano terá duas colunas idênticas, R.A e S.B. Nesse caso é conveniente projetar fora uma dessas colunas e o resultado final é chamado de junção natural de R com S. Se as colunas sobre as quais fizermos a junção tiverem o mesmo nome em R e S, então se pode simplificar a notação escrevendo apenas:

R | X | S

Para indicar esta operação, ficando implícitas as colunas sobre as quais é feita a comparação. Exemplo: a junção das tabelas R e T acima, sobre as colunas R.B e T.B seria expressa por:

ScreenHunter_284 Oct. 19 22.23

Obs: A comparação é feita sobre o produto cartesiano.

 

RESUMO

ScreenHunter_285 Oct. 19 22.24

Exercícios – Parte 1

Com base nas tabelas Funcionário, Cargo e Depto apresentadas neste material, elaborar as expressões da álgebra relacional que obtenham:

ScreenHunter_286 Oct. 19 22.25

Exemplo de Dados:

ScreenHunter_287 Oct. 19 22.26

1 – Todos os funcionários do departamento ‘D1’.

2 – O nome e a matrícula de todos os funcionários do departamento ‘D1’.

3 – A matrícula e o nome do respectivo departamento de todos os funcionários.

4 – O nome dos funcionários que ganham mais de $500.

5 – O ramal do funcionário ‘ANA SILVEIRA’.

6 – Os nomes de todos os funcionários com cargo de ‘MECANICO’.

7 – Os nomes de todos os funcionários que trabalham no mesmo departamento que ‘JOSE NOGUEIRA’.

8 – Os nomes dos departamentos que possuem tanto funcionários como funcionárias.

 

Exercício – Parte 2

Considere as Relações F e D que representam os CEs Funcionários e Dependentes, respectivamente, com o seguinte esquema simplificado: F(fumf, nomef) e D(numf, nomef, par), onde numf: número do funcionário, nomef: nome do funcionário, nomed: nome do dependnete e par: parentesco, que pode ser um dentre: “filho”, “filha”, “esposa/o” etc. Observe que em D, numf é a chave estrangeira que referencia a chave primária numf de F. Abaixo é mostrada uma possível instância dessas relações:

ScreenHunter_288 Oct. 19 22.28

Vamos obter agora a junção natural F | x | D (ela vai usar a coluna numf para junção)

ScreenHunter_289 Oct. 19 22.29

Observe que a junção natural apresenta para cada funcionário que possui dependentes, os dados do funcionário e dos seus dependentes. Como o funcionário 04 não possui dependentes, ele não aparece no resultado da junção. Vamos agora obter expressões da álgebra relacional que respondem as seguintes consultas:

1.Quais os nomes e parentescos de todos os dependentes?

2.Quais os funcionários(numero de) possuem dependentes filhas?

3.Quais funcionários não possuem dependentes?

4.De os nomes dos funcionários que possuem algum dependente.

5.Dê o nome de cada funcionário que possui uma dependente chamada Alice

6.Quais funcionários possuem mais de um dependente?

Referência Bibliográfica

  • GUIMARÃES, Célio Cardoso.  FUNDAMENTOS DE BANCOS DE DADOS: modelagem, projeto e linguagem SQL. 1. ed. Campinas: Universidade de Campinas. 2003.

 

 

Vídeo

 

 

Anúncios

Banco de Dados I – Aula 10A

PROJETANDO BANCO DE DADOS

  • Segundo OLIVEIRA, (2002, p.21), antes de utilizarmos os comandos SQL, vamos identificar a forma de planejar a criação do banco de dados. Esse planejamento é extremamente importante para a estabilidade de todo o sistema. Estudos indicam que quanto maior o tempo despendido no projeto do banco de dados, menor será o tempo despendido na manutenção do modelo.
  • OLIVEIRA (2002, p.21) explica ainda que podemos comparar a criação de um sistema com a construção de um edifício. O projeto de banco de dado está para o sistema da mesma forma que a estrutura do prédio está para o edifício. Se não for dada a devida atenção ao desenho do banco de dados, pode-se comprometer todo o desenvolvimento do sistema.
  • É como construir um edifício utilizando uma base inadequada: um dia o edifício cairá. De outra forma, quanto maior for o tempo dedicado ao estudo das necessidades de informação do sistema em desenvolvimento, maior será o tempo economizado no desenvolvimento do sistema.
  • O sistema terá melhor qualidade, e será mais fácil, no futuro, implementar novas rotinas, procedimentos e agregar novas informações necessárias.
  • O processo de análise dos dados pressupõe três fases distintas e integradas, como apresenta a figura a seguir

ScreenHunter_249 Oct. 16 19.54

  • Segundo o autor e colunista Ricardo Rezende, da revista especializada em desenvolvimento da Devmedia, o sistema de banco de dados deve garantir uma visão totalmente abstrata do banco de dados para o usuário.
  • Para o usuário do banco de dados pouco importa qual unidade de armazenamento está sendo usada para guardar seus dados, contanto que os mesmos estejam disponíveis no momento necessário.

 

  • Esta abstração se dá em três níveis–Nível de visão do usuário: as partes do banco de dados que o usuário tem acesso de acordo com a necessidade individual de cada usuário ou grupo de usuários;–Nível conceitual: define quais os dados que estão armazenados e qual o relacionamento entre eles;–Nível físico: é o nível mais baixo de abstração, em que define efetivamente de que maneira os dados estão armazenados

ScreenHunter_250 Oct. 16 19.59

  • Todo bom sistema de banco de dados deve apresentar um projeto, que visa a organização das informações e utilização de técnicas para que o futuro sistema obtenha boa performance e também facilite infinitamente as manutenções que venham a acontecer.
  • O projeto de banco de dados se dá em duas fases:
    • Modelagem conceitual;
    • Projeto lógico.
  • Estas duas etapas se referem a um sistema de banco de dados ainda não implementado, ou seja, que ainda não exista, um novo projeto. Para os casos em que o banco de dados já exista, mas é um sistema legado, por exemplo, ou um sistema muito antigo sem documentação, o processo de projeto de banco de dados se dará através da utilização de uma técnica chamada de Engenharia Reversa, que será visto em outra oportunidade.

 

Modelo Conceitual

  • É a descrição do BD de maneira independente ao SGBD, ou seja, define quais os dados que aparecerão no BD, mas sem se importar com a implementação que se dará ao BD. Desta forma, há uma abstração em nível de SGBD.
  • Uma das técnicas mais utilizadas dentre os profissionais da área é a abordagem entidade-relacionamento (ER), onde o modelo é representado graficamente através do diagrama entidade-relacionamento (DER)

Exemplo 01

ScreenHunter_251 Oct. 16 20.15

O modelo acima, entre outras coisas, nos traz informações sobre Alunos e Turmas. Para cada Aluno, será armazenado seu número de matrícula, seu nome e endereço, enquanto para cada turma, teremos a informação de seu código, a sala utilizada e o período.

Já no modelo abaixo, exemplo de MER contendo assunto referente a locadora.

Exemplo 02

Untitled

Modelo Lógico

  • Descreve o BD no nível do SGBD, ou seja, depende do tipo particular de SGBD que será usado. Não podemos confundir com o Software que será usado. O tipo de SGBD que o modelo lógico trata é se o mesmo é relacional, orientado a objetos, hierárquico, etc.
  • Abordaremos o SGBD relacional, por serem os mais difundidos. Nele, os dados são organizados em tabelas

Untitled2

  • O modelo lógico do BD relacional deve definir quais as tabelas e o nome das colunas que compõem estas tabelas.

 

  • Para o nosso exemplo, poderíamos definir nosso modelo lógico conforme o seguinte:

Aluno(mat_aluno, nome, endereco)
Turma (cod_turma, sala, periodo)

  • É importante salientar que os detalhes internos de armazenamento, por exemplo, não são descritos no modelo lógico, pois estas informações fazem parte do modelo físico, que nada mais é que a tradução do modelo lógico para a linguagem do software escolhido para implementar o sistema.
  • GUIMARÃES (2003, p.32) defende que como muitas aplicações de engenharia, o projeto de uma base de dados através da técnica top down ou de refinamento sucessivos é largamente utilizado. Ele começa pela análise dos requisitos dos usuários finais da BD e da visão externa que eles têm sobre os dados.
  • Esta visão e requisitos dependem da aplicação pretendida da BD, variam de um usuário para outro dentro da organização, e refletem suas necessidades para o trabalho diário. Ela é comumente informal e incompleta, em graus que variam com o nível de informatização da aplicação (ou da organização).
  • Os objetivos finais dessa análise são: (i) obter uma visão unificada de todos os dados da aplicação, e (ii) definir os procedimentos funcionais para operar com os dados.
  • É portanto, uma sistemática similar à análise de sistemas convencional.
  • Esta visão unificada dos dados é comumente chamada de modelagem de dados e corresponde a uma abstração do mundo real contendo o conjunto de informações sobre o mesmo que julgamos importante armazenar e manipular.
  • O projeto top down da BD através de modelagem de dados consiste em especificar os dados através de refinamento sucessivos, mapeando os dados definidos num nível mais alto e abstrato para o nível seguinte, menos abstrato e mais detalhado.
  • No nível mais alto a visão e requisitos da BD ainda é informal e é normalmente apresentada sob a forma de documentos textuais. Vamos denominá-la de visão externa de dados.
  • O próximo nível consiste na especificação lógica dos dados num formato de projeto lógico de dados e, dependendo do SGBD escolhido, pode ser de nível suficientemente alto para esconder a maioria dos detalhes de implementação.
  • O último nível é denominado de projeto físico dos dados e corresponde à organização interna do armazenamento dos dados pelo SGBD e à definição de estruturas de dados auxiliares visando uma maior eficiência na recuperação e manipulação dos dados. Dependendo do SGBD uma parte considerável do nível físico fica escondida das aplicações.

ScreenHunter_252 Oct. 16 21.10

A linguagem SQL

  • Segundo GUIMARÃES (2003, p.99), o modelo relacional desenvolvido por [Codd70] definiu as metalinguagens álgebra relacional e cálculo relacional, que implementam os conceitos básicos do modelo. Elas tiveram grande influencia no desenvolvimento subseqüente de propótipos do modelo relacional.
  • SQL (Structured Query Language) é uma linguagem de definição e de manipulação de dados relacionais, desenvolvida nos laboratórios da IBM nos anos 70 e hoje padronizada pelos comitês ISO/ANSI.
  • OLIVEIRA (2002, p.18), complementa que SQL é um conjunto de comandos de manipulação de banco de dados utilizado para criar e manter a estrutura desse banco de dados, além de incluir, excluir, modificar e pesquisar informações nas tabelas dele. A linguagem SQL não é uma linguagem de programação autônoma; poderia ser chamada de “sublinguagem”.
  • A linguagem SQL não é procedural, logo é possível especificar o que deve ser feito, e não como deve ser feito. Dessa forma, um conjunto de linhas (set) será atingido pelo comando e não cada uma das linhas, como é feito no ambiente procedural. Portanto, não é necessário entender o funcionamento interno do banco de dados e como e onde estão armazenados fisicamente os dados.
  • Teoricamente deveria ser possível transferir facilmente os comandos SQL de um banco de dados para outro. Contudo, isso não é possível. Naturalmente, boa parte do trabalho poderá ser aproveitado, mas deve-se fazer adaptações em função do banco de dados que está sendo utilizado.

 

Divisão da linguagem SQL

  • DDL (Data Definition Language): permite a criação dos componentes do banco de dados, como tabelas, indicies, etc. Os principais comandos são: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX;
  • DML (Data Manipulation Language): permite a manipulação dos dados armazenados no banco de dados. Comandos DML: INSERT, DELETE, UPDATE;
  • DQL (Data Query Language): permite extrair dados do banco de dados. Comando: SELECT
  • DCL (Data Control Language): provê segurança interna do banco de dados: Comandos: CREATE USER, ALTER USER, GRANT, REVOKE, CREATE SCHEMA;
  • Com o advento da SQL-99, a linguagem SQL passou a incorporar comandos procedurais (Begin, IF, funções, procedimentos) que, na prática, já existiam como extensões da linguagem.
  • Essas extensões, até hoje, são específicas de cada banco de dados e, portanto, a Oracle tem a sua própria linguagem procedural que estende a SQL, que é a PL/SQL.
  • A Microsoft incorporou no SQLServer o Transact-SQL com o mesmo objetivo. A idéia é que, num futuro próximo, exista um padrão de programação em todos os banco de dados.

Vídeo

Banco de Dados I – A08E

Formulário de manutenção técnica:

Determinada empresa “A” faz serviço de manutenção de informática na parte de suporte técnico para empresas que possuem contrato de manutenção. Os técnicos se deslocam para a empresa que possui o contrato e leva uma ordem de serviço, a qual essa ordem é aberta por contato telefônico, dizendo previamente a data e hora em que o técnico se encontrará no local para suporte. Baseado na ficha de atendimento abaixo, faça o (MER, opcional), o MR e defina formas normais.

ScreenHunter_373 Oct. 03 16.43

 

Banco de Dados I – A08D

Exercícios: Controle de peças em estoque.

Uma empresa “B” possui um sistema de estoque pouco evoluído e está fazendo um novo sistema informatizado para que agilize o processo de contagem de estoque de produtos. Para cada dia, é necessário uma folha de controle ou caso o movimento seja mais intenso, se preenche mais de uma folha para o mesmo dia. No caso de saída de peças, também é necessário a qual setor o mesmo será utilizado. Baseado na ficha de atendimento abaixo, defina as tabelas e formas normais.

ScreenHunter_372 Oct. 03 16.39

 

Banco de Dados I – Aula 08C

Dado a seguinte figura, defina as tabelas utilizando as seguintes formas normais: 1FN, 2FN e 3FN:

Exercicio_NF

learningdatabase.com.br

Tecnologias em Banco de Dados Relacionais, Modelagem de dados dimencionais, tecnologias SQL Servere e Oracle

Aprendendo Programação

Algorítmos, C, C++,Pascal, Python, R

WikiDBA

by Virendra Yaduvanshi - Microsoft SQL Server Database Architect | Consultant | Blogger | Specialist | DBA | Speaker

Blog - Fabiano Neves Amorim

SELECT * FROM [Coisas Da Minha Cabeça] WHERE dbo.fn_TempoParaPost() < dbo.fn_TempoLivre()

Tércio Costa, Oracle Developer, OCE SQL, ACE Associate

Guia de estudos para certificação ORACLE SQL(1Z0-047, 1Z0-051, 1Z0-061 e 1Z0-071) e PL/SQL(1Z0-144, 1Z0-146 e 1Z0-148)

Strate SQL

Data Adventures with an Architect