bancos de dados fundação educacional de oliveira - feol 5º período – sistemas de informação...

34
Bancos de Dados Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Upload: pietro-macario

Post on 07-Apr-2016

215 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Bancos de DadosBancos de DadosFundação Educacional de Oliveira - FEOL

5º Período – Sistemas de InformaçãoProfa. Andrea Alves

1

Page 2: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

RelacionamentosRelacionamentosRelacionamento entre tabelas1 : 1 Aluno e Matrícula (um aluno só pode ter um número de matricula e um número de matrícula só pode pertencer a um aluno.)

2

Page 3: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

RelacionamentosRelacionamentosRelacionamento do Tipo Um para Vários: (1:N)Este é, com certeza, o tipo de relacionamento mais comum entre duas tabelas. Uma das tabelas (o lado um do relacionamento) possui um campo que é a Chave Primária e a outra tabela (o lado vários) se relaciona através de um campo cujos valores relacionados podem se repetir várias vezes. Considere o exemplo entre a tabela Clientes e Pedidos. Cada Cliente somente é cadastrado uma única vez na tabela de Clientes (por isso o campo Código do Cliente, na tabela Clientes, é uma chave primária, indicando que não podem ser cadastrados dois clientes com o mesmo código), portanto a tabela Clientes será o lado um do relacionamento. Ao mesmo tempo cada cliente pode fazer diversos pedidos, por isso que o mesmo Código de Cliente poderá aparecer várias vezes na tabela Pedidos: tantas vezes quantos forem os pedidos que o Cliente tiver feito. Por isso que temos um relacionamento do tipo Um para Vários entre a tabela Clientes e Pedidos, através do campo Código do Cliente, indicando que um mesmo Cliente pode realizar diversos (vários) pedidos.

3

Page 4: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Criando TabelasCriando TabelasCREATE TABLE Cursos(Codcurso int not null, Nomecurso char(30) not null, PRIMARY KEY (codcurso))Ou CREATE TABLE Cursos(Codcurso int primary key, Nomecurso char(30) not null, )

Page 5: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Criando TabelasCriando TabelasNomeando a ConstraintCREATE TABLE curso ( Codcurso int CONSTRAINT PK_aluno PRIMARY KEY, Desccurso nvarchar(17) )

Page 6: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Criando Tabelas com Criando Tabelas com chaves estrangeiraschaves estrangeiras

CREATE TABLE Aluno(Codaluno int primary key identity, {auto-incremento}Nomealuno char(30) not null, {não permite valores nulos} codcurso int references cursos, {criando chave estrangeira}endaluno char (50))

Page 7: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Criando Tabelas com Criando Tabelas com chaves estrangeiraschaves estrangeiras

CREATE TABLE fornecedor (CODIGO INTEGER NOT NULL,NOME VARCHAR(40) NOT NULL,TIPO INTEGER NOT NULL,PRIMARY KEY (CODIGO));

CREATE TABLE CLIENTE2 (CODIGOCLIENTE INTEGER NOT NULL,codigofornec integer not null,NOME VARCHAR(40) NOT NULL,TIPO INTEGER NOT NULL,ENDERECO VARCHAR(70),CIDADE VARCHAR(40),UF CHAR(2) DEFAULT 'BA',DATANASCIMENTO DATEtime,DATACADASTRO DATEtime,constraint pk_cliente2 PRIMARY KEY (CODIGOCLIENTE),constraint fk_cli_fornec FOREIGN KEY (codigofornec) REFERENCES fornecedor (CODIGO));

Page 8: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Definindo camposDefinindo camposValores duplicadosPodem existir situações onde o valor armazenado em um atributo de um registro deve ser único em relação a todos os registros da tabela. Isto é, não pode haver dois registros com o mesmo valor para um determinado atributo.Para implementar esta restrição de integridade deve-se utilizar a cláusula UNIQUE após a especificação de uma coluna.

Page 9: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Definindo camposDefinindo camposcreate table Funcionario(codfunc int primary key identity, CPFfunc int UNIQUE, {só aceita valores únicos) endfunc char(40), )

Page 10: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Definindo camposDefinindo camposValores defaultPode-se definir um valor padrão para uma coluna acrescentando à sua definição a cláusula DEFAULT. Esta cláusula permite substituir automaticamente os valores nulos por um valor inicial desejado.

Page 11: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Definindo camposDefinindo camposcreate table cliente1(codcli int primary key identitynomecli char(30) NOT NULL, sexocli char(1), CPFcli int UNIQUE, endcli char(40), cidadecli char(20) DEFAULT ‘Maceio’ {se deixar nulo, o valor padrão é maceió} )

Page 12: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Definindo camposDefinindo camposValores inválidosPara que o valor de um atributo fique restrito a um conjunto de valores, utiliza-se a cláusula CHECK.A finalidade da cláusula CHECK é especificar uma condição, isto é, uma limitação de integridade.

Page 13: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Definindo camposDefinindo camposcreate table cliente2( codcli int primary key identity, nomecli char(30) NOT NULL, sexocli char(1) CHECK(sexo IN (‘M’, ‘F’)), CPFcli int UNIQUE, endcli char(40), cidadecli char(20) DEFAULT ‘Maceio’ )

Page 14: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Inserindo registros na Inserindo registros na tabelatabela

insert into cursosvalues('Sistemas' )Ou Insert into cursos (cod_curso, nome_curso)Values(1 , ‘Sistemas’)

Page 15: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Bancos de Dados - Bancos de Dados - RevisãoRevisão

15

Page 16: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Bancos de Dados - Bancos de Dados - RevisãoRevisão

Relacionamento do Tipo Vários para Vários: (M:N)

• Este tipo de relacionamento "aconteceria" em uma situação onde em ambos os lados do relacionamento os valores poderiam se repetir. Vamos considerar o caso entre Produtos e Pedidos. Posso ter Vários Pedidos nos quais aparece um determinado produto, além disso vários Produtos podem aparecer no mesmo Pedido. Esta é uma situação em que temos um Relacionamento do Tipo Vários para Vários.

16

Page 17: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Alterando tabelasAlterando tabelas•Incluindo um campoALTER TABLE CLIENTE2 ADD EMAIL VARCHAR(30);•/* Excluindo um campo */ALTER TABLE CLIENTE2 DROP column cidade

Page 18: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Mudando características Mudando características das colunasdas colunas

ALTER TABLE tb_mae alter column REGION vARCHAR(26)not null

Mudando o tipo do campo

ALTER TABLE CLIENTE2 alter column endereco nVARCHAR(80) not null;

Page 19: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Comando UpDateO comando UPDATE permite alterar os valores existentes existentes nos campos de

uma(única) tabela.Update table_nameSet column_name1 = data_value1[Where search_condition]• table_name pode ser o nome de uma tabela de base ou de uma viewactualizável.• A cláusula SET especifica uma ou mais colunas a serem atualizadas.• A cláusula WHERE é opcional:- Se omitida, as colunas indicadas são atualizadas para todas aslinhas da tabela.- Se especificada, somente as linhas que satisfazem asearch_condition são atualizadas.• Os data_value(s) devem ser compatíveis com os tipos de dados dascolunas correspondentes.Update DepartamentoSet Local = ‘Fundão’Where DepNum = 13

Page 20: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Comando DeleteO comando DELETE permite apagar linhas de uma (única)

tabela.Delete From table_name[Where search_condition]• table_name pode ser o nome de uma tabela de base ou de

uma viewatualizável.• A cláusula WHERE é opcional:- Se omitida, todas as linhas da tabela são apagadas da tabela

(atabela não é apagada).- Se especificada, somente as linhas que satisfazem asearch_condition são apagadas.Delete DepartamentoWhere DepNum = 13

Page 21: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Tipos de dadosTINYINT: Valores numéricos inteiros variando de 0 até 256SMALLINT: Valores numéricos inteiros variando de –32.768 até 32.767INT: Valores numéricos inteiros variando de -2.147.483.648 até 2.147.483.647* BIGINT: Valores numéricos inteiros variando de –92.23.372.036.854.775.808 até 9.223.372.036.854.775.807BIT: Somente pode assumir os valores 0 ou 1. Utilizado para armazenar valores lógicos.DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos inteiros com casas decimais utilizando precisão. I deve ser substituído pela quantidade de dígitos total do número e D deve ser substituído pela quantidade de dígitos da parte decimal (após a vírgula). DECIMAL e NUMERIC possuem a mesma funcionalidade, porém DECIMAL faz parte do padrão ANSI e NUMERIC é mantido por compatibilidade. Por exemplo, DECIMAL(8,2) armazena valores numéricos decimais variando de – 999999,99 até 999999,99Lembrando sempre que o SQL Server internamente armazena o separador decimal como ponto (.) e o separador de milhar como vírgula (,). Essas configurações INDEPENDEM de como o Windows está configurado no painel de controle e para DECIMAL E NUMERIC, somente o separador decimal (.) é armazenado

Page 22: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Tipos de dadosSMALLMONEY: Valores numéricos decimais variando de -214.748,3648 até 214.748,3647MONEY: Valores numéricos decimais variando de -922.337.203.685.477,5808 até 922.337.203.685.477,5807REAL: Valores numéricos aproximados com precisão de ponto flutuante, indo de -3.40E + 38 até 3.40E + 38FLOAT: Valores numéricos aproximados com precisão de ponto flutuante, indo de -1.79E + 308 até 1.79E + 308 ( é maior)SMALLDATETIME: Armazena hora e data variando de 1 de janeiro de 1900 até 6 de junho de 2079. A precisão de hora é armazenada até os segundos.DATETIME: Armazena hora e data variando de 1 de janeiro de 1753 até 31 de Dezembro de 9999. A precisão de hora é armazenada até os centésimos de segundos.

Page 23: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Tipos de dadosVARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido. TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

Page 24: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Tipos de dadosNTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.BINARY(N): Armazena N (até 8.000 bytes) dados no formato binário. Se a quantidade de dados binários armazenados no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.VARBINARY(N): Armazena N (até 8.000 bytes) dados no formato binário. Se a quantidade de dados binários armazenados no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

Page 25: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

Tipos de dados* SQL_VARIANT: Permite o armazenamento de todos os tipos de dados em uma mesmo campo de uma tabela com exceção dos tipos TEXT, NTEXT, TIMESTAMP e SQL_VARIANT TIMESTAMP: Este tipo de dado permite a geração automática de uma valor binário para um campo de uma tabela do SQL Server. Cada tabela pode possuir somente um campo com o tipo de dadoTIMESTAMP. Para o tipo de dado TIMESTAMP, devemos ou criar um DEFAULT para seu valor padrão ou passar NULL para este campo em uma instrução INSERT, pois o banco de dados automaticamente gerará um valor binário para esta coluna.UNIQUEIDENTIFIER: Este tipo de dado deve ser utilizado para a criação de um identificar global para uma coluna de uma tabela. Também podemos possuir somente um campo como tipo UNIQUEIDENTIFIER por tabela. Este identificador deve ser utilizado quando temos certeza absoluta que nenhum valor para o campo deve ser repetido. Para alimentar o conteúdo deste campo, devemos preferencialmente utilizar a função NEWID() que retornar um identificador no formato desde tipo.

Page 26: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

SGBD IIBanco de Dados: EmpresaTabelas:1. Funcionário2. Departamento3. Dependentes

Page 27: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

SGBD II1. FuncionárioCod _func Nome_func Endereço_func cod_ depto data_ adm

salaintt (nvarchar (50)) (nvarchar(50)) (int FK) (smalldatetime) (money)

1 João Mendes Rua joao 25 1 2006-01-10 15002 Patricia Avelar Rua C. Branco 1 2009-06-21 27503 Silvia Pacheco Rua Bias Fortes 2 1958-06-16 16744 Eduardo Silva Rua J. Caruso 2 1999-06-05 27825 Tirso Brother Rua Parametro 3 1996-06-01 45626 Marly Alves Rua Centenario 3 2007-06-02 65207 Paulo Miou Rua Bernardes 4 2006-06-04 29528 Simone Alves Rua Pisa 4 1995-06-11 14759 Elaine Vivar Rua P. Cardoso 2 2002-06-05 246210 Fabio Silva Rua Luiz 16 1 2001-06-10 146911 Cristina Maia Rua Pavaroti 3 1996-06-16 360012 José Ferreira Rua das Almas 4 2007-06-16 4250

Page 28: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

SGBD IIDepartamentoCod_depto int (PK) nome_depto (Nvarchar (20))1 Perfumaria2 Informática3 Livraria4 Alimentação

Page 29: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

SGBD IIDependentesCod_dependente int (pk) cod_funcionario int (FK) nome_dependente (nvarchar(50))

grau_parentesco (nvarchar (15))1 1 Sandra filha 2 1 Eduarda filha 3 2 Tatiane Filha 4 2 Pedro filho 5 3 Patricia filha 6 4 Marcia filha 7 5 Maria filha 8 5 Pietra filha 9 6 Alenara filha 10 7 Guilherme filho 11 7 Gustavo filho 12 9 Silvana filha 13 10 Joanita filha 14 10 Fernanda filha 15 10 Henrique filho 16 11 Aparecida filha 17 12 Fabricio filho

Page 30: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

SGBD IIcreate database Prova

create table Departamento (Cod_Depto int Primary Key,Nome_Depto nvarchar(20))

create table Funcionario(Cod_Func int Primary Key,Nome_Func nvarchar (50),Endereco_Func nvarchar(50),Cod_Depto int references Departamento,Data_Adm smalldatetime,Salario money)

create table Dependentes(Cod_Dependente int Primary Key,Cod_Funcionario int references Funcionario,Nome_Dependente nvarchar(50),Grau_Parentesco nvarchar (15))

Page 31: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

SGBD IIinsert into Departamento values (1,'Perfumaria')insert into Departamento values (2,'Informática')insert into Departamento values (3,'Livraria')insert into Departamento values (4,'Alimentação')

insert into Funcionario values (1,'João Mendes','Rua joao 25',1,'2006-01-10',1500)insert into Funcionario values (2,'Patricia Avelar','Rua C. Branco',1,'2007-06-21',2750)insert into Funcionario values (3,'Silvia Pacheco','Rua Bias Fortes',2,'1958-06-16',1674)insert into Funcionario values (4,'Eduardo Silva','Rua J. Caruso',2,'1999-06-05',2782)insert into Funcionario values (5,'Tirso Brother','Rua Parametro',3,'1996-06-01',4562)insert into Funcionario values (6,'Marly Alves','Rua Centenario',3,'2007-06-02',6520)insert into Funcionario values (7,'Paulo Miou','Rua Bernardes',4,'2006-06-04',2952)insert into Funcionario values (8,'Simone Alves','Rua Pisa',4,'1995-06-11',1475)insert into Funcionario values (9,'Elaine Vivar','Rua P. Cardoso',2,'2002-06-05',2462)insert into Funcionario values (10,'Fabio Silva','Rua Luiz 16',1,'2001-06-10',1469)insert into Funcionario values (11,'Cristina Maia','Rua Pavaroti',3,'1996-06-16',3600)insert into Funcionario values (12,'José Ferreira','Rua das Almas',4,'2007-06-16',4250)

Page 32: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

SGBD IIinsert into Dependentes values (1,1,'Sandra','filha')insert into Dependentes values (2,1,'Eduarda','filha')insert into Dependentes values (3,2,'Tatiane','filha')insert into Dependentes values (4,2,'Pedro','filho')insert into Dependentes values (5,3,'Patricia','filha')insert into Dependentes values (6,4,'Márcia','filha')insert into Dependentes values (7,5,'Maria','filha')insert into Dependentes values (8,5,'Pietra','filha')insert into Dependentes values (9,6,'Alenara','filha')insert into Dependentes values (10,7,'Guilherme','filho')insert into Dependentes values (11,7,'Gustavo','filho')insert into Dependentes values (12,9,'Silvana','filha')insert into Dependentes values (13,10,'Joanita','filha')insert into Dependentes values (14,10,'Fernanda','filha')insert into Dependentes values (15,10,'Henrique','filho')insert into Dependentes values (16,11,'Aparecida','filha')insert into Dependentes values (17,12,'Fabrício','filho')

Page 33: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

ExercíciosCrie e popule as tabelas anteriores.Exclua o campo data_adm da tabela de funcionárioalter table funcionario drop column data_admAltere o tipo de dado do campo nome da tabela departamento para varchar (40) not nullalter table departamento alter column descr varchar(40) not null

Page 34: Bancos de Dados Fundação Educacional de Oliveira - FEOL 5º Período – Sistemas de Informação Profa. Andrea Alves 1

ExercíciosInclua um campo chamado RG na tabela de funcionários.Alter table funcionarios add rg varchar (20)Altere o endereço do funcionário João Mendes.Update funcionariosSet endereco = ‘ Rua das margaridas, sem numero’Where nome_func = ‘João Mendes’Exclua os dependentes do funcionário de código 2.Delete from dependentesWhere cod_func = 2