Banco de Dados Relacionais

Banco de Dados Relacionais

Um banco de dados relacional é um banco de dados que modela os dados de uma forma que eles sejam percebidos pelo usuário como tabelas, ou mais formalmente relações.


O termo é aplicado aos próprios dados, quando organizados dessa forma, ou a um Sistema Gerenciador de Banco de Dados Relacional (SGBDR) – do inglês Relational database management system (RDBMS) – um programa de computador que implementa a abstração. (Origem: Wikipédia, a enciclopédia livre)
Apresento aqui alguns conceitos e comandos principais em um banco de dados relacional.


Modelos de BD:

 

       Hierárquico
       Em redes
       RELACIONAL
       Orientado a objetos
       Pós-relacionais
       Relacional estendido
       Objeto-relacional (Oracle)

 

Mod. Relacional de BD

 

Conjunto de Relações (tabelas)

 

Cada relação: conjunto de linhas

 

Cada linha: lista de valores, onde cada valor pertence a um domínio.

 

Domínio = coluna da tabela

Linha = lista de valores

 

Restrições de Integridade:

 

Domínio: conjunto de valores válidos possível em uma coluna. Para toda coluna deve-se definir um domínio.

 

Valor Nulo: se uma coluna é de preenchimento obrigatório ou não.

 

Chave: um conjunto de uma ou mais colunas que diferenciam uma linha das demais. Somente uma chave primária. Zero ou mais chaves alternativas.

 

Referencial: O valor de uma chave estrangeira deve aparecer na chave primária na tabela referenciada. Conjunto de um ou mais valores em uma tabela que devem ocorrer em alguma linha de outra tabela em sua chave primária. Ex: a matrícula que aparece na tabela histórico deve aparecer na tabela aluno em alguma das linhas.

 

Domínios (Tipos de dados ordenáveis):
Numéricos:
INTEGER
NUMERIC
DECIMAL
FLOAT
DOUBLE
NUMBER
 
Cadeias de caracteres:
              CHAR (até umas 20 posições +ou-)
       VARCHAR (armazenamento de tamanho variável. Guardar o tamanho do campo ocupado. Tamanho=4000k)
 
Data/horas:
             DATE
             TIMESTAMD
 
Tipos especiais de dados:
BLOB
CLOB
 
Restrições de integridade:
Linha que não se repete no BD.
Pode repetir individualmente.
 
[CONSTRAINT <NOME RESTRICAO*>]
 
*NOT NULL, NULL, PRIMARY KEY, UNIQUE (chave alternativa, valores que não se repitam dentro da tabela), ou REFERENCES <NAME TABELA>.
 
 
Definição de uma tabela
 
CREATE TABLE  <NOME DA TABELA>
(  <NOME COLUNA> <DOMÍNIO TIPO DE DADOS>
              [  RESTRIÇÕES DE INTEGRIDADE  ] ,
 
<COLUNA> <DOMÍNIO>
 
[  <RESTRIÇÕES DE INTEGRIDADE TABELA>  ]  );
 
create table faculdades
(Sigla numeric(2) not null primary key,
Denominação varchar (60) not null unique);
 
create table departamentos
(sigla numeric(2),
Numero numeric(1),
Nome_Dep varchar(40) not null,
primary key (sigla, numero),
unique (Nome_Dep),
foreign key(sigla) references faculdades);
 
Inserir dados numa tabela
 
insert into faculdades values(46, 1, ‘Fund Comp’);
 
Deletar dados de uma tabela
 
delete from faculdades where sigla = 46;
 
Comandos de manipulação de dados:
INSERT - inclui 1 ou mais registros em uma tabela
UPDATE - modifica 1 ou mais registros em uma tabela
DELETE - exclui 1 ou mais registros em uma tabela.
SELECT - consulta
 
 
 
Consultas:
 
SELECT [DISTINCT]  <saída> //[DISTINCT]  elimina as saídas duplicadas de linha
FROM  <fonte de dados>              //tabela ou conjunto de tabelas que quero representar
[  WHERE <predicado>  ] //filtragem sobre os dados da entrada
[  GROUP BY     <lista de colunas>
[  HAVING    <predicado>  ]  ]
[  ORDER BY   <ordens>  ] //ordem de exibição exemplo: ORDEM BY CURSO, MATRICULA;
 
<saída> //
<fonte de dados> //tabelas que tenho interesse, uma ou mais
<predicado> //condições: (funções, < , > ; ==, etc) : WHERE CURSO = ‘4/601’ AND SEXO <> ’M’;
------------------------------------------
LIKE
SELECT * FROM ALUNOS,
NOME LIKE ‘%SILVA%’;
 
% : 0 a n caracteres quaisquer
_ : 1 caracter qualquer exemplo: LIKE _ _ _ _-02; //disciplina que termina em -02
 
------------------------------------------
 
Conectar Tabelas
SELECT ALUNOS.MATRICULA, NOME, DISCIPLINA
              TURMA ANO_SEM, NOTA
FROM ALUNOS INNER JOIN HISTÓRICO //conecta a tabela alunos e histórico
ON ALUNOS.MATRICULA = HISTÓRICO.MATRICULA; //condição que uma coluna seja == a outra
 
------------------------------------------
 
<saída>
[DISTINCT]  <coluna>  [ AS  <sinônimo>  ]
                 ;   <coluna>  [ AS  <sinônimo>  ]
                         ...
Onde <coluna>  - identificador atributo
                         Ou constante
                         Ou expressão
                         Ou *
         <sinônimo> - novo nome
 
Exemplos:
 
select * from alunos //’*’todas as tabelas
order by 5,1;
----------------------------------
 
select distinct sexo
from alunos;
select sexo
from alunos;
 
select distinct sexo, curso
from alunos;
 
JOIN
 
SELECT  <coluna1>, <coluna2>
FROM  <tabela1>   JOIN   <tabela2>   USING   (<identificador>)
 
Outro exemplo:
 
SELECT F.NOME, E.DESC
FROM FUNC F, EMPRESA E, DEPENDENTE D
WHERE F.EMP = E.EMP
AND   D.EMP = F.EMP
AND   D.MATRICULA = F.MATRICULA
 
Visões
 
Resultado de uma consulta como se fosse uma tabela.
 
select * from alunos_discs where nota > 8,0;
 
 
create view alunos_discs as select * from alunos natural join historico;
 
Funções de agregação
 
COUNT – nº de valores válidos.
MAX – o maior dos valores válidos.
MIN – o menor dos valores válidos.
SUM – a soma dos valores numéricos válidos.
AVG – a média dos valores válidos.
 
Ex:
select count (curso), count (matricula) from alunos;
 
select count (*) from alunos; -- retorna número de linhas da tabela
 
Qual a maior nota em LBD em 2007/2?
 
select max (nota) from historico where ano_sem = ’2007/2’ and disciplina = ’4622C-02’;
 
Quantos alunos tiraram 10 em LBD em 2007/2?
 
select count (nota) from historico where nota = 10 and disciplina = ’4622C-02’ and ano_sem = ’2007/2’;
 
 
Se quiser que o resultado retorne atribuindo um nome na tabela:
Select SUM(B) as Total
From tabela
where c = “bla bla”
 
O resultado vai listar uma tabela chamada de Total e não de SUM(B)
 
Group by, having
 
Divide a entrada em pequenos blocos para depois calcular as funções.
 
select count (*), avg (nota) from historico group by matricula;
 
select idade, count (*), avg (idade) from alunos group by idade having count (*) > 1;
 
where – filtra direto da fonte de dados;
having – filtra depois do agrupamento;
 
Manipulação de Datas em SQL
 
Mascara da data para a realização de uma consulta
TO_DATE (‘01012009’, ‘DDMMYYYY’)
OU
TO_DATE(‘0101200908’, ‘DDMMYYYYHH’)
OU
TO_DATE(‘0101200919’, ‘DDMMYYYYHH24’)
 
Data de Log
 
DT_LOG, ‘DD/MM/YY HH24:MM:SS’)
 
Mascara para caracteres
 
TO_CHAR(PRECO, ‘990999’) /*Um preço com determinado preço*/
 
Truncar informações
TRUNC (PRECO) /*Trunca valor do preço*/
TRUNC (AVG(B)2) /*TRUNCA EM DUAS CASAS DECIMAIS*/
 
Valores Arredondados
ROUND /*Valores arredontados*/
ROUND (AVG(B)2) /*ARREDONDA EM DUAS CASAS DECIMAIS*/
 
Concatenar informações
 
SELECT PROFISSAO ||’-‘|| NOME, SALARIO
 
Saber data do banco
 
SELECT sysdate FROM DUAL
 
Bloco PL-SQL
 
DECLARE
BEGIN
HTP.P(‘HELLO WORLD’);
 
EXCEPTION
END;
 
BEGIN
HTP.P('HOJE É: ' || TO_CHAR (sysdate,'DD/MM/YYYY'));
END;
 
DECLARA O VALOR DE UMA DATA DENTRO DE UM BLOCO E IMPRIME CONCATENANDO COM UMA STRING
 
DECLARE
VDATA DATE;
BEGIN
SELECT SYSDATE
INTO VDATA
FROM dual;
HTP.P('A DATA É ' || TO_CHAR(VDATA));
END;
 
DECLARE
VDATA DATE;
VFAT NUMBER;
BEGIN
SELECT SYSDATE
INTO VDATA
FROM dual;
VFAT := 10;
VDATA := vdata + vfat;
HTP.P('A DATA É ' || TO_CHAR(VDATA));
END;
 
 

Comentários