0% acharam este documento útil (0 voto)
48 visualizações30 páginas

Apostila BD

Este documento descreve os principais conceitos de bancos de dados relacionais. Ele discute como bancos de dados armazenam e fornecem informações através de dados, e como a linguagem SQL pode ser usada para recuperar e resumir dados. Ele também explica os principais objetos de bancos de dados como tabelas, colunas e restrições, e como eles podem ser criados e alterados.

Enviado por

irineu
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
48 visualizações30 páginas

Apostila BD

Este documento descreve os principais conceitos de bancos de dados relacionais. Ele discute como bancos de dados armazenam e fornecem informações através de dados, e como a linguagem SQL pode ser usada para recuperar e resumir dados. Ele também explica os principais objetos de bancos de dados como tabelas, colunas e restrições, e como eles podem ser criados e alterados.

Enviado por

irineu
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 30

BANCO DE DADOS 1

BANCO DE DADOS
1. INTRODUÇÃO

Quando trabalhamos com Banco de Dados, temos que ter em mente que
nosso objetivo é fornecer Informação. Quase sempre, nosso público alvo precisa de
informações de negócios.

Sendo assim, é parte das atribuições do Database Administrator (DBA),


trabalhar da melhor forma possível para ser uma espécie de tradutor, que faz dados
virar informação. Não interessa ao público alvo como se faz isso. Para eles basta
que:
 A informação seja confiável;
 A performance seja aceitável;
 A segurança de acesso seja mantida.

Por mais óbvio que possa parecer, banco de dados não serve apenas para
armazenar dados. Armazenar é um meio, não um fim. O fim é informar, em outras
palavras, recuperar dados e tratá-los para conseguir informações relevantes.

A linguagem SQL oferece uma série de recursos para sumarização de


dados. A linguagem SQL é usada em todos os principais bancos de dados
relacionais disponíveis no mercado e também nas Linguagens de Programação.
Com ligeiras variações, a mesma sentença SQL é executada nos mais variados
produtos, tais como SQL Server, Oracle, DB2, Firebird, MySQL, PostgreSQL, etc.
Isso porque esses produtos respeitam um padrão internacional estabelecido,
conhecido como ANSI SQL.

SQL (Structured Query Language) – Linguagem de Consulta Estruturada

Linguagem padrão de acesso e administração de banco de dados


relacionais, de acordo com a ANSI (American National Standards Institute).
BANCO DE DADOS 2

2. INSTRUÇÃO DE DEFINIÇÃO DE DADOS

As instruções DDL (Data Definition Languagem – Linguagem de Definição de


Dados) são destinadas à criação e manutenção de banco de dados, tabelas, índices
e outros objetos.

2.1 BANCO DE DADOS (DATABASE)

É o repositório físico dos objetos que são utilizados para armazenar e


disponibilizar dados. A forma de como um DATABASE será representado ou
organizado pode variar de um Sistema Gerenciador de Banco de Dados (SGBD)
para outro. Por exemplo, ao criar um banco de dados no MySQL o mesmo será
representado por uma pasta com o mesmo nome do Database criado. No
InterBase, um banco de dados será representado por um único arquivo que
armazenará todos os objetos do Database. Na linguagem SQL para criar ou excluir
Databases, utilize os seguintes respectivamente os comandos CREATE DATABASE
e DROP DATABASE.

2.1.1 Sintaxe para criar um Banco de Dados:

CREATE DATABASE <Nome do Banco de Dados>;

2.1.2 Sintaxe para excluir um Banco de Dados:

DROP DATABASE <Nome do Banco de Dados>;

2.1.3 Sintaxe para selecionar um Banco de Dados:

USE <Nome do Banco de Dados>;

Onde <Nome do Banco de Dados> é o nome do Banco de Dados a ser


criado ou removido ou selecionado.
BANCO DE DADOS 3

2.2 TABELA (TABLE)

É o objeto mais importante de um DATABASE, pois são nelas que


armazenamos os dados. As tabelas são formadas por linhas e colunas, sendo que
as linhas representam os registros e as colunas representam os campos das
mesmas.

É necessário especificar o tipo de dado (DATATYPE) para cada coluna da


tabela. O DATATYPE define o tipo de valor que poderá ser inserido em uma
determinada coluna. As tabelas a seguir listam e descrevem os tipos de dados mais
comuns. Os tipos de dados podem variar de acordo com o Sistema Gerenciador de
Banco de Dados (SGBD) que você estiver utilizando. A maioria dos tipos de dados
listados abaixo é comum a todos os SGBD.

Tipos Numéricos
Tipo Descrição
SMALLINT(Tamanho) Armazena números inteiros curtos
INTEGER(Tamanho) Armazena números inteiros longos
REAL Armazena números reais
DECIMAL(Tamanho, Decimal) Armazena números decimais
DOUBLE PRECISION(Tamanho, Armazena números com ponto flutuante de
Decimal) dupla precisão
FLOAT Armazena números com ponto flutuante
NUMERIC Semelhante ao tipo decimal
Tipos de Data/Hora
Tipo Descrição
DATE Armazena datas no formato AAAA-MM-DD
TIME Armazena horas no formato HH:MM:SS
DATETIME (SQL Server) Armazena datas e horas
Tipos de Strings
Tipo Descrição
CHAR(Tamanho) Armazena um conjunto de caracteres de tamanho
fixo com espaço à direita
VARCHAR(Tamanho) Armazena um conjunto de caracteres de tamanho
variável sem espaço à direita
BANCO DE DADOS 4

Além dos tipos de campos, você poderá atribuir restrições (CONSTRAINTS)


para cada campo da tabela. As Constraints permitem criar características
fundamentais que auxiliam no controle de entrada de dados.

Parâmetro Descrição
Define o campo como chave primária da tabela onde
PRIMARY KEY os dados não podem se repetir nem serem nulos.
NOT NULL Não aceita valores nulos
NULL Aceita valores nulos
FOREIGN KEY Relaciona as tabelas.
DEFAULT Atribui um valor padrão para o campo.
CHECK Checa os valores de entrada.
UNIQUE Os valores devem ser únicos.

2.1.1 Criação de tabelas

Para criar uma tabela utilize o comando CREATE TABLE com a seguinte sintaxe:
CREATE TABLE <Nome da Tabela>
(Campo1 Tipo Parâmetro,
Campo2 Tipo Parâmetro, ...)

Argumento Descrição
Nome da Tabela Nome da tabela a ser criada
Nome de cada campo que constituirá a tabela. Ex: Codigo,
campo1, campo2 Nome e Telefone
Tipo Tipo de dados que o campo receberá.
Ex: Char(10), Int, Decimal, etc.
parâmetro Característica que auxilia no controle de entrada de dados.
Ex: NOT NULL, Default, Primary Key, etc.
Ao nomear uma tabela ou um campo fique atento às seguintes regras:

 Sempre utilize nomes significativos. Isso não é obrigatório, mas pode ajudar
a prevenir erros;
 É obrigatório iniciar um nome de campo com uma letra;
 O nome de um campo não pode ser igual a uma palavra reservada da
linguagem SQL, por exemplo: CREATE, SELECT, DROP, INTEGER, entre
outras;
 Não é permitido o uso de espaço em branco, ponto (.) ou hífen (-).

OBS.: No SQL Server 2005/8 pode-se utilizar espaços em branco no nome


dos objetos, usando para isso o nome entre colchetes.
Exemplo: [Nome do Objeto].
BANCO DE DADOS 5

Exemplos:

Create Table FUNCIONARIO


(
Codigo integer NOT NULL,
Nome varchar(100) NOT NULL,
DatNascimento datetime NOT NULL,
DatAdmissao datetime NOT NULL,
Salario numeric(10,2) NOT NULL,

Constraint PK_Funcionario Primary key (CodFunc)


);

Create Table CLIENTE


(
Codigo int NOT NULL,
Nome varchar(100) NOT NULL,
Nascimento smalldatetime NOT NULL,
Cidade varchar(100) NOT NULL,
UF char(2) NOT NULL,
CEP char(8) NOT NULL,
Telefone char(8) NULL,

Primary key (Codigo)


);

Create Table FORNECEDOR


(
CodFornec int NOT NULL Primary key,
NomFornec varchar(100) NOT NULL,
Cidade varchar(100) NOT NULL,
UF char(2) NOT NULL,
CEP char(8) NOT NULL,
Telefone char(8) NULL,
Email varchar(100) NULL,
);

Create Table DISCIPLINA_ALUNO


(CodAluno int NOT NULL,
CodDisciplina int NOT NULL,
DatMatricula smalldatetime NOT NULL,
Nota1 numeric(3,1) NULL,
Nota2 numeric(3,1) NULL,

Primary key (CodAluno, CodDisciplina, DatMatricula)


)
BANCO DE DADOS 6

2.1.2 Alteração de tabelas

No decorrer do desenvolvimento de uma aplicação ou até mesmo após a


implantação de um sistema pode ocorrer a necessidade de acrescentar ou remover
campos de uma tabela. Para realizar essa tarefa, use o comando ALTER TABLE
com a seguinte sintaxe:

ALTER TABLE <nome Tabela> ADD | DROP campo ou parâmetros;


Argumento Descrição
Nome da Tabela Nome da tabela a ser alterada
ADD Adiciona um novo campo na tabela espedificada.
DROP Column Exclui uma coluna da tabela especificada.
campo Nome da coluna que será excluída.
parâmetro Características de uma coluna.

Exemplos:

Adicionando um novo campo:

ALTER TABLE CLIENTE ADD email varchar(100) NULL;

Esta instrução adiciona a Coluna email à tabela CLIENTE.

Excluindo um campo:

ALTER TABLE CLIENTE DROP column email;

Esta instrução exclui a Coluna email da tabela CLIENTE.


BANCO DE DADOS 7

2.3 CONSTRAINTS (Restrições/Controles)

Constraint é uma forma de garantir a integridade de um Banco de Dados por


meio de filtragem dos dados que são inseridos numa tabela. As constraints são o
mecanismo básico para garantir a integridade em um campo.

Tipos de constraints existentes:


 Primary key;
 Check;
 Unique;
 Default;
 NOT NULL;
 NULL
 Foreign key.

Sintaxe das contraints:

Primary Key – Chave primária: Campo não pode repetir e ser nulo.
Constraint PK_Funcionario PRIMARY KEY (CodFuncionario)

Check – Campo aceitará somente os valores informados.


Constraint CK_Telefone CHECK (TelFuncionario like ‘[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]’)
Constraint CK_Financiamento CHECK (Financiamento > 1000 and Financiamento < 10000)

Unique – O(s) campo(s) não poderá ter dados repetidos.


Constraint UN_CPFFuncionario UNIQUE (CPFFuncionario)

Default – Insere valor padão para o campo.


Constraint DF_Cidade DEFAULT ‘Curitiba’ for Cidade

NOT NULL – Campo não aceita valor nulo.


CPFFuncionario char(11) NOT NULL

Foreign Key - Estabelece um relacionamento entre tabelas.


Constraint FK_DepFunc FOREIGN KEY (CodFuncionario)
References Funcionario (CodFuncionario)
BANCO DE DADOS 8

3. INSTRUÇÃO DE MANIPULAÇÃO DE DADOS

As instruções de manipulação de dados DML (Data Manipulation Language


– Linguagem de Manipulação de Dados) são destinadas à manipulação dos
registros, ou seja, permitem inserir, consultar, atualizar ou excluir registros das
tabelas. Este grupo é constituído pelas instruções SELECT, UPDATE, INSERT e
DELETE, que são os comandos mais utilizados da linguagem SQL e também
utilizados pelas Linguagens de Programação.

3.1 INSTRUÇÃO INSERT

Para inserir registros em uma tabela através da linguagem SQL, use o


comando INSERT INTO com a seguinte sintaxe:

INSERT INTO <tabela> (campo1, campo2, ...) VALUES (Valor1, Valor2, ...);

Cada campo especificado na instrução INSERT deve ter um valor


correspondente na lista de valores. A lista de valores deve estar na mesma ordem
que a lista de campos.

Não é obrigatório o preenchimento de todos os campos da tabela, exceto


que o campo seja um campo requerido (NOT NULL) ou faça parte de um campo
auto-incremento. Quando o preenchimento de um ou mais campos da tabela são
omitidos, os mesmos receberão automaticamente o valor NULL.

Exemplos: Inserindo dados na Tabela Funcionário

INSERT INTO Funcionario


VALUES (1, ‘José da Silva’, ‘Travessa da Lapa, 35’, ‘Curitiba’, ‘28/08/1964’);
OBS.: Evitar essa opção quando utilizada em uma Linguagem de programação.

INSERT INTO Funcionario (Codigo, Nome, Endereco, Cidade, DataNascimento)


VALUES (1, ‘José da Silva’, ‘Travessa da Lapa, 35’, ‘Curitiba’, ‘19600830’);

INSERT INTO Funcionario (Nome, Endereco, Cidade, DataNascimento)


VALUES (‘José da Silva’, ‘Travessa da Lapa, 35’, ‘Curitiba’, ‘1960/08/30’);
BANCO DE DADOS 9

3.2 INSTRUÇÃO UPDATE

A instrução UPDATE altera valores nos campos de uma tabela. Com a


instrução UPDATE deve-se utilizar a cláusula restritiva WHERE que permite
especificar quais registros serão alterados. Para atualizar dados em uma tabela,
use a seguinte sintaxe:
UPDATE <tabela> SET campo1 = valor1, campo2 = valor2, ...
WHERE expressão;

OBS.: Caso uma instrução UPDATE não tenha uma cláusula WHERE, todos os
registros da tabela serão alterados.

Exemplo: Alterando dados na Tabela Funcionário

UPDATE Funcionario SET nome = ‘João da Silva’


WHERE codigo = 1

A instrução UPDATE não retorna nenhum conjunto de registros. Sendo


assim você terá que executar uma instrução SELECT para conferir se os registros
foram alterados.

3.3 INSTRUÇÃO DELETE

A instrução DELETE exclui registros de uma tabela especificada. Com a


instrução DELETE também é recomendado a utilização da cláusula restritiva
WHERE para especificar qual ou quais registros serão removidos. Para deletar
registros em uma tabela use a seguinte sintaxe:

DELETE FROM <tabela> WHERE expressão;

Caso a cláusula WHERE seja omitida em uma instrução DELETE, todos os


registros da tabela especificada serão excluídos.

Exemplos:

Excluindo um registro da tabela Funcionario:

DELETE FROM Funcionario WHERE codigo = 1;

Excluindo todos os registros da tabela Funcionario:


DELETE FROM Funcionario; --Esta opção dever ser evitada, pois a mesma apaga
todos os registros da tabela
BANCO DE DADOS 10

3.4 INSTRUÇÃO SELECT

A instrução SELECT pode ser utilizada para filtrar um conjunto de registros


ou para localizar um único registro. Os dados resultantes da execução de uma
instrução SELECT são exibidos em uma listagem semelhante a uma tabela.
Podemos chamar esse processo de “consulta de seleção”, ou seja, a instrução
apenas selecionará e exibirá os registros especificados sem alterá-los.

Esta é uma das operações mais requisitadas a um Banco de Dados. Por


exemplo, ao solicitar um extrato atualizado de sua conta bancária em um caixa
eletrônico ou pela Internet, o sistema executará uma consulta que selecionará todos
os registros referentes aos últimos lançamentos realizados em sua conta e em
seguida, retornará o resultado em vídeo ou papel.

Devido ao grande número de consultas desse tipo a instrução SELECT é,


com certeza, a mais utilizada da linguagem SQL. A sintaxe básica para instrução
SELECT é:

SELECT campo1, campo2, ... FROM <tabela> WHERE critério;

ou

SELECT * FROM <tabela> WHERE critério;

OBS.: A opção SELECT * FROM <Tabela> deve ser evitada principalmente quando
usada em uma Linguagem de Programação.
Quando se utiliza * na lista de select, selecionam-se todas as colunas da
tabela.
BANCO DE DADOS 11

3.4.1 Extraindo Informações das Tabelas

Elementos do comando SELECT:


- SELECT: Especifica as colunas
- FROM: Especifica as Tabelas
- WHERE: Especifica as Linhas
Quando não utilizamos a cláusula WHERE, todas as linhas serão
selecionadas.

/* EXEMPLOS */
SELECT * FROM Funcionario
SELECT Nome, CPF, DatAdmissao FROM Funcionario
SELECT * FROM Funcionario WHERE DatAdmissao = '11/10/2007'
SELECT Nome, CPF, DatAdmissao
FROM Funcionario
WHERE DatAdmissao = '11/10/2007'

3.4.2 Definindo cabeçalho de Colunas

Por default, o cabeçalho mostrado no resultado de uma query é o nome da


coluna definido na criação da tabela. Porém, é possível mudar este cabeçalho,
inserindo-o na lista do select.

/* EXEMPLO */
SELECT Nome as [Nome do Funcionário] FROM Funcionario
SELECT Nome as [Nome do Funcionário], DatAdmissao as [Data de Admissão]
FROM Funcionario

3.4.3 Operadores Aritméticos

Os operadores aritméticos podem ser utilizados em qualquer coluna


numérica (Numeric, decimal, int, smallint, tinynt, float, real, money ou smallmoney)

Simbol
o Operação
+ Adição
- Subtração
/ Divisão
Multiplicaçã
* o
% Módulo

OBS: O operador módulo (%) não pode ser executado nos tipos de dados money,
smallmoney, float ou real.
BANCO DE DADOS 12

/* EXEMPLO */
SELECT Nome as [Nome do Funcionário], Salario * 1.15 as [Salário]
FROM Funcionario
SELECT Nome as [Nome do Aluno], (Nota1 + Nota2)/ 2 as [Média]
FROM Aluno

3.4.4 Funções de Manipulação de Datas

Função Parâmetros Resultados Exemplos


Soma o número de dateparts à
DATEADD (datepart, number, date) data DATEADD(month,3,DatAdmissao)
Número de dateparts entre 2
DATEDIFF (datepart, date1, date2) datas DATEDIF(month,DatAdmissao,getdate())
DATENAME (datepart, date) Especifica datepart para a data DATENAME(month,DatAdmissao)
GETDATE () Data e hora corrente select GETDATE()

EXEMPLOS:
select DATEADD(MONTH,3,DatAdmissao) from Funcionario
select DATEDIFF(YEAR,DatAdmissao, getdate()) from Funcionario

select DATENAME(YEAR,DatAdmissao) from Funcionario


select YEAR(DatAdmissao) from Funcionario

select * from funcionario where DATENAME(YEAR,DatAdmissao)= 2000


select * from funcionario where MONTH (DatAdmissao)= 10

select GETDATE()

3.4.5 Dateparts

Datepart Abreviação Valor


Year yy 1753 - 9999
Quarter qq 1/abr
Month mm 1/dez
Day of year dy 1 - 366
Day dd jan/31
Week wk 0 – 51
Weekday dw 1 - 7 (1 é Domingo)
Hour hh 0 - 23
Minute mi 0 - 59
Second ss 0 - 59
Millisecond ms 0 - 999
BANCO DE DADOS 13

3.4.6 Conversão de Dados

A função CONVERT permite converter expressões de um tipo de dado para


outro tipo de dado. Permite também formatar datas em diferentes estilos.

EXEMPLOS:
select convert(int, datadmissao) from Funcionario
select convert(numeric(11), cpfFuncionario) from Funcionario

3.4.7 Conversão de Datatype DATE

select convert(char(30), datadmissao, 100) from Funcionario


select convert(char(30), datadmissao, 101) from Funcionario
select convert(char(30), datadmissao, 102) from Funcionario
select convert(char(30), datadmissao, 103) from Funcionario
select convert(char(30), datadmissao, 104) from Funcionario
select convert(char(30), datadmissao, 105) from Funcionario
select convert(char(30), datadmissao, 106) from Funcionario
select convert(char(30), datadmissao, 107) from Funcionario
select convert(char(30), datadmissao, 108) from Funcionario
select convert(char(30), datadmissao, 109) from Funcionario
select convert(char(30), datadmissao, 110) from Funcionario
select convert(char(30), datadmissao, 111) from Funcionario
select convert(char(30), datadmissao, 112) from Funcionario
select convert(char(30), datadmissao, 113) from Funcionario
select convert(char(30), datadmissao, 114) from Funcionario
BANCO DE DADOS 14

3.4.8 Agrupando os Valores

Transact-SQL disponibiliza as seguintes funções agregadas:

AVG -- Média
COUNT -- Contador de registros
MAX -- Número máximo em uma coluna
MIN -- Número mínimo em uma coluna
SUM -- Soma

EXEMPLOS:

--Média dos Salários


select AVG(salario) from funcionario

--Média dos Salários Agrupados por Departamento


select Departamento, AVG(salario) from funcionario
GROUP BY Departamento

--Média dos Salários formatando os valores e o cabeçalho da Coluna


select convert(numeric(10,2),AVG(salario)) as [Média Salarial] from funcionario

--Média dos Salários formatando os valores e o cabeçalho da Coluna e Agrupando


por Cargo
select CARGO, convert(numeric(10,2),AVG(salario)) as [Média Salarial] from
funcionario
GROUP BY Cargo

--Média dos Salários da TI


select convert(numeric(10,2),AVG(salario)) as [Média Salarial] from funcionario
where departamento = 'TI'

--Contando o total de registros


select COUNT(*) as [Total de Registros] from Funcionario

--Contando o total de Funcionarios Ativos


select COUNT(*) as [Total de Funcionários] from Funcionario
where Datdemissao is NULL

--Maior salário
select MAX(salario) from Funcionario

--Menor salário
select MIN(salario) from Funcionario

--Soma dos salários


select SUM(salario) from funcionario
BANCO DE DADOS 15

--Soma dos salários agrupados por departamento


select DEPARTAMENTO, SUM(salario) from funcionario
GROUP BY DEPARTAMENTO

--Soma dos salários, agrupando por departamento e tendo a SOMA dos salários
maior que 5000
select departamento, SUM(salario) from funcionario
group by departamento
having SUM(salario) > 5000

--Soma dos salários da RH


select SUM(salario) from funcionario
where departamento = 'RH'

3.4.9 Funções

SELECT POWER(2,3) -- Potenciação, onde o primeiro numero é o numero a ser


calculado e o segundo a potencia

SELECT LEN('IMPACTA') -- Retorna a quantidade dos caracteres.

SELECT SUBSTRING('SQL 2005',5,4) -- Pega posição da paralvra (5--quinta


posição... pega 4 caracteres)

SELECT REPLACE ('IMPACTA','A','OI') --Troca o PRIMEIRO ELEMENTO pelo


SEGUNDO

SELECT RIGHT ('SQL SERVER' ,6) –Seleciona da quarta posição da direira para
esquerda.

SELECT LEFT ('SQL SERVER' ,5) – Seleciona até a quinta da esquerda para a
direita.

3.4.10 Condições de Pesquisa

Operadores de Comparação =, >, <, >=, <=, <>, !=, !>, !<
Intervalos BETWEEN e NOT BETWEEN
Listas IN e NOT IN
String de Comparação LIKE e NOT LIKE
Valores desconhecidos IS NULL e IS NOT NULL
Combinações AND, OR
Negação NOT

OBS.: Evitar a utilização de condições de Negação, tal como NOT IN e NOT


BETWEEN, pois essas condições não são reconhecidas pelo otimizados de
query.
BANCO DE DADOS 16

3.4.11 Eliminando Duplicidades


Quando temos dados repetidos em uma determinada coluna, podemos
trazer somente os dados que não são iguais.

SELECT DISTINCT DatAdmissao


FROM Funcionario
WHERE nome LIKE 'Maria%'

3.4.12 Ordenando os Valores


 Pode-se definir na cláusula ORDER BY o número relativo à coluna ao invés
do nome da coluna;
 Por default, a forma de classificação ascendente (ASC) é assumida, podemos
utilizar também a forma descendente (DESC);
 Pode-se classificar por até 16 colunas.

EXEMPLOS:
SELECT NomFuncionario, DatAdmissao
FROM Funcionario
ORDER BY NomFuncionario
SELECT NomFuncionario, DatAdmissao
FROM Funcionario
ORDER BY 1
SELECT NomFuncionario, DatAdmissao
FROM Funcionario
ORDER BY NomFuncionario DESC
BANCO DE DADOS 17

4. MODELO ENTIDADE-RELACIONAMENTO

No Modelo Entidade-Relacionamento (MER), que foi apresentado por Peter


Cher em 1976, os elementos que o compõe são representados graficamente através
da ferramenta denominada Diagrama Entidade - Relacionamento (DER).

A seguir são descritos os principais elementos que compõe o MER.

4.1 ENTIDADES
Define-se ENTIDADE como aquele objeto que existe no mundo real com
uma identificação distinta e com um significado próprio.
São as “coisas” que existem no negócio, ou ainda, descrevem o negócio.
Se alguma “coisa”, existente no negócio nos proporciona algum interesse
em mantermos dados, isto a caracteriza como uma Entidade do Negócio.

Alguns exemplos de entidades:

 O FUNCIONÁRIO João;
 O VEÍCULO Corsa;
 A ALUNA Maria;
 O CLIENTE Pedro;
 O PRODUTO A323.

Entidades de um mesmo tipo são agrupadas em Classes de Entidade.


Assim, a classe de entidades FUNCIONÁRIOS é o conjunto de todas as instâncias
de funcionários. Neste texto, classes de entidades estão impressas em letra
maiúscula.
Cada ocorrência de um funcionário dentro da classe FUNCIONÁRIO é
denominada Instância de Entidade.
BANCO DE DADOS 18

A representação gráfica de uma entidade no MER se realiza através de um


retângulo, com o nome desta entidade em seu interior, como mostra a figura abaixo:

Importante: As instâncias de uma entidade não são representadas no DER.

4.2 ATRIBUTOS

Toda entidade possui propriedades que são descritas por Atributos. No


MER supõe que todas as instâncias de uma dada classe de entidade possuem os
mesmos atributos.

Considere a entidade FUNCIONÁRIO de uma empresa. O que descreve


Funcionário?

Funcionário é descrito por:


 número de matrícula
 nome
 data da admissão

Tabela: Entidade Funcionário

Matrícula Nome Data Admissão


1 João da Silva 24/04/1991
2 Pedro Henrique Matias 30/02/1992
4 José Maurílio Soares 14/04/1992
8 Manoel Dias 01/01/1995
BANCO DE DADOS 19

No DER os atributos PODEM ser representados por valores anexados a


Entidade, como mostra a figura abaixo:

4.3 CHAVE PRIMÁRIA

Não existem DUAS INSTÂNCIAS DE ENTIDADES IGUAIS.

Sempre haverá um atributo (ou atributos) que nunca se repete.

Este atributo tem a função de atuar como identificador único das instâncias
da entidade e é denominado de CHAVE PRIMÁRIA (Primay key).

Na tabela da Entidade Funcionário, a chave primária é o atributo


MATRICULA.

Então, como a chave primária identifica uma instância da entidade, ela tem
duas restrições importantes:

 Não se repete;

 Não contém valor NULO.

Um VALOR NULO é um valor que não tem significado algum para o mundo
real, somente para o conceitual.
BANCO DE DADOS 20

No DER, um atributo chave primária é representa por uma bola pintada ao


lado de seu nome, como mostra a figura abaixo:

4.4 ATRIBUTOS MULTIVALORADOS

São atributos que para cada instância de uma entidade, ele pode ocorrer
várias vezes. No DER, é representado por duas elipses em torno do nome do
atributo.

Ex.: Telefone dos Funcionários, Nomes de cidades à beira de uma rodovia,


Nomes dos autores de um livro, etc.

A figura abaixo representa o atributo telefone dos Funcionários de uma


empresa.
BANCO DE DADOS 21

4.5 RELACIONAMENTOS

Nenhuma informação armazenada no Banco de Dados existe isoladamente.


Todos os elementos pertencentes ao mundo real modelado de alguma forma
estão associados a outros elementos.
Normalmente essas associações representam ações físicas ou alguma
forma de dependência entre os elementos envolvidos.
Relacionamento: é a associação entre Entidades.
No DER, os relacionamentos são representados conforme mostra abaixo:

E abaixo, identificação de Entidades e Relacionamento.

Agora que já temos as definições de Entidades e de Relacionamento, vamos


aprender como encontrá-los em um problema:

“Funcionário tem Dependente(s)”.

Desta frase, o que é Entidade e o que é relacionamento?

Pode-se dizer que os SUBSTANTIVOS são as Entidades e os VERBOS são


os Relacionamentos.

Sendo assim tem-se:


Entidades: FUNCIONARIO e DEPENDENTE.
Relacionamento: Tem.

Nos SGDB (Sistemas Gerenciadores de Banco de Dados) chamamos


RELACIONAMENTOS de Chave Estrangeira ou Foreign Key
BANCO DE DADOS 22

4.5.1 Atributos de Relacionamento

Considere a figura abaixo:

ALUNO Cursa DISCIPLINAS

Nota Ementa
Data Codigo Nome
Matricula Nome
Nascimento

Atributos de Relacionamentos são igualmente representados como elipses,


ligadas aos conjuntos de Relacionamento.

Perceba que Nota é um atributo tipicamente do relacionamento Cursa.

Se fosse um atributo de Pessoa, cada pessoa teria apenas uma nota, não
importa em qual disciplina.

Se fosse um atributo de Disciplina, todas as Pessoas matriculadas numa


disciplina teriam a mesma nota.

4.5.2 Cardinalidade dos Relacionamentos

A quantidade de Entidades envolvidas em um Relacionamento é


determinada pela Cardinalidade do Tipo de Relacionamento, ou seja, pode-se
estabelecer a quantidade mínima e máxima de Entidades envolvidas com cada
Entidade relacionada.

A Cardinalidade Mínima que determina a quantidade mínima de Entidades


relacionadas é determinada pelo número representativo, ou seja, 0 (zero), 1, 2,...
N(muitos).

A Cardinalidade Máxima que determina a quantidade máxima de Entidades


relacionadas é determinada pelo número representativo, ou seja, 0 (zero), 1, 2,... N
(muitos).
BANCO DE DADOS 23

As figuras abaixo demonstram os tipos de Cardinalidades Máximas que se


tem para os relacionamentos Binários:

Cardinalidade 1:1 (Um para Um)

1 1
EMENTA Possui DISCIPLINAS

Cardinalidade 1:N (Um para Muitos)

N 1
TURMA Pertence CURSO

Cardinalidade M:N (Muitos para Muitos)

N M
ALUNO Cursa DISCIPLINAS
BANCO DE DADOS 24

4.5.3 Implementação Relacional

REGRA 1: Para cada entidade não fraca no esquema E/R, criar uma tabela
que inclui todos os atributos não multivalorados da entidade do Esquema E/R.
Neste passo foram criadas as relações PROFESSOR, DISCIPLINA e ALUNO com
os atributos correspondentes de cada entidade. Vale ressaltar que o atributo fone
não foi colocado neste passo para a relação PROFESSOR tendo em vista que é um
atributo multi-valorado e vai ser tratado na Regra 4.

REGRA 2: Para cada relacionamento 1:N no Esquema E/R: (i) identificar a


relação que representa a entidade do lado N; (ii) incluir como chave estrangeira a
chave primária da relação que representa a entidade do lado 1; e (iii) incluir os
atributos do relacionamento na relação. No exemplo da Figura 1, existe um
relacionamento de 1:N, envolvendo as entidades PROFESSOR e DISCIPLINA, cujo
relacionamento é LECIONA. A relação que representa a entidade do lado N é a
DISCIPLINA. Deve ser incluído a chave da relação PROFESSOR, que representa a
Entidade PROFESSOR do lado 1, como chave estrangeira na Relação DISCIPLINA.
Se existissem atributos de relacionamentos deveriam ser incluídos também.

REGRA 3: Para cada relacionamento M:N no Esquema E/R: (i) criar uma
nova relação para representar o relacionamento; (ii) incluir como chave estrangeira
as chaves primárias das relações que participam do relacionamento; (iii) essas
chaves combinadas formarão a chave primária da relação; (iv) incluir também
eventuais atributos do relacionamento. Através da Figura 1, tem-se o
relacionamento CURSA, que associa as Entidades DISCIPLINA e ALUNO. Para
representar esse relacionamento no esquema relacional, cria-se uma Relação
CURSA inclui-se as chaves primárias (codd e coda) das tabelas DISCIPLINA e
ALUNO como chaves estrangeiras nesta tabela. Essas chaves combinadas
formarão a chave primária da Tabela CURSA resultante. O atributo de
relacionamento ano será incluído na relação resultante como chave, tendo em vista
que o aluno pode fazer mais de uma vez uma disciplina.

REGRA 4: Para cada atributo multivalorado: (i) criar uma nova relação; (ii)
incluir o atributo correspondendo ao atributo multivalorado mais a chave primária da
relação que tem esse atributo; (iii) incluir como chave primária da nova relação a
BANCO DE DADOS 25

combinação do atributo multivalorado mais a chave primária da entidade que tinha o


atributo multivalorado.
4.5.4 Criando relacionamento de Tabelas

O que as Tabelas representam?


R) Representam uma lista de objetos e/ou pessoas do mundo real.
Exemplos: Funcionário;
Dependente;
Cargo;
Empresa;
Produto;
Aluno;
Disciplina; ...

Qual objetivo quando relacionamos as Tabelas?


R) O objetivo é criar uma ligação entre registros de duas tabelas quando os mesmos
representam objetos e/ou pessoas que se relacionam no mundo real.
Exemplos: Funcionários e seu(s) Dependentes(s);
Funcionários e seu(s) Cargo(s);
Empresas e seu(s) Produto(s);
Aluno e a(s) Disciplina(s) que os mesmos cursam.

Como relacionar as Tabelas?


Para Cardinalidade 1:N (Um-para-Muitos)

Inserir na Tabela Secundária a Coluna identificadora (PK) da Tabela Primária.


Tabela: Funcionário (Primária – Lado 1) Tabela: Dependente (Secundária – Lado N)
ID_Func (PK) NomeF CPF DatAdm ID_Dep (PK) NomeD DatNcto ID_Func (FK)
               
               
BANCO DE DADOS 26

Create table FUNCIONARIO


(ID_Func INT PRIMARY KEY
,NomeF VARCHAR(100) NOT NULL
,CPF CHAR(11) NOT NULL
,DatAdm DATETIME NOT NULL
,UNIQUE (NomeF, CPF, DatAdm)
)
Create table DEPENDENTE
(ID_Dep INT PRIMARY KEY
,NomeD VARCHAR(100) NOT NULL
,DatNcto DATETIME NOT NULL
,ID_Func INT FOREIGN KEY references FUNCIONARIO
,UNIQUE(NomeD, ID_Func)
)

SELEÇÃO DE DADOS

1. Selecionar o Nome dos Funcionários e seus Dependentes:


select NomeF, NomeD
from FUNCIONARIO, DEPENDENTE
where FUNCIONARIO.id_func = DEPENDENTE.id_func

*** UTILIZANDO A FUNÇÃO INNER JOIN


select NomeF, NomeD
from FUNCIONARIO
INNER JOIN DEPENDENTE ON FUNCIONARIO.id_func = DEPENDENTE.id_func

2. Selecionar o Nome do Funcionário e de seus Dependentes quando o Id_func for


igual a 1:
select NomeF, NomeD
from FUNCIONARIO F, DEPENDENTE D
where F.id_func = D.id_func
and id_func = 1

*** UTILIZANDO A FUNÇÃO INNER JOIN


select NomeF, NomeD
from FUNCIONARIO
INNER JOIN DEPENDENTE ON FUNCIONARIO.id_func = DEPENDENTE.id_func
WHERE id_func = 1
BANCO DE DADOS 27

Para Cardinalidade M:N (Muito-para-Muitos)

Tabela: Disciplina (Primária) Tabela: Aluno (Primária)


CodDisc (PK) NomeD Ementa Matricula (PK) NomeA CPF DatMatricula
             
             

Criar uma terceira Tabela para UNIR as duas Tabelas Primárias e inserir na tabela
secundária as colunas identificadoras das tabelas primárias:

Tabela: CURSA ou Aluno_Disciplina (Secundária)


Ano Semestre CodDisc (FK) Matricula (FK)
       
       

Create table DISCIPLINA


(CodDisc INT PRIMARY KEY
,NomeD VARCHAR(100) NOT NULL
,Ementa VARCHAR(200) NULL
UNIQUE (NomeD)
)

Create table ALUNO


(Matricula INT PRIMARY KEY
,NomeA VARCHAR(100) NOT NULL
,CPF CHAR(11) NOT NULL
,DatMatricula DATETIME NOT NULL
UNIQUE(NomeA, CPF, DatMatricula)
)

Create table CURSA


(Ano CHAR(4) NOT NULL
,Semestre CHAR(1) NOT NULL
,CodDisc INT FOREIGN KEY references DISCIPLINA
,Matricula INT FOREIGN KEY references ALUNO
PRIMARY KEY (Ano, Semestre, CodDisc, Matricula)
)
BANCO DE DADOS 28

SELEÇÃO DE DADOS

1. Selecionar o Nome das Disciplinas e os alunos matriculados nas mesmas:


select NomeD, NomeA
from ALUNO, CURSA, DISCIPLINA
where ALUNO.matricula = CURSA.matricula
and CURSA.CodDisc = DISCIPLINA.CodDisc

*** UTILIZANDO A FUNÇÃO INNER JOIN


select NomeD, NomeA
from ALUNO
INNER JOIN CURSA ON ALUNO.matricula = CURSA.matricula
INNER JOIN DISCIPLINA ON CURSA.CodDisc = DISCIPLINA.CodDisc

2. Selecionar as Disciplinas que e o aluno José da Silva está matriculado:


select NomeD
from ALUNO, CURSA, DISCIPLINA
where ALUNO.matricula = CURSA.matricula
and CURSA.CodDisc = DISCIPLINA.CodDisc
and NomeA = 'José da Silva'

*** UTILIZANDO A FUNÇÃO INNER JOIN


select NomeD
from ALUNO
INNER JOIN CURSA ON ALUNO.matricula = CURSA.matricula
INNER JOIN DISCIPLINA ON CURSA.CodDisc = DISCIPLINA.CodDisc
WHERE NomeA = 'José da Silva'

3. Selecionar os alunos matriculados em Banco de Dados:


select NomeA
from ALUNO, CURSA, DISCIPLINA
where ALUNO.matricula = CURSA.matricula
and CURSA.CodDisc = DISCIPLINA.CodDisc
and NomeD = 'Banco de Dados'

*** UTILIZANDO A FUNÇÃO INNER JOIN


select NomeA
from ALUNO
INNER JOIN CURSA ON ALUNO.matricula = CURSA.matricula
INNER JOIN DISCIPLINA ON CURSA.CodDisc = DISCIPLINA.CodDisc
WHERE NomeD = 'Banco de Dados'
BANCO DE DADOS 29

5. SEGURANÇA

Um banco de dados gerencia dados importantes, de modo que garantir a


segurança é importante para evitar que usuários não autorizados acessem dados
sigilosos ou criem inconsistências.

Em um banco de dados, pode-se configurar permissões relativas a quem


pode acessar todo o banco de dados ou as tabelas contidas.

Em um banco relacional, o comando GRANT (conceder) é utilizado para


conceder permissões para que outros usuários possam efetuar processamento nas
tabelas que você cria. Configurar permissões é uma tarefa importante na operação
de um banco de dados.

Criação de LOGIN de Banco de Dados


--Criação de Login do SQL
USE [master]
GO
CREATE LOGIN [Leonel] WITH PASSWORD=N'123456'
GO

--Criação de Login do Windows


USE [master]
GO
CREATE LOGIN [LGCOMPUTER\LOCAL SERVICE] FROM WINDOWS WITH
DEFAULT_DATABASE=[master]
GO

--Criação de Login do Windows para o Grupo Administrador do Banco de Dados


USE [master]
GO
CREATE LOGIN [LGCOMPUTER\LOCAL SERVICE] FROM WINDOWS WITH
DEFAULT_DATABASE=[master]
GO
EXEC master..sp_addsrvrolemember @loginame = N'LGCOMPUTER\LOCAL
SERVICE', @rolename = N'sysadmin'
GO

Criação de Usuário de Banco de Dados


USE [BANCO DE DADOS]
GO
CREATE USER [Leonel] FOR LOGIN [Leonel]
BANCO DE DADOS 30

Pode-se conceder os seguintes privilégios (permissões) com comandos SQL:


Comando Resultado
SELECT Permite que usuários pesquisem linhas numa tabela
INSERT Permite que usuários acrescentem linhas numa tabela
UPDATE Permite que usuários alterem linhas numa tabela
DELETE Permite que usuários apaguem linhas numa tabela
ALL Concede todos os privilégios

EXEMPLOS:
GRANT SELECT, UPDATE ON <Tabela> TO <Usuário>;
GRANT ALL ON <Tabela> TO <Usuário>;

Conceder privilégios com WITH GRANT OPTION permite que o usuário


conceda privilégios que recebeu a outros. Como o comando mostrado abaixo, o
usuário Leonel poder permitir a outros usuários a seleção na Tabela
TB_Funcionario.

GRANT SELECT ON <Tabela> TO <Usuário> WITH GRANT OPTION;

Pode-se também retirar os privilégios. Para isso, utiliza-se o comando


REVOKE.

REVOKE SELECT, UPDATE ON TB_Funcionario TO Leonel;

Você também pode gostar