Banco De Dados - Unesp

Transcription

Banco de DadosLinguagem SQL1

A linguagem SQL: história Em junho de 1970, o matemático Edgar Frank Codd, publicouo artigo "A Relational Model of Data for Large Shared DataBanks" na revista "Communications of the ACM“;Neste trabalho, Codd estabeleceu princípios sobre gerenciade banco de dados, denominando-os com o termo relacional;Esse material é um marco na área de banco de dados;Codd faleceu em 18 de abril de 2003, aos 79 anos;A razão do sucesso dos bancos de dados relacionais e dalinguagem SQL se deve ao fato de existir um modelomatemático formal que serviu de base para seudesenvolvimento.A linguagem SQL: história A linguagem SQL foi desenvolvido no início dos anos 70 noslaboratórios da IBM em San Jose, dentro do projeto SystemR, que tinha por objetivo demonstrar a viabilidade daimplementação do modelo relacional proposto por E. F.Codd.O nome original da linguagem era SEQUEL, acrônimo para"Structured English Query Language", vindo daí o fato de, atéhoje, a sigla, em inglês, ser comumente pronunciada "síquel“.A linguagem SQL é um grande padrão de banco de dados.Isto decorre da sua simplicidade e facilidade de uso;A SQL é uma linguagem declarativa, em oposição a outraslinguagens procedurais. A linguagem SQL especifica a forma do resultado e não o caminhopara chegar a ele. Isto reduz o ciclo de aprendizado daqueles que seiniciam na linguagem.2

A linguagem SQL: história Embora o SQL tenha sido originalmente criado pelaIBM, rapidamente surgiram vários "dialetos"desenvolvidos por outros produtores.Essa expansão levou à necessidade de ser criado eadaptado um padrão para a linguagem.Esta tarefa foi realizada pela American NationalStandards Institute (ANSI) em 1986 e ISO em 1987.A linguagem SQL: história A SQL foi revista em 1992 e a esta versão foi dado onome de SQL-92 ou SQL2.Foi revisto novamente em 1999 e 2003 para se tornarSQL:1999 (SQL3) e SQL:2003, respectivamente.A linguagem SQL, embora padronizado pela ANSI e ISO,possui muitas variações e extensões produzidas pelosdiferentes fabricantes de sistemas gerenciadores debases de dados.A linguagem pode ser migrada de plataforma paraplataforma sem grandes mudanças estruturais.3

A linguagem SQL: estrutura Linguagem de Definição de dados (DDL) Subconjunto de comandos para definição e modificação deesquemas de relação (tabelas), remoção de tabelas, etc. Linguagem de Manipulação de dados (DML) Subconjunto de comandos para inserir, remover e modificarinformações em um banco de dados. Linguagem de Controle de Dados (DCL) Subconjunto de comandos para controlar aspectos deautorização de dados e licenças de usuários;Linguagem deDefinição de DadosDDL4

Linguagem de Definição de Dados:Relação Relação É a “matéria prima” para a construção de toda a teoria domodelo relacional e, por conseqüência, é o alicerce teórico detodo sistema de banco de dados baseado no modelo relacional. Nos sistemas de banco de dados relacionais os dados sãoagrupados em TABELAS. Uma tabela possui um nome e é constituída de uma ou maiscolunas (ou campos). Os campos devem também possuir umnome, juntamente com o tipo de dado que será armazenado nacoluna.Linguagem de Definição de Dados:RelaçãoCliente Relação ou tabelaCodCliNomeEndereco123JoãoRua Pio XI567MariaRua S. Francisco678JoanaAv. Liberdade876GabrielaAv. Jatiúca976Ana JúliaAv. São Paulo coluna, campo ou atributo linha ou registro5

Linguagem de Definição de DadosLinguagem de Definição de Dados:comandos CREATE objeto cria um objeto (uma Tabela, por exemplo) no banco de dados. DROP objeto Apaga/exclui um objeto do banco de dados. ALTER objeto Altera a estrutura ou a configuração de um objeto no banco dedados6

Linguagem de Definição de Dados:tipos de dados (Interbase)CHAR(n)Armazena caracteres alfanuméricos de tamanho fixo n. n 1 a 32767CHARACTER(n)VARCHAR(n)Cadeia de caracteres de comprimento variável e tamanho máximo de n caracteres.n 1 a 32767INTEGERDado numérico inteiro de tamanho fixo (32 bits). Representa valores no intervalo de:2.147.483.648 a -2.147.483.647SMALLINTRepresenta valores inteiros de 16 bits no intervalo de: -37.768 a 32.767NUMERIC(n,m) Dado numérico de tamanho variável, sendo n o número total de dígitos e m o númeroDECIMAL(n,m) de casas decimais. O Parâmetro m é opcionalFLOATDado numérico de ponto flutuante com precisão de 7 dígitos. Tem tamanho de 32 bitse armazena valores no intervalo de: 1.175 x 10-38 a 3.402 x 1038DATEData de tamanho fixo.TIMEHora de tamanho fixoTIMESTAMPIntegra informações de data e horaBLOBBinary Large Object. Possui tamanho variável e permite armazenar dados, tais comoimagens, audio, vídeo, etc. Os subtipos definem o conteúdo do campo. Os subtipos 0 e1 são mais utilizados: 0 dados binários de tipo indeterminado; 1 TextoLinguagem de Definição de Dados:criando nderecovarchar(50)Sexochar(1)dt nascdatecreate table Aluno( RAnumeric(8),nomechar(40),rgnumeric(10),endereco varchar(50),sexochar(1),dt nascdate)7

Linguagem de Definição de Dados:restrição de integridade Chave primária A função da chave primária é identificar univocamente cadaregistro da tabela. Toda tabela deve possuir uma chave primária,que deve ser composta por um ou mais campos. Todo campoque compõe a chave primária dever ter a cláusula NOT NULL.create table Aluno( ranumeric(8) not null primary key,nomechar(40),rgnumeric(10),endereco varchar(50),sexochar(1),dt nascdate)Linguagem de Definição de Dados:restrição de integridade Evitando valores nulos É muito comum definirmos campos que não podem contervalores nulos. Isto é, o preenchimento do campo é obrigatório. Para evitar que em algum momento um campo de uma tabelapossa conter valor nulo (null) deve-se utilizar a cláusula NOTNULL após a definição do campo.create table Aluno( ranumeric(8) not null primary key,nomechar(40)not null,rgnumeric(10),endereco varchar(50),sexochar(1),dt nascdate)8

Linguagem de Definição de Dados:restrição de integridade Evitando valores inválidos Existem situações onde um campo pode receber apenas algunsdeterminados valores. Para que o valor de um campo fiquerestrito a um determinado conjunto de valores, utiliza-se acláusula CHECK.create table Aluno( ranumeric(8)not null primary key,nomechar(40)not null,rgnumeric(8),endereco varchar(50),sexochar(1)CHECK(sexo ‘M’ or sexo ‘F’),dt nascdate)Linguagem de Definição de Dados:restrição de integridade Evitando valores duplicados Existem situações nas quais não deve existir dois iguais armazenadosem uma mesma coluna. Isto é, valores inseridos em uma ou maiscolunas são únicos para cada linha da tabela; Para evitar que um valor armazenado em uma coluna de uma linha sejaigual ao valor armazenado na mesma coluna de outra linha, utiliza-se acláusula UNIQUE. A cláusula UNIQUE deve ser usada juntamente coma cláusula NOT NULLcreate table Aluno( ranumeric(8)nomechar(40)rgnumeric(8)endereco varchar(50),sexochar(1)dt nascdate)not null primary key,not null,not null UNIQUE,CHECK(sexo ‘M’ or sexo ‘F’),9

ExercíciosExercício 1Cod torannUFEnderecoCod edautoriaCidadeCNPJliv assuntoTelefonenNomenAutorAssuntoUFEndereco CidadeCod auCPFRGdescricaoTelefoneCod asNome10

Exercício 1: respostacreate table editora( cod ednumeric(3) not null primary key,nomevarchar(40) not null,cnpjnumeric(15) not null UNIQUE,endereco varchar(50),telefone char(15),cidadevarchar(30),ufchar(2))EditoraCod ednomeCNPJenderecotelefonecidadeUFLinguagem de Definição de Dados:integridade referencial É utilizada para garantir a Integridade dos dados entreas tabelas;AlunoRAnumeric(8)CursoNomechar(40)# cd ar(50)Sexochar(1)dt nascdatecd cursointeger11

Linguagem de Definição de Dados:integridade referencial1.2.create table Curso( cd curso integer not null primary key,nomechar(40) not null,)create table Aluno( ranumeric(8) not null primary key,nomechar(40)not null,rgnumeric(8) not null UNIQUE,endereco varchar(50),sexochar(1)CHECK(sexo ‘M’ or sexo ‘F’),dt nascdate,cd curso integerreferences curso(cd curso))Linguagem de Definição de Dados:integridade referencialCursocd cursonome01Ciência da Computação02Ciência da InformaçãoO campo cd curso da tabela Aluno échamado de chave estrangeira ( ForeignKey)AlunoRAnomeRgenderecosexoDt nascCd curso1242532Manoel13243647Rua CincoM30/01/1963011425534Johanna62736432Rua São PauloF14/11/1950021565243Maria6152632Rua Pio XIIF15/09/1980024537642João746732Rua Leão 23M14/08/19700112

Linguagem de Definição de Dados:integridade referencialCursocd cursonome01Ciência da Computação02Ciência da InformaçãoMas. e se os dados da tabela“Curso” forem alterados ouexcluídos ?AlunoRAnomeRgenderecosexoDt nascCd curso1242532Manoel13243647Rua CincoM30/01/1963011425534Johanna62736432Rua São PauloF14/11/1950021565243Maria6152632Rua Pio XIIF15/09/1980024537642João746732Rua Leão 23M14/08/197001Linguagem de Definição de Dados:integridade referencial Cláusulas complementares à cláusula REFERENCEScampo REFERENCES outra tabela (outro campo)ON DELETE { CASCADE SET NULL }ON UPDATE { CASCADE SET NULL }13

Linguagem de Definição de Dados:integridade referencialcreate table Curso( cd curso integer not null primary key,nomechar(40) not null,)create table Aluno( ranumeric(8) not null primary key,nomechar(40)not null,rgnumeric(10) not null UNIQUE,endereco varchar(50),sexochar(1)CHECK(sexo ‘M’ or sexo ‘F’),dt nascdate,cd curso integerREFERENCES curso(cd curso) ON DELETE CASCADE)Linguagem de Definição de Dados:integridade referencialCursocd cursonome01Ciência da Computação02Ciência da InformaçãoAlunoRAnomeRgenderecosexoDt nasccd curso1242532Manoel13243647Rua CincoM30/01/1963011425534Johanna62736432Rua São PauloF14/11/1950021565243Maria6152632Rua Pio XIIF15/09/1980024537642João746732Rua Leão 23M14/08/197001cd curso REFERENCES curso(cd curso) ON DELETE CASCADE14

Linguagem de Definição de Dados:integridade referencialcreate table Curso( cd curso integer not null primary key,nomechar(40) not null,)create table Aluno( ranumeric(8) not null primary key,nomechar(40)not null,rgnumeric(10) not null UNIQUE,endereco varchar(50),sexochar(1)CHECK(sexo ‘M’ or sexo ‘F’),dt nascdate,cd curso integerREFERENCES curso(cd curso) ON DELETE SET NULL)Linguagem de Definição de Dados:integridade referencialCursocd cursonome01Ciência da Computação02Ciência da InformaçãoAlunoRAnomeRgenderecosexoDt nasccd curso1242532Manoel13243647Rua CincoM30/01/1963011425534Johanna62736432Rua São PauloF14/11/1950021565243Maria6152632Rua Pio XIIF15/09/1980024537642João746732Rua Leão 23M14/08/197001cd curso REFERENCES curso(cd curso) ON DELETE SET NULL15

Linguagem de Definição de Dados:integridade referencialcreate table Curso( cd curso integer not null primary key,nomechar(40) not null,)create table Aluno( ranumeric(8) not null primary key,nomechar(40)not null,rgnumeric(10) not null UNIQUE,endereco varchar(50),sexochar(1)CHECK(sexo ‘M’ or sexo ‘F’),dt nascdate,cd curso integerREFERENCES curso(cd curso) ON UPDADE CASCADE)Linguagem de Definição de Dados:integridade referencialCurso01cd cursonome17Ciência da Computação02Ciência da InformaçãoAlunoRAnomeRgenderecosexoDt nasccd curso1242532Manoel13243647Rua CincoM30/01/1963171425534Johanna62736432Rua São PauloF14/11/1950021565243Maria6152632Rua Pio XIIF15/09/1980024537642João746732Rua Leão 23M14/08/197017cd curso REFERENCES curso(cd curso) ON UPDATE CASCADE16

Linguagem de Definição de Dados:integridade referencialcreate table Curso( cd curso integer not null primary key,nomechar(40) not null,)create table Aluno( ranumeric(8) not null primary key,nomechar(40)not null,rgnumeric(10) not null UNIQUE,endereco varchar(50),sexochar(1)CHECK(sexo ‘M’ or sexo ‘F’),dt nascdate,cd curso integerREFERENCES curso(cd curso) ON UPDADE SET NULL)Linguagem de Definição de DadosIntegridadeReferencialCurso01cd cursonome17Ciência da Computação02Ciência da InformaçãoAlunoRAnomeRgenderecosexoDt nasccd curso1242532Manoel13243647Rua CincoM30/01/1963011425534Johanna62736432Rua São PauloF14/11/1950021565243Maria6152632Rua Pio XIIF15/09/1980024537642João746732Rua Leão 23M14/08/197001cd curso REFERENCES curso(cd curso) ON UPDATE SET NULL17

ExercíciosExercício 2Cod livTítuloedicaoISBNanoCod ednLivro1editadoEditorannUFEnderecoCod edautoriaCidadeCNPJliv assuntoTelefonenNomenAutorAssuntoUFEndereco CidadeCod auCPFRGdescricaoTelefoneCod asNome18

Exercício 2: respostacreate table livro( cod livnumeric(5)not null primary key,titulovarchar(40) not ),cod ednumeric(3) references editora(cod ed)on update cascadeon delete set null)Exercício 2: respostaEditoraCod ednomeCNPJenderecotelefonecidadeUFLivroCod livtituloisbnedicaoanoCod ed19

Linguagem de Definição de Dados:alterando a estrutura de uma tabela Excluindo um campoALTER TABLE tabelaDROP nome campo Adicionando um novo campoALTER TABLE tabelaADD nome campo tipo dado Excluindo uma tabelaDROP TABLE tabela Alteração do nome do campoALTER TABLE tabelaALTER nome campo TO novo nome campo Alteração do tipo (de dado) de um campoALTER TABLE tabelaALTER nome campo TYPE novo tipo Alterando a posição de um campo na tabelaALTER TABLE tabelaALTER nome campo POSITION n n é a nova posição do campo na tabela A posição do primeiro campo é zeroExercícios20

Exercício 3TítuloedicaoISBNCod livanoCod ednLivro1editadoEditorannUFEnderecoCod edautoriaCidadeCNPJliv assuntoTelefonenNomenAutorAssuntoUFEndereco CidadeCod auCPFRGdescricaoTelefoneCod asNomeExercício 3: respostacreate table autor( cod aunumeric(3)not null primary key,nomevarchar(40) not utorCod au nomecpfrgenderecotelefonecidadeuf21

Exercício 4TítuloedicaoISBNCod livanoCod ednLivro1editadoEditorannUFEnderecoCod edautoriaCidadeCNPJliv assuntoTelefonenNomenAutorAssuntoUFEndereco CidadeCod auCPFRGdescricaoTelefoneCod asNomeExercício 4: respostacreate table assunto( cod asnumeric(3)descricao varchar(40))not null primary key,not null,AssuntoCod asdescricao22

Exercício 5:transformar relacionamentos n:n em tabelasTítuloedicaoISBNCod livanoCod ednLivro1editadoEditorannUFEnderecoCod edautoriaCidadeCNPJTelefoneliv assuntonNomenAutorAssuntoUFEndereco CidadeCod auCPFRGdescricaoTelefoneCod asNomeExercício 5TítuloCod livedicaoISBNanoCod edLivrocreate table autoria( cod livnumeric(5) not null references livro(cod liv)on update cascadeon delete cascade,cod aunumeric(3) not null references autor(cod au)on update cascadeon delete cascade,primary key(cod liv, cod au))nautorianAutorUFEnderecoCod auCPFCidadeRGTelefoneNomecreate table livro( cod livnumeric(5)not null primary key,titulovarchar(40) not ),prateleira integer,cod ednumeric(3) references editora(cod ed)on update cascadeon delete set null)create table autor( cod aunumeric(3)not null primary key,nomevarchar(40) not 50),telefone char(15),cidadevarchar(30),ufchar(2))23

Exercício 5TítuloCod livcreate table livro( cod livnumeric(5)not null primary key,titulovarchar(40) not ),prateleira integer,cod ednumeric(3) references editora(cod ed)on update cascadeon delete set null)edicaoISBNCod edanoLivrocreate table liv assunto( cod livnumeric(5) not null references livro(cod liv)on update cascadeon delete cascade,cod asnumeric(3) not null references assunto(cod as)on update cascadeon delete cascade,primary key(cod liv, cod as))nliv assuntonAssuntocreate table asunto( cod asnumeric(3)nomevarchar(40))Cod asnot null primary key,not null,descricaoResultado finalCod livTítuloedicaoISBNanoCod ednLivro1editadoEditorannUFEnderecoCod edautoriaCidadeCNPJliv assuntoTelefonenNomenAutorAssuntoUFEndereco CidadeCod auCPFRGdescricaoTelefoneCod asNome24

Resultado finalLivroEditoraCod liv titulo isbn edicao anoCod edCod ednome CNPJ enderecoliv assuntoAutoriaCod livtelefone cidade UFCod livCod auCod asAutorAssuntoCod au nome cpf rg endereco telefone cidade ufCod ascreate table editora( cod ednumeric(3) notnomevarchar(40) notcnpjnumeric(15) notendereco varchar(50),telefone char(15),cidadevarchar(30),ufchar(2))create table autor( cod archar(30),ufchar(2) )descricaonull primary key,null,null UNIQUE,create table livro( cod livnumeric(5)not null primary key,titulovarchar(40) not ),cod ednumeric(3) references editora(cod ed)on update cascadeon delete set null )not null primary key,not null,create table assunto( cod asnumeric(3) not null primary key,descricao varchar(40) not null,)create table autoria( cod livnumeric(5) not null references livro(cod liv)create table liv assuntoon update cascade( cod livnumeric(5) not nullon delete cascade,cod aunumeric(3) not null references autor(cod au)on update cascadecod asnumeric(3) not nullon delete cascade,primary key(cod liv, cod au))references livro(cod liv)on update cascadeon delete cascade,references assunto(cod as)on update cascadeon delete cascade,primary key(cod liv, cod as))25

A linguagem SQL é um grande padrão de banco de dados. Isto decorre da sua simplicidade e facilidade de uso; A SQL é uma linguagem declarativa, em oposição a outras linguagens procedurais. A linguagem SQL especifica a forma do resultado e não o caminho para chegar a ele. Isto reduz o ciclo de aprendizado daqueles que se iniciam na linguagem.