Baixe o app para aproveitar ainda mais
Prévia do material em texto
Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 1 1 – INTRODUÇÃO Neste curso estaremos estudando conceitos e práticas normalmente utilizadas quando projetamos em banco de dados relacionais. Vamos utilizar neste curso o Sistema Gerenciador de Banco de Dado (SGBD) SQL-Server 2005 Express Edition. Vale ressaltar que no mercado existem vários softwares desenvolvidos para gerenciar banco de dados, tais como: • Access • MySQL • Postgree (gratuito) • Oracle • Paradox • Firebird (gratuito) • Etc... O SQL-Server 2005 Express Edition é um software oferecido gratuitamente no site da Microsoft. Você poderá baixá-lo diretamente do seguinte endereço: http://www.microsoft.com/downloads/details.aspx?familyid=4C6BA9FD-319A-4887-BC75-3B02B5E48A40&displaylang=en Cuidado, pois existem outros pacotes do SQL-SERVER 2005 EXPRESS, porém não oferecem ADVANCED SERVICES (serviços avançados). Estes serviços nos permitem manter os bancos de dados armazenados em um servidor. Esta versão será usada neste módulo do curso, pois, trata-se de um software LIVRE, ou seja, você não precisará ter uma licença para usá-lo em seu computador. Antes de falarmos do SGBD SQL-Server, temos que revisar vários conceitos relevantes sobre banco de dados. Um banco de dados relacional, gerado por um SGBD, possui várias TABELAS que se relacionam entre si, através de CAMPOS. Daí se origina o nome dado a este tipo de banco de dados, RELACIONAL. Os CAMPOS das tabelas serão utilizados para armazenar REGISTROS. Vale dizer que cada registro é composto por CARACTERES. O esquema abaixo ilustra os conceitos abordados acima: Banco de Dados � Tabelas � Campos � Registros � Caracteres Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 2 2 – VOCABULÁRIOS USADOS EM BANCO DE DADOS Quando consultamos qualquer bibliografia de banco de dados, o vocabulário utilizado pelos autores são os seguintes: ENTIDADES � São as tabelas do banco de dados; ATRIBUTOS � São os campos das entidades; DOMÍNIOS � São todos os valores possíveis de dados armazenados em um atributo. Exemplo: Todos os códigos de peças armazenados no atributo CODPEÇA. TUPLA � Cada registro armazenado numa entidade; Lembre-se que um registro refere-se ao conjunto de dados armazenados em todas os atributos de uma tabela. CHAVE PRIMÁRIA � um ou mais atributos, usados para identificar e unificar as tuplas armazenadas; CHAVE ESTRANGEIRA � atributo existente em uma entidade filho, ou seja, entidade que recebe dados de outra entidade em um relacionamento. A entidade FILHO, no relacionamento, deve possuir os mesmos atributos da chave primária da tabela PAI, e estes devem ser do mesmo tipo e tamanho, a fim de tornar possível o relacionamento entre as tabelas. 3 – POR QUE USAR UM SISTEMA GERENCIADOR DE BANCO DE DADOS? A resposta para essa pergunta pode ser dada baseada nas seguintes vantagens: • É compacto � Não há necessidade de arquivos de papéis; • Acesso rápido � Os computadores podem acessar rapidamente qualquer informação armazenada num Banco de dados (B.D.). • Menos trabalho braçal � Os funcionários de empresas não precisam preocupar-se com o arquivamento de fichas, pois o computador é responsável por fazê-lo. • Fluxo corrente � informações certas e atualizadas a qualquer momento, basta pedir. 4 – VANTAGENS EM USARMOS BANCO DE DADOS RELACIONAIS Um banco de dados deve oferecer para empresas algumas vantagens. Estas vantagens facilitarão a tomada de decisões e permitirão a armazenagem de dados confiáveis. Veja as vantagens: • Redução na redundância de dados � eliminar repetições DESNECESSÁRIAS em atributos das entidades. • Compartilhamento de dados pelas aplicações novas e as já existentes; • Padronização de padrões � esta tarefa refere-se à padronização de dados e documentos dentro da empresa, para facilitar o compartilhamento e a compreensão de dados; • Restrições de segurança � referem-se aos controles de acessos aos usuários do banco de dados (pessoas ou aplicações). • Manter a integridade de dados � possuir nas entidades do banco de dados informações atualizadas e consistentes, para tomada de decisões dentro da empresa. 5 – NORMALIZAÇÕES DE ENTIDADES DO BANCO DE DADOS Quando estamos criando as tabelas de um banco de dados, devemos tomar o cuidado de retirarmos dessas os campos que armazenarão registros redundantes desnecessários. A esse processo damos o nome de NORMALIZAÇÃO. Em alguns momentos a redundância de dados torna-se necessária, como veremos adiante. Normalizar, diante do que foi descrito acima, nada mais é do que: A) MINIMIZAR REDUNDÂNCIAS e INCONSISTÊNCIAS de dados; B) FACILITAR A MANIPULAÇÃO DO BANCO DE DADOS; C) FACILITAR A MANUTENÇÃO DOS DADOS NO BANCO DE DADOS. Antes de normalizarmos as ENTIDADES de um banco de dados relacional, devemos identificar as ANOMALIAS NELAS EXISTENTES. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 3 5.1 – ANOMALIAS DE ENTIDADES DE BANCO DE DADOS As anomalias mais comuns existentes em ENTIDADES de um banco de dados são as seguintes: • Anomalia da INCLUSÃO; • Anomalia da INCONSISTÊNCIA; • Anomalia da ALTERAÇÃO (atualização); • Anomalia da EXCLUSÃO; Vamos ilustrar as situações de anomalias de entidades. Com isso será possível sabermos quando devemos normalizar a ENTIDADE. Observe a entidade abaixo: Pedidos_Pecas Num_pedido Data Num_peça Descricao Quantidade Preco 1000 14/11/98 Ax12 Bicicleta 3 90,00 1020 15/11/98 BT04 Tv 10 400,00 1030 15/11/98 BZ66 Bola 300 5,00 1040 16/11/98 BT04 Tv 4 160,00 1050 17/11/98 CB03 Vidro 5 25,00 1070 20/11/98 BT04 Bola 2 80 5.1.1 – Anomalia de INCLUSÃO Repare na entidade Pedidos_pecas, mostrada no capítulo 5.1 desta apostila, que para trabalhar com uma nova peça no banco de dados, o usuário será obrigado fazer um pedido da mesma, visto que não é possível somente cadastrar dados da peça. Este é um exemplo prático de uma anomalia de INCLUSÃO. 5.1.2 – Anomalia de ALTERAÇÃO (atualização) Repare na entidade Pedidos_pecas, mostrada no capítulo 5.1 desta apostila, que ao efetuar UMA alteração na peça BT04, essa se fará necessária em várias outras tuplas da entidade, visto que vários pedidos desta mesma peça foram cadastrados na entidade. Este é um exemplo prático de uma anomalia de ALTERAÇÃO. 5.1.3 – Anomalia de EXCLUSÃO Repare na entidade Pedidos_pecas, mostrada no capítulo 5.1 desta apostila, que ao excluirmos o pedido 1000 perderemos também qualquer referência da peça AX12, pois esta foi requisitada somente em um pedido. Imagine o que aconteceria se esta peça fosse vendida para algum cliente! Este é um exemplo prático de uma anomalia de EXCLUSÃO. 5.1.4 – Anomalia de INCONSISTÊNCIA Repare na entidade Pedidos_pecas, mostrada no capítulo 5.1 desta apostila, que não há nada que impeça que a peça BT04 seja cadastrada com várias descrições diferentes. Isso seria uma catástrofe no momento de uma venda! Este é um exemplo prático de uma anomalia de INCONSISTÊNCIA. Diante das anomalias exemplificadas anteriormente iremos falar neste ponto das normalizações de entidades de um banco de dados. Existem 6 formasde normalizarmos uma entidade, segundo CODD, a saber: • 1NF � primeira forma normal; • 2NF � segunda forma normal; • 3NF � terceira forma normal; • BCNF � Forma normal de Boyce Codd; • 4NF � quarta forma normal; • 5NF � quinta forma normal; Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 4 5.2 – 1NF (PRIMEIRA FORMA NORMAL) Uma relação está na 1FN, se somente todos os domínios básicos (CONTEÚDOS DE CADA CAMPO) contiverem somente valores atômicos (não repetidos). Para atingir esta forma normal devemos eliminar os grupos de registros repetidos. Como? Procedimentos: a) Identificar a chave primária da entidade; b) Identificar o grupo de atributos que causam a repetição de registros e excluí-lo da entidade; c) Criar uma nova entidade com a chave primária da entidade anterior e o grupo de atributos que causavam a repetição. A chave primária da nova entidade será obtida pela concatenação da chave primária da entidade inicial e a chave primária do grupo repetitivo. Figura 1 A ENTIDADE ACIMA NÃO ESTÁ NORMALIZADA, PORTANTO DEVEMOS NORMALIZÁ-LA PARA A 1NF, pois apresenta as seguintes ANOMALIAS: a) Para toda nota fiscal cadastrada, há necessidade de informarmos o código, a descrição e o preco de venda de CADA mercadoria da nota. Desta forma, corremos o risco de cadastrarmos uma descrição ou preço, de uma MESMA MERCADORIA, de diferentes formas. b) Caso seja necessário alterar a descrição ou preço de venda de uma mercadoria, correríamos o risco de alterar somente em uma tupla da entidade. c) Se quisermos excluir uma determinada mercadoria da entidade, deveremos procurá-la tupla a tupla, o que tornaria uma tarefa trabalhosa. d) Caso excluíssemos da entidade uma mercadoria que fosse cadastrada uma única vez, perderemos as informações dessas para consultas futuras. Para solução das anomalias acima, deveremos normalizar a tabela notafiscal para a 1NF, conforme figura abaixo: Figura 2 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 5 OBSERVAÇÃO IMPORTANTE: Na nova entidade “Vendas”, ilustrada na figura anterior, note que a chave primária é composta pela chave da tabela NotaFiscal (NumeroNotaFiscal) e CódigoMercadoria. 5.3- 2NF (SEGUNDA FORMA NORMAL) Uma relação está na 2FN, se e somente se, ela estiver na 1NF e todos os atributos não chave forem totalmente dependentes da chave primária (dependente de toda a chave e não apenas de parte dela). Procedimentos: a) Identificar os atributos que não são funcionalmente dependentes de toda a chave primária. b) Remover da entidade todos esses atributos identificados e criar uma nova entidade com eles. A chave primária da nova entidade será o atributo nos quais os atributos removidos são funcionalmente dependentes. Exemplo: Vejamos as entidades a seguir: Notas Fiscais: (Num. NF, Série, Código do Cliente, Nome do cliente, Endereço do cliente, Total Geral da Nota) Arquivo de Vendas: (Num. NF, Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da Venda) Figura 3 AS ENTIDADES ACIMA NÃO ESTÃO NA SEGUNDA FORMA NORMAL, MAS SIM NA PRIMEIRA FORMA NORMAL Normalizando para segunda forma normal (2FN): Arquivo de Notas Fiscais (Num. NF, Série, Código do Cliente, Nome do cliente, Endereço do cliente, Total Geral da Nota) Arquivo de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da Venda) Arquivo de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda) Figura 4 Como resultado desta etapa, houve um desdobramento do arquivo de Vendas (a ENTIDADE NOTAFISCAL, não foi alterada, por não possuir chave composta) em duas estruturas, a saber: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 6 Primeira estrutura (Arquivo de Vendas): Contêm os atributos originais, sendo excluídos os dados que são dependentes apenas do campo Código da Mercadoria. Segundo estrutura (Arquivo de Mercadorias): Contém os elementos que são identificados apenas pelo Código da Mercadoria, ou seja, independentemente da Nota Fiscal, a descrição e o preço de venda serão constantes. 5.4- 3FN (Terceira Forma Normal) Uma relação está na 3FN se somente estiver na 2FN e todos os atributos não chave forem dependentes não transitivos da chave primária (cada atributo for funcionalmente dependente apenas dos atributos componentes da chave primária, ou se, todos os seus atributos não chave forem independentes entre si). Procedimentos: a) Identificar todos os atributos que são funcionalmente dependentes de outros atributos não chave; b) Removê-los e criar uma nova entidade com os mesmos. A chave primária da nova entidade será o atributo nos quais os atributos removidos são funcionalmente dependentes. Estrutura na segunda forma normal (2FN): Observem as entidades abaixo: Notas Fiscais: (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente, Total Geral da Nota) Vendas: (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria) Mercadorias: (Código da Mercadoria, Descrição da Mercadoria, Preço de venda) Estrutura na terceira forma normal (3FN): Observem as entidades abaixo: Notas Fiscais: (Num. NF, Série, Data emissão, Código do Cliente e Total Geral da Nota) Vendas: (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria) Mercadorias: (Código da Mercadoria, Descrição da Mercadoria, Preço de venda) Clientes: (Código do Cliente, Nome do cliente, Endereço do cliente) Como resultado desta etapa, houve um desdobramento do arquivo de Notas Fiscais, por ser o único que possuía campos que não eram dependentes da chave principal (Num. NF), uma vez que independente da Nota Fiscal, o Nome, Endereço são inalterados. Este procedimento permite evitar inconsistência nos dados dos arquivos e economizar espaço, por eliminar o armazenamento freqüente e repetidas vezes destes dados. A cada nota fiscal comprada pelo cliente, haverá o armazenamento destes dados e poderá ocorrer divergência entre eles. As estruturas alteradas e o motivo das alterações: - Primeira estrutura (Notas Fiscais): Contêm os elementos originais, sendo excluído os dados que são dependentes apenas do campo Código do Cliente (informações referentes ao cliente). - Segundo estrutura (Clientes): Contém os elementos que são identificados apenas pelo Código do Cliente, ou seja, independente da Nota Fiscal, o Nome, Endereço serão constantes. Após a normalização, as estruturas dos dados estão projetadas para eliminar as inconsistências e redundâncias dos dados, eliminando desta forma qualquer problema de atualização e operacionalização do Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 7 sistema. A versão final dos dados poderá sofrer alguma alteração, para atender as necessidades específicas do sistema, a critério do analista, durante a fase de desenvolvimento do projeto físico do sistema. 5.5- BCNF ou NFBC (Forma Normal de BOYCE CODD) / 4FN (Quarta Forma Normal)e 5FN(Quinta Forma Normal) A BCNF, a 4FN e a 5FN não serão abordadas neste curso. Ressalta-se que estas normalizações existem e devem ser tratadas em cursos que abordam a fundo as teorias de banco de dados. Vale dizer também, que o objetivo desse curso é aprofundarmos na linguagem Transact-SQL e conhecer a ferramenta SQL-SERVER, o que faz necessário termos noções básicas de normalizações e relacionamentos entre entidades de um banco de dados relacional. Antes de normalizarmos as tabelas de um banco de dados devemos passar por etapas de modelagem de dados. As etapas envolvidas na construção de modelos de dados são: • Modelo Conceitual • Modelo Lógico • Modelo Físico – MODELO CONCEITUAL Nesta etapa da modelagem de dados o DBA deve: • Conhecer o negócio • Rascunhar as principais entidades do BD. e seus principais atributos. • Não se preocupar com os relacionamentos n : n. – MODELO LÓGICO Nesta etapa da modelagem de dados o DBA deve: • Representar o negócio. • Criar as entidades de relacionamentos para substituir os relacionamentos n:n. • Definir as chaves primárias de cada entidade. • Normalizar as tabelas. • Adequar aos padrões do banco de dados escolhido, neste caso, ao padrão do SQL SERVER. • Documentar as entidades e seus atributos. – MODELO FÍSICO Nesta etapa da modelagem de dados o DBA deve: • Tomar ciência das limitações do banco de dados, neste caso, o SQL-SERVER. • Considerar os requisitos dos softwares que farão acesso ao banco de dados. • Criar fisicamente as entidades, relacionamentos, chaves, índices, definir níveis de acessos entre outros, ou seja, criar fisicamente o banco de dados projetado nas etapas anteriores. 6 – SQL-SERVER De agora para frente iremos abordar assuntos relativos à ferramenta SQL-SERVER 2005 Express Edition. Comparando o SQL-SERVER com o ACCESS, podemos destacar principalmente entre as diferenças, a capacidade de armazenamento, visto que o ACCESS manipula no MÁXIMO 2GB de registros distribuídos entre as entidade de um banco de dados. Já o SQL-SERVER é capaz de manipular registros desde que haja espaço no HD. Porém, esta versão que estamos usando, 2005 EXPRESS EDITION, permite manipularmos em cada arquivo de banco de dados no máximo de 4 GB. Outra grande vantagem do SQL-SERVER refere-se ao fato do mesmo trabalhar com arquitetura cliente-servidor. Com isso, todos os bancos de dados criados no SQL poderão ser acessados pelo cliente, no servidor. Um Servidor SQL pode conter vários bancos de dados, que por sua vez são acessados por vários usuários. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 8 Num banco de dados criado no SQL-SERVER, poderemos limitar os acessos ao próprio banco, como também às entidades e até mesmo seus atributos. Tarefas como leitura, gravação, exclusão e consulta à tuplas também podem ser limitadas para determinados usuários. 6.1 – COMPONENTES DO SQL-SERVER 2005 Express Edition Os principais componentes do SQL-SERVER são os seguintes: • Banco de dados • Tabelas • Diagrams • Visões • Stored Procedures • Triggers • Etc.. A seguir veremos com mais detalhes cada componente de um banco de dados do SQL. 6.1.1 – BANCO DE DADOS Um banco de dados é composto por: • Tabelas; • Visões; • Triggers; • Stored Procedures; • E outros; Como dito anteriormente o SQL Server 2005 Express Edition pode manter vários bancos de dados. Cada novo banco de dados criado possuirá os componentes citados acima. A figura abaixo ilustra os componentes dos bancos de dados criados no servidor SQL: Figura 5 Repare que o banco de dados MASTER possui seus componentes: Tables, Views, Stored Procedures e etc. Perceba que no banco de dados NORTWIND, estes mesmos componentes estão presentes. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 10 6.1.6 – TRIGGERS Uma trigger nada mais é do que uma rotina de programação que é disparada (executada) automaticamente, diante de um cadastro, alteração e/ou exclusão de registros em uma tabela. Quando criamos a trigger informamos em que momento ela será disparada. Nas triggers são utilizados comandos da linguagem Transact-SQL. 7 – O AMBIENTE DO SQL-SERVER 2005 EXPRESS EDITION Para acessarmos o SQL-Server 2005 Express Edition, devemos acessá-lo no grupo de programas do SQL, conforme mostrado abaixo: Figura 7 Ao clicar na opção “SQL Server Management Studio Express”, surgirá então a seguinte tela: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 11 Figura 8 Na tela acima, na janela “Connect to Server”, não se esqueça de informar o conteúdo para o campo “Server name”, pois esta informação refere-se ao nome do servidor SQL instalado no seu computador. Inclusive o nome que aparece no exemplo acima, com certeza será diferente no seu computador. Por fim, para efetuar a conexão com o servidor SQL, clique no botão “Connect”. Surgirá então as seguintes áreas do ambiente do SQL-SERVER: Figura 9 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 12 7.1 – ASSISTENTE DE CRIAÇÃO DE BANCO DE DADOS NO SQL-SERVER Figura 10 Para criação de um novo banco de dados basta: • Clicarmos com botão direito do mouse sobre “Databases” • No menu que surgir (mostrado na figura acima) clique na opção “New Database” • Na tela que surgir, indique o nome do banco de dados que será criado. Digite o nome do banco no campo “Database Name”, conforme ilustra a figura abaixo: Figura 11 • O arquivo do banco de dados será gravado na pasta do servidor SQL-SERVER, localizada em “C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data”. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 13 • Para concluir a criação física do arquivo de banco de dados, basta clicar no botão “OK”. Após seguir os passos descritos anteriormente, seu banco de dados será mostrado como nos exemplos abaixo, indicados pelas setas: Figura 12 7.2 – ATTACH DATABASE Este recurso é utilizado para acessarmos um banco de dados no SQL-SERVER. Quando houver necessidade de copiarmos um banco de dados para outro servidor SQL, devemos “atachá-lo” neste servidor. Os arquivos de log (.ldf), e do banco de dados (.mdf) devem ser copiados para o computador, NA PASTA “C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data”, onde se encontra o servidor SQL. Em seguida, na janela “Object Explorer” siga os passos abaixo: • Clique com o botão direito do mouse sobre o componente “Databases”; • Escolha a opção “Attach...”; A figura abaixo ilustra os passos acima: Figura 13 Banco de Dados UNIVAP - CTI Professor: Alberson WanderPágina: 14 Surgirá então a seguinte janela: Figura 14 Siga os passos abaixo, a partir da janela mostrada acima, para “atachar” (puxar/fixar/carregar) o banco de dados copiado anteriormente para a pasta do servidor SQL. • Na janela acima, dê um clique no botão “Add...”. • Surgirá a janela “Locate Database Files”, mostrada abaixo: Figura 15 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 15 Obs.: Repare que a janela da mostrada, mostra todos os bancos de dados (arquivos .mdf), existentes na pasta do servidor. • Basta, então, selecionar o nome do banco de dados desejado e clicar no botão “OK”. Desta forma o banco de dados aparecerá na janela “Object Explorer”. 7.3 – CRIAÇÃO DE TABELAS NO BANCO DE DADOS Para criação de tabelas em um banco de dados é necessário abri-lo primeiramente. Faça isso clicando no nome do banco de dados, mostrado na janela “Object Explorer”, conforme exemplo abaixo: Para criar uma nova tabela em um banco de dados, siga os passos a seguir: • clique com o botão direito do mouse no objeto “Table”; • Surgirá um submenu, neste selecione a opção “New Table...”, conforme figura abaixo: Figura 16 • Surgirá então as seguintes áreas, apontadas pelas setas: Figura 17 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 16 A área mostrada é usada para criar uma nova tabela. Nela indique: Column Name: Nesta coluna você deve indicar os nomes dos atributos da entidade (Campos da tabela) que serão criados. Data Type: Indique o tipo de dado de cada atributo criado. Allow Nulls: Quando esta coluna apresentar uma marca de checagem indicará que o atributo em questão aceitará gravação registros sem que o usuário tenha informado um dado qualquer para o referido campo. Para criar fisicamente a tabela, basta clicar no botão e indicar o nome da tabela na janela que surgirá. Após criar a tabela, quando necessário, será possível alterá-la. Para isto, basta clicar com o botão direito do mouse sobre o nome da tabela, estando com a árvore de objetos “Table” aberta, no banco de dados onde a mesma se encontra, conforme a figura abaixo: Figura 18 Ao clicar na opção “Design” no submenu mostrado, a área estrutura da tabela será novamente mostrada, para que se possa incluir, alterar ou excluir campos. 7.4 – CRIAÇÃO DE CHAVE PRIMÁRIA PARA TABELAS Para criação de chaves primárias siga os passos abaixo: • Selecione o(s) atributos (s) que irão compor a chave primária; • Clique no botão , mostrado na figura a seguir. Veja o exemplo abaixo: Figura 19 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 17 Na figura, foram selecionados para chave primária os atributos: “codigo" e “cpf”. Em seguida, foi clicado no botão da chave, disposto na barra de ferramentas. Esses processos fizeram dos atributos indicados, chave primária COMPOSTA da tabela. Para exemplificar, vamos excluir alguns atributos da entidade “professores”. Veja como ficará o layout da tabela: Figura 20 Para excluir um atributo da tabela selecione-o e pressione o botão “Delete”. 7.5 – RELACIONANDO TABELAS(ENTIDADES) O relacionamento entre tabelas normalizadas é outra importante operação disponível nos SGBD’s. No SQL-SERVER, utilizaremos inicialmente o objeto “DIAGRAMS” para relacionar as tabelas do banco de dados. Antes, porém, é importante citarmos os tipos de relacionamentos existentes entre tabelas de um banco de dados, a saber: 1. 1..N: Um único registro da tabela PAI pode se relacionar com vários registros na tabela filho; 2. 1..1: Um único registro da tabela PAI pode se relacionar com um único registro na tabela filho; 3. N..N: Vários registros da tabela PAI poderão se relacionar com vários registros na tabela filho. É importante ressaltar que este tipo de relacionamento não deve existir num banco de dados. Para isso, devemos criar uma tabela de entidade de relacionamento, que fará com que a relação se torne 1..n. Veremos a solução prática para este exemplo mais a frente; IMPORTANTE: 1. PARA RELACIONAR DUAS OU MAIS TABELAS, NÃO DEVEM EXISTIR REGISTROS CADASTRADOS NAS MESMAS. 2. Os campos envolvidos no relacionamento (chave(s) primária(s) e chave(s) estrangeira(s) devem ser do MESMO TIPO E TAMANHO). OS NOMES DE TAIS CHAVES NÃO PRECISAM SER O MESMO. 7.5.1 – RELACIONAMENTO 1..N Conforme descrito anteriormente, este tipo de relacionamento faz com que 1 registro da tabela Pai se relacione com vários outros na tabela FILHO. Vejamos o exemplo na figura a seguir: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 18 Figura 21 Reparem na figura que foram criadas as tabelas “professores” e “telefonesprofessor”. Analise as seguintes observações: 1. Na tabela “professores”, verifique que o campo “codigoprofessor” é chave primária. Isso fará com que exista somente UM professor com um código específico. 2. Na tabela “telefonesprofessor”, veja que existe uma chave primária COMPOSTA pelos campos “codprofessor” (também conhecida como chave estrangeira) e “telefoneprofessor”. Isso possibilitará o cadastro de vários telefones para um professor. Por exemplo: Figura 22 3. Se relacionamos as duas tabelas, veremos que o tipo de relacionamento será 1..N, conforme mostrado na figura abaixo: Figura 23 4. Na tabela FILHO, SE O CAMPO “CodProfessor” não fizesse parte da chave primária, o tipo de relacionamento ainda sim seria 1..N. Conforme ilustra a figura abaixo: Figura 24 7.5.2 – RELACIONAMENTO 1..1 Neste tipo de relacionamento teremos o campo chave primária da tabela PAI sendo também sendo o campo chave da tabela FILHO, ou seja, o mesmo campo chave primária nas tabelas envolvidas no 1 N Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 19 relacionamento. Por esse motivo temos um único registro cadastrado somente uma vez em ambas as tabelas, o que torna o relacionamento 1..1. Veja o exemplo mostrado na figura abaixo: Figura 25 Analise a seguintes observação: • A figura acima mostra que para cada professor cadastrado na tabela “professores”, poderemos ter SOMENTE UM telefone cadastrado na tabela “telefoneprofessor”, ISTO PORQUE somente o campo “codprofessor” é chave primária e estrangeira nesta tabela. 7.5.3 – RELACIONAMENTO N..N Este tipo de relacionamento não deve aparecer em banco de dados. Eles são “excluídos” devido à necessidade de criação de uma tabela chamada “entidade de relacionamento”. Uma entidade de relacionamento deve conter os campos chaves das tabelas que possuem o tipo de relacionamento N..N. Com isso, relacionam-se as tabelas PAI e FILHO com esta entidadede relacionamento. Veja a figura abaixo, ela representa a situação descrita acima: Figura 26 1 1 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 20 Se relacionarmos as tabelas criadas teremos: Figura 27 Analisemos o relacionamento acima: 1. Com o relacionamento acima, tornamos possível que um professor tenha vários telefones e que um mesmo telefone pertença a mais de um professor. Um exemplo típico para esta situação é a de professores casados que tenham os mesmos telefones de contato. 2. A tabela “TelefonesProfessores” foi criada para solucionarmos o tipo de relacionamento N..N. Portanto esta tabela é chamada de “entidade de relacionamento” entre as tabelas “professores” e “telefones”. 7.5.4 – CRIAÇÃO DE RELACIONAMENTOS PELO OBJETO DATABASE DIAGRAMS Como visto anteriormente, o objeto “DATABASE DIAGRAMS” é utilizado para criarmos os relacionamentos entre tabelas de um banco de dados. Utilize os passos abaixo para relacionar as tabelas de um banco de dados: 1. Clique com o botão direito do mouse sobre o objeto “Database Diagrams”, disposto na árvore de objetos do banco de dados em aberto; 2. No menu que irá surgir, clique sobre “New Database Diagram”, conforme ilustra a figura a seguir: Figura 28 Após seguir os passos acima, veremos a janela do assistente de criação de relacionamentos, chamada “Add Table”, conforme ilustra a próxima figura: 1 1 N N Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 21 Figura 29 Usando a janela “Add Table” clique no botão “Add” para incluir as tabelas que serão relacionadas, neste exemplo serão relacionadas todas as tabelas. Após adicionar todas as tabelas que serão relacionadas entre si, basta clicar no botão “Close”, para fechar a janela “Add Table”. Veja o resultado na figura abaixo: Figura 30 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 22 Se você notar que se esqueceu de relacionar uma tabela qualquer na área acima, clique com o botão direito do mouse sobre a área onde as tabelas estão sendo mostradas, e em seguida clique na opção “Add Table...”. Com isso você poderá inserir outras tabelas na área de diagramas acima. Para relacionarmos as tabelas mostradas na área de diagramas, devemos arrastar O(S) CAMPO(S) DA CHAVE PRIMÁRIA, DA TABELA PAI, para cima do(s) CAMPO(S) CHAVE ESTRANGEIRA na tabela FILHO. Quando este processo for feito, surgirá a tela “Tables and Columns”, para definições gerais do relacionamento que será criado: Figura 31 Na janela acima, temos: Primary Key Table: Indica o nome da tabela PAI onde está a chave primária; Foreign Key Table: Indica o nome da tabela FILHO onde se encontra a chave estrangeira; : Indicam quais os campos serão relacionados. Caso algum campo não esteja relacionado, basta clicar na linha e seleciona-lo na caixa que será aberta. Ao termino da indicação dos campos que serão relacionados, clique no botão “OK”. A janela será fechada e a seguinte janela será mostrada: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 23 Figura 32 Na janela acima observe as seguintes opções: Figura 33 Delete Rule: Com a opção “Cascade” selecionada, as exclusões de registros na tabela “PAI” excluirão automaticamente registros relacionados na tabela “FILHO”. Update Rule: Com a opção “Cascade” selecionada, as alterações em registros na tabela “PAI” alterarão automaticamente registros relacionados na tabela “FILHO”. O botão “OK”: este botão criará o relacionamento físico entre as tabelas PAI e FILHO. O tipo do relacionamento será indicado AUTOMATICAMENTE, diante das definições de chave primária e estrangeiras, nas tabelas PAI e FILHO. Após o término das definições dos relacionamentos, criamos um relacionamento físico entre as tabelas, conforme ilustra a próxima figura: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 24 Figura 34 IMPORTANTE: Tabela PAI: Refere-se à tabela que ENVIA dados para outra tabela da relação; Tabela FILHO: Refere-se à tabela que RECEBE dados da tabela pai da relação; Vale dizer que TODOS os relacionamentos devem ser criados, antes de gravá-los. No exemplo acima criamos somente a relação entre as tabelas “professores” e “telefoneprofessor”. Poderíamos relacionar também a tabela “univap” com a tabela “telefoneprofessor”. Para gravar os relacionamentos criados, basta clicar no botão , disponível na barra de ferramentas do SQL-SERVER. Dê o nome que desejar para os relacionamentos criados. 8 – MANIPULANDO TUPLAS EM UMA ENTIDADE Depois de criados os relacionamentos entre as tabelas do banco de dados, você poderá gravar e manipular registros nessas. LEMBRETE: NÃO GRAVE REGISTROS NAS TABELAS ANTES DE RELACIONÁ-LAS. Se as tabelas possuírem registros, você não conseguirá criar os relacionamentos, pois o SGBD irá verificar se existem registros que farão com que se perca a integridade de dados, ou seja, por exemplo: a tabela FILHO possua registros não cadastrados anteriormente na tabela PAI. Para cadastrar registros É NECESSÁRIO FAZÊ-LO PRIMEIRAMENTE NA TABELA PAI. Baseado nas últimas tabelas, mostradas anteriormente nesta apostila, vamos cadastrar registros na tabela “professores”, para isso siga os passos a seguir: • Clique no objeto “Tables”, na árvore de objetos do SQL-SERVER, para que o SQL mostre a árvore com nomes de todas as tabelas existentes no banco de dados desejado; • Clique com o botão direito do mouse sobre o nome da tabela desejada; • No submenu, clique sobre “Open Table...”, conforme ilustrado na figura abaixo: Figura 35 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 25 Seguidos os passos acima, surgirá a seguinte tela de edição de registros do SQL-SERVER: Figura 36 Para CADASTRAR um registro, basta começar a digitar o “codigoprofessor” , o “nomeprofessor” e “idadeprofessor”. Após a digitação da idade do professor, basta pressionar <enter>, para o registro ser gravado na tabela. Para ALTERAR um registro, basta clicar no campo do registro desejado e redigitar o dado. O simples fato de passar para um próximo registro, fará com que a alteração seja concretizada. Para EXCLUIR um registro, basta clicar na seta que aponta para o registro corrente e pressionar a tecla “Delete”, no teclado do computador. Este processo irá excluir o registro da tabela. 9 – TESTES DE INTEGRIDADE DE DADOS Os testes de integridade de dados podem ser feitos em váriosmomentos, a saber: • Na INCLUSÃO de registros nas tabelas FILHO; • Na EXCLUSÃO e ALTERAÇÃO de registros nas tabelas PAIS. Vamos esclarecer melhor os testes citados acima. Vamos observar os seguintes relacionamentos entre as tabelas : Figura 37 Agora vamos explicar na prática os testes de integridade, diante dos relacionamentos mostrados na figura acima: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 26 INCLUSÃO: Na tabela “TelefonesProfessores” só será permito o cadastro de novos registros se, e somente se, existirem professores e telefones cadastrados nas tabelas “professores” e “telefone”, respectivamente. EXCLUSÃO ou ALTERAÇÃO: Se no momento da criação dos relacionamentos acima, o DBA NÃO OPTOU por EXCLUSÃO e/ou ALTERAÇÃO EM CASCATA, e tentarmos excluir, ou alterar registros de “professores” e/ou “telefones” que estão diretamente ligados a registros na tabela “TelefonesProfessores”, o SQL-SERVER exibirá uma mensagem de alerta, indicando que a operação escolhida não será concretizada, isso para não ocorrer falha na integridade de dados. Na prática, imagine se conseguíssemos excluirmos um professor cujo código, por exemplo, fosse 100, da tabela “professores” e existissem telefones do mesmo, cadastrados na entidade de relacionamento “TelefonesProfessores”. Diante deste exemplo prático, não saberíamos dizer qual o nome e/ou idade do professor que possui os telefones existentes na entidade de relacionamento “TelefoneProfessores”, pois o excluímos da tabela PAI (“professores”). O mesmo controle vale para a operação de Alteração. 10 – VISÕES Como dito anteriormente, cada banco de dados possui o objeto “VIEWS”. Esse objeto deve ser usado para criarmos consultas a registros de uma tabela, utilizando a instrução “SELECT” da Transact-SQL. O objeto VIEWS de um banco de dados, cria uma tabela TEMPORÁRIA, cujos registros armazenados serão filtrados de tabela(s) do banco em uso. No SQL-SERVER, poderemos usar o assistente de criações de visão. Para isso, devemos abrir o banco de dados desejado. Em seguida, siga os passos ilustrados a seguir: Figura 38 Surgirá então a seguinte tela: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 27 Figura 39 Onde: - Usado para gravar as INSTRUÇÕES que geraram uma consulta; - Estes botões farão fechar ou mostrar, os painéis da área de trabalho mostrado na figura; - Executa uma consulta criada; - Analisa uma consulta SQL criada. - Faz uso da cláusula Group...By (será abordada posteriormente), na consulta SQL criada; - Este botão é o mais importante da janela acima, pois ele permitirá escolhermos quais tabelas físicas serão usadas para criação das consultas de registros. Para ilustrar uma consulta criada pelo objeto VIEWS, vamos indicar uma tabela qualquer de um banco de dados, por exemplo a tabela “professores”. Para isso, basta selecionarmos o nome da tabela na janela “Add Table” e clicar no botão “Add”, conforme a figura a seguir: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 28 Figura 40 Quando clicarmos no botão , a janela “Add Table” surgirá novamente, se estiver fechada. Então, selecione o nome da tabela desejada e clique novamente no botão “Add”. No exemplo acima, foi escolhida a tabela “professores”. Quando o botão “Add” foi clicado, a tabela foi inserida na área de criação da visão, disposta atrás da “Add Table”. Caso necessário, você poderá utilizar, numa só consulta, várias tabelas. Veremos mais adiante a utilidade de usarmos numa consulta várias tabelas. Depois de inserida a tabela escolhida para consultas, podemos fechar a janela “Add Table” e definirmos, por exemplo, quais os campos serão mostrados na consulta sql, bem como quais serão os critérios de filtro de registros na tabela. Veja o exemplo a seguir: Figura 41 No exemplo acima, indicamos na coluna “COLUMN”, quais os dados deveriam ser mostrados de cada professor gravado, no caso: codigoprofessor e nomeprofessor. Isto pode ser feito clicando na caixa localizada ao lado do nome do campo, na tabela exibida ( ). Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 29 Você deve ter reparado também, que após indicar cada campo na coluna “Column”, uma instrução “Select” ia sendo criada automaticamente pelo SGBD. Para executarmos o comando “SELECT codigoprofessor, nomeprofessor FROM dbo.professores”, basta clicar no botão . Desta forma, foram mostrados todos os códigos e nomes de professores gravados na tabela professores. O resultado pode ser visualizado numa tabela, disposta após a linha de código gerada pelo assistente de “visão”. 11 – CRIANDO E EXECUTANDO QUERY COM O BOTÃO “New Query” Podemos criar banco de dados, tabelas e manusear registros utilizando linhas de comandos da linguagem Transact-SQL. Tudo que foi mostrado até este ponto, nesta apostila, podemos fazer por meio de comandos. Vale dizer que no SQL-SERVER, assim como a maioria dos SGBD’s existentes, a linguagem usada para criar banco de dados e tabelas, bem como manusear registros nessas estruturas é a SQL (Structured Query Language). Os comandos da SQL são divididos em cinco grupos, a saber: 1º) DML - Linguagem de Manipulação de Dados Primeiro há os elementos da DML (Data Manipulation Language - Linguagem de Manipulação de Dados). A DML é um subconjunto da linguagem usada para inserir, atualizar e apagar dados. • INSERT é usada para inserir um registro (formalmente uma tupla) a uma tabela existente. • UPDATE para mudar os valores de dados em uma ou mais linhas da tabela existente. • DELETE permite remover linhas existentes de uma tabela. 2º) DDL - Linguagem de Definição de Dados O segundo grupo é a DDL (Data Definition Language - Linguagem de Definição de Dados). Uma DDL permite ao utilizador definir tabelas novas e elementos associados. A maioria dos bancos de dados de SQL comerciais tem extensões proprietárias no DDL. Os comandos básicos da DDL são poucos • CREATE cria um objeto (uma Tabela, por exemplo) dentro da base de dados. • DROP apaga um objeto do banco de dados. Alguns sistemas de banco de dados usam o comando ALTER, que permite ao usuário alterar um objeto, por exemplo, adicionando uma coluna a uma tabela existente. Outros comandos DDL: • ALTER TABLE • CREATE INDEX • ALTER INDEX • DROP INDEX • CREATE VIEW • DROP VIEW 3º) DCL - Linguagem de Controle de Dados O terceiro grupo é o DCL (Data Control Language - Linguagem de Controle de Dados). DCL controla os aspectos de autorização de dados e licenças de usuários para controlar quem tem acesso para ver ou manipular dados dentro do banco de dados. Duas palavras-chaves da DCL: • GRANT - autoriza ao usuário executar ou setar operações. • REVOKE - remove ou restringe a capacidade de um usuário de executar operações. Banco de DadosUNIVAP - CTI Professor: Alberson Wander Página: 30 Outros comandos DCL: • ALTER PASSWORD • CREATE SYNONYM 4º) DTL - Linguagem de Transação de Dados • BEGIN WORK (ou START TRANSACTION, dependendo do dialeto SQL) pode ser usado para marcar o começo de uma transação de banco de dados que pode ser completada ou não. • COMMIT envia todos os dados das mudanças permanentemente. • ROLLBACK faz com que as mudanças nos dados existentes desde que o último COMMIT ou ROLLBACK sejam descartadas. COMMIT e ROLLBACK interagem com áreas de controle como transação e locação. Ambos terminam qualquer transação aberta e liberam qualquer cadeado ligado a dados. Na ausência de um BEGIN WORK ou uma declaração semelhante, a semântica de SQL é dependente da implementação. 5º) DQL - Linguagem de Consulta de Dados Embora tenha apenas um comando, a DQL é a parte da SQL mais utilizada. O comando SELECT permite ao usuário especificar uma consulta ("query") como uma descrição do resultado desejado. Esse comando é composto de várias cláusulas e opções, possibilitando elaborar consultas das mais simples às mais elaboradas. Antes de abordar comandos da linguagem TRANSACT-SQL, vamos conhecer o ambiente do SQL Server que será utilizado para digitar os comandos da DDL e da DML. Para isso, basta clicar no botão “New Query” disposto na barra de ferramentas, mostrado abaixo: Figura 42 Repare que ao clicar no botão “New Query”, foi aberta uma janela, mostrada acima pela seta em vermelho. Novos botões foram criados na barra de ferramentas, a fim de possibilitar a criação/uso de instruções da Transact-SQL: - Botão “Parse”: Usado para analisar a falta ou não de parâmetros de um comando SQL digitado; - Botão “Execute” – Usado para executar as instruções SQL digitadas ou selecionadas; Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 33 Figura 45 Quando a sintaxe digitada estiver correta e o botão “Execute” for pressionado, a mensagem “Command(s) completed successfully” aparecerá no painel de resultados, conforme visto na figura acima. Podemos alterar ou excluir uma visão criada, para isso devemos usar os comandos Alter View ou Drop View, respectivamente. No comando Alter View, deveremos digitar novamente todos os comandos que irão compor a “Visão”. Para isto usaremos a seguinte sintaxe: Alter View <nome_da_visão_criada> As <NOVO Comando SELECT> Baseado no exemplo da última figura se desejasse alterar a visão criada, por exemplo, para selecionarmos todos os dados de professores que tivessem idade INFERIOR a 30 anos, escreveríamos o seguinte comando: Alter view mostratodos As Select * from professores Where idadeprofessor < 30 Após pressionar o botão , você verá novamente a mensagem “Command(s) completed successfully”, que indicará que a sua “View” foi alterada corretamente. Para excluir uma visão por meio de comando, basta usar a seguinte sintaxe: Drop View <nome_da_visão_criada> Se desejarmos apagar, por exemplo, a “View” criada nos exemplos anteriores, basta digitarmos: Drop view mostratodos Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 34 Em seguida, pressione o botão . Se não ocorrer algo errado, novamente a mensagem “Command(s) completed successfully” aparecerá no painel de resultados. Para visualizarmos os registros filtrados por uma visão anteriormente criada, basta seguir os passos ilustrados na figura a seguir: Figura 46 Serão mostrados os registros filtrados pela instrução SELECT criada dentro da View, conforme mostra a seta na figura acima. O resultado exibido na figura anterior pode ser gravado da mesma forma que um resultado de instruções digitadas na área de edição de comandos. Para isso, siga os passos descritos no item 11.1 desta apostila. Podemos usar os assistentes para criar, alterar e excluir “Visões”, como vimos anteriormente. 12 – TRANSACT SQL (DDL) No SQL-SERVER é possível criar banco de dados, tabelas, relacionamentos entre as mesmas, gravar registros, excluí-los, alterá-los e consultá-los, tudo através de instruções a linguagem SQL ((Structured Query Language), conhecida como TRANSACT SQL. Como citado anteriormente, os comandos da Transact SQL são divididos em grupos, conhecidos como DDL (DATA DEFINITION LANGUAGE) e DML (DATA MANIPULATION LANGUAGE). Vamos conhecer os principais comandos da DDL e da DML. 12.1 – CRIANDO BANCO DE DADOS (DDL) Para criarmos um banco de dados no SQL, usamos a seguinte sintaxe: CREATE DATABASE <nome_do_banco_dados> Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 35 Exemplo: Create database LOJA Quando for executado o comando acima, serão criados fisicamente os arquivos .MDF e .LOG, referentes ao banco de dados LOJA. Os arquivos serão criados automaticamente, pelo SQL SERVER, na pasta do servidor. Após a execução do comando acima será exibida a seguinte mensagem: Command(s) completed successfully. 12.2 – EXCLUINDO BANCO DE DADOS (DDL) Quando necessário, podemos utilizar o comando DROP DATABASE, para excluir fisicamente um banco de dados existente. Sintaxe: DROP DATABASE <nome_do_banco_dados> Exemplo: Drop database loja È importante salientar que ao excluir um banco de dados, todo seu conteúdo também será excluído, ou seja, tabelas, registros, visões, stored procedures, triggers e etc, serão perdidos com a exclusão. 12.3 – CRIAÇÃO DE TABELAS NUM BANCO DE DADOS (DDL) Para criação de tabela em um banco de dados usamos o comando Create Table. Sintaxe: CREATE TABLE <nome_da_tabela) ( <campo1> <tipo_campo> [primary key] [ not null ] , ...... <campon> <tipo_campo> [not null] ) Exemplo 1: Create table cliente ( Codcli int primary key not null, Nomecli char(30) not null, Endcli varchar(40), Telcli varchar(25) ) No exemplo acima está sendo criada a tabela cliente. Os campos desta tabela serão: Codcli do tipo inteiro, será chave primária e exigirá dados no momento do cadastro de um registro; Nomecli do tipo caracter, armazenará 40 dígitos, também exigirá dados no momento da gravação do registro; endcli do tipo varchar, capaz de armazenar no máximo 40 dígitos no momento da gravação de um registro, porém, não é um campo de preenchimento obrigatório; telcli do tipo varchar, capaz de armazenar no máximo 25 caracteres no momento da gravação de um registro, porém, não é um campo de preenchimento obrigatório. IMPORTANTE: no exemplo acima somente o campo codcli é chave primária da tabela cliente. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 36 Exemplo 2: Create table depentedentecliente ( Codcli int not null, Coddependente int not null, Nomedep char(40), Idadedep int, Primary key (codcli, coddependente)) IMPORTANTE: no exemplo acima, repare que os campos codcli E coddependente compõem a chave primária desta tabela. As demais definições são as mesmas do exemplo 1. Portanto, sempre que uma tabela possuir mais de um campo compondo a chave primária, a definição deve ser feita como no exemplo acima. 12.4 –ALTERAÇÃO DE ESTRUTURA DE TABELA DE UM BANCO DE DADOS (DDL) Para alterarmos a estrutura de uma tabela criada usaremos o comando ALTER TABLE. Sintaxe: Para excluir um campo de uma tabela: ALTER TABLE <nome_da_tabela_existente> DROP COLUMN <nome_campo> OU Sintaxe: Para adicionar um campo na tabela: ALTER TABLE <nome_da_tabela_existente> ADD <nome_campo> <tipo_dado> OU Sintaxe: Para alterar o TIPO DE DADO de um campo da tabela ALTER TABLE <nome_da_tabela_existente> ALTER COLUMN <nome_campo> <tipo_dado> OU Sintaxe: Para renomear um campo da tabela usa-se o MÉTODO SP_RENAME: SP_RENAME ‘<nome_tabela>.<nome_antigo_campo>’ , <novo_nome_campo> OU Sintaxe: Para inserir uma chave primária numa tabela criada anteriormente: ALTER TABLE <nome_da_tabela_existente> ADD CONSTRAINT <nome_chave> PRIMARY KEY (<nome_campo>) OU Sintaxe: Para excluir uma chave primária numa tabela criada anteriormente: ALTER TABLE <nome_da_tabela_existente> DROP CONSTRAINT <nome_chave> OU Sintaxe: Para inserir uma chave estrangeira numa tabela criada anteriormente: ALTER TABLE <nome_da_tabela_filho_jacriada > ADD FOREIGN KEY (<nome_campo_chaveestrangeira>) REFERENCES <nome_tabela_pai> ( <chave_primaria_tabela_pai> ) ON DELETE CASCADE ON UPDATE CASCADE Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 37 Exemplo 1: Alter table cliente drop column telcli Neste exemplo está sendo excluído o campo telcli da tabela cliente Exemplo 2: Alter table cliente add telefonedocli varchar(25) Neste exemplo está sendo adicionado na tabela cliente o campo chamado telefonedocli, tipo varchar de 25, Exemplo 3: alter table cliente alter column telcli varchar(20) Neste exemplo está sendo alterado o tipo de dado do campo telcli para varchar(20) Exemplo 4: SP_RENAME 'CLIENTE.telcli' , telefonecli Neste exemplo está sendo renomeado o campo telcli, da tabela cliente, para telefonecli. Neste caso repare que não foi usada a instrução alter table, mas sim o MÉTODO SP_RENAME. Exemplo 5: alter table Vendas add constraint chave PRIMARY KEY (nvenda, codcli) Neste exemplo está sendo criado na tabela copiavendas a chave primaria composta chamada “chave”, pois os campos nvenda e codcli compõem a chave primária. OBS: PARA O COMANDO ACIMA FUNCIONAR, OS CAMPOS NVENDA e CODCLI DEVEM TER SIDO CRIADO ANTERIORMENTE COM A PROPRIEDADE NOT NULL. Exemplo 6: alter table Vendas drop constraint chave Neste exemplo está sendo excluída a chave primária que foi criada no exemplo anterior. A chave primária possui o nome “chave”. Exemplo 7: alter table vendas add foreign key (codcli) references cliente(codcli) on delete cascade on update cascade Neste exemplo está sendo criada uma chave estrangeira para a tabela vendas e relacionando-a com a tabela cliente. As cláusulas “on delete cascade” e “on update cascade” são opcionais. 12.5 – EXCLUSÃO DE TABELA DE UM BANCO DE DADOS (DDL) Para exclusão de uma tabela de um banco de dados usamos o comando Drop table. Sintaxe: DROP TABLE <nome_tabela> Exemplo: Drop table cliente No exemplo acima a tabela cliente está sendo excluída de um banco de dados em uso. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 38 12.6 – RELACIONANDO TABELAS DO BANCO DE DADOS (DDL) No momento da criação de uma tabela FILHO, em uma relação, poderemos definir o relacionamento dessa com a tabela pai. Para isso usamos a seguinte cláusula no comando create table: Sintaxe: CREATE TABLE <nome_da_tabela) ( <campo1> <tipo_campo> [primary key] [ not null ] , ...... <campon> <tipo_campo> [not null] , FOREIGN KEY <campo_chave_estrangeira_desta_tabela) REFERENCES <nome_tabela_pai> ( <campo_chaveprimaria_tabela_pai> ON DELETE CASCADE ON UPDATE CASCADE ) Para criar uma tabela FILHO numa relação, É NECESSÁRIO CRIAR ANTES A TABELA PAI, pois, como é percebido na sintaxe, será necessário referenciar a tabela pai criada anteriormente. Exemplo 1: Create table cliente ( Codcli int primary key not null, Nomecli char(30) not null, Endcli varchar(40), Telcli varchar(25) ) create table produtos ( codproduto int primary key, nomeproduto char(30) ) create table produtoscliente ( codcliente int, codproduto int, primary key (codcliente, codproduto), foreign key (codcliente) references cliente(codcli) on delete cascade on update cascade, foreign key (codproduto) references produtos(codproduto) on delete cascade on update cascade ) NO EXEMPLO ACIMA, PERCEBA QUE: 1) AS TABELAS cliente E produtos FORAM CRIADAS ANTES DA TABELA produtoscliente. 2) Após a indicação da primeira chave estrangeira da tabela produtoscliente (codcliente), indicou-se que exclusões e atualizações de registros na tabelas pai (cliente) reproduzirão o efeito cascata na tabela produtoscliente. Em seguida, DEVE SER COLOCADA UMA VÍRGULA (,) para indicarmos a segunda chave estrangeira (codproduto) Para visualizarmos o relacionamento criado entre as tabelas criadas acima, deveremos abrir o banco de dados e o diagrama. Você irá perceber que ao abrir o objeto “diagrams” no banco de dados, não existirá nenhum diagrama de relacionamento disponível. PORÉM, faça uso dos passos indicados no item 7.5.4 desta apostila, para visualizar as tabelas já relacionadas. Após adicionar as tabelas na área de relacionamento você irá visualizar o relacionamento. Em seguida, basta gravá-lo fisicamente. Se tudo der certo você verá o seguinte resultado: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 39 Figura 47 Exemplo 2: Neste exemplo, vamos incluir uma nova tabela no relacionamento feito no exemplo 1. A tabela abaixo irá receber dados da tabela produtoscliente. Pelo fato da tabela produtoscliente possuir uma chave primária COMPOSTA, a tabela filho, que será criada com o comando mostrado abaixo, deve referenciar a chave composta da tabela pai. Vejamos: create table datacomprasprodutos ( datacompra datetime not null, codclien int not null, codprod int not null, primary key (datacompra, codclien, codprod), foreign key(codclien, codprod) references produtoscliente(codcliente, codproduto) on delete cascade on update cascade ) OBSERVAÇÃO: LEMBRE-SE QUE VOCÊ DEVERÁ ADICIONAR ESTA ÚLTIMA TABELA NO DIAGRAMA JÁ CRIADO. Para isso, primeiramente abra novamente a área “Database Diagrams” do banco de dados. Em seguida, pressione o BOTÃO DIREITO DO MOUSE sobre qualquer local da área que exibe as tabelas já relacionadas. No submenu que irá surgir, selecione a opção “Add Table...”, conforme figura a seguir: Banco de DadosUNIVAP - CTI Professor: Alberson Wander Página: 40 Figura 48 Surgirá a janela “Add Table”. Se a janela não exibir o nome da última tabela criada, pressione o botão “Refresh”. A janela deverá ter a seguinte aparência: Figura 49 Após clicar no botão “Add” o diagrama de relacionamento deverá ser atualizado, conforme a figura a sseguir: Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 41 Figura 50 12.7 – CRIAÇÃO DE CAMPO AUTONUMERAÇÃO (INCREMENTO AUTOMÁTICO) (DDL) Para criação de um campo de incremento automático em uma tabela, usaremos a PROPRIEDADE IDENTITY vinculado ao mesmo, no momento da criação da tabela. Quando a PROPRIEDADE IDENTITY for utilizada em uma tabela, saiba que: • Os registros para o campo definido com IDENTITY são gerados pelo sistema de forma seqüencial; • É permitido somente um único campo IDENTITY por tabela; • O campo não pode ser alterado por um comando UPDATE; • Deve ser usado somente para campos do tipo: tinyint, smallint, int, numeric, decimal Sintaxe: IDENTITY [(valor_inicial, incremento)] Onde: Valor_inicial: indica o valor para o primeiro registro gravado; Incremento: indica qual o valor será acrescido para cada registro gravado Exemplo: No exemplo abaixo indicamos que no campo aluno_id iniciará com 1, quando o primeiro registro for gravado. A partir daí, sempre que um novo registro for cadastrado, será somado automaticamente 1 no campo aluno_id, fazendo com isso, que nunca se repita os números de identificação de alunos na tabela. CREATE TABLE aluno ( aluno_id INT IDENTITY (1, 1), nome VARCHAR(20) ) O exemplo acima, foi criado o campo aluno_id, na tabela aluno. Quando desejar gravar um registro na tabela aluno, NÃO SERÁ NECESSÁRIA a indicação do dado para o campo aluno_id, pois, como descrito anteriormente, o próprio sistema irá gerar o número do aluno automaticamente. Veja abaixo o exemplo de como os registros devem ser cadastrados na tabela aluno: INSERT aluno VALUES ('Mirtes') // Será criado com aluno_id = 1 INSERT aluno VALUES ('Wagner') // Será criado com aluno_id = 2 Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 42 13 – TRANSACT SQL (DML) Para exemplificar os próximos comandos da Transact-SQL, usaremos as seguintes tabelas mostradas no diagrama abaixo: Figura 51 Para os exemplos dos comandos da DML, devemos conhecer os tipos de dados de cada campo. Por esse motivo o diagrama de relacionamento das tabelas foram mostradas acima no modo STANDARD. 13.1 – COMANDO INSERT (DML) O comando Insert é usado para gravar registro numa tabela do banco de dados ativo. Sintaxe: INSERT INTO <nome_tabela> ( campo1, ..... , campoN) VALUES ( <dado_campo1> , ..... , <dado_campoN>) Exemplo 1: insert into cliente (codcli, nomecli, endcli, telefonecli) values ( 1, 'joão da silva', 'rua JK 127', '(012) 3939-3021' ) Neste exemplo estamos cadastrando o cliente com o código 1, nome joão da silva, que reside à rua JK 127, com o telefone (012) 3939-3021, na tabela cliente. OBSERVAÇÃO: A ordem dos dados indicados dentro da cláusula values, deve obedecer à mesma ordem dos campos descritos após o nome da tabela. No exemplo acima descrevemos o campo codcli para receber o número 1 e assim sucessivamente. Exemplo 2: insert into cliente values ( 1, 'joão da silva', 'rua JK 127', '(012) 3939-3021' ) Neste exemplo, repare que foram omitidos os nomes de campos que receberão os dados descritos na cláusula values. Com isso, os dados serão gravados respectivamente obedecendo à ordem de criação dos campos na tabela, ou seja, codcli, nomecli, endcli e telefonecli. Para usar esta sintaxe, o usuário deve conhecer a ordem dos campos na tabela. Exemplo 3: Vamos supor que tenha sido criada a tabela clientetemporario e que esta não tenha sido relacionada a nenhuma tabela. Logo em seguida, usando o comando Insert, gravamos 4 registros de clientes. Vejamos: create table clientetemporario ( codcliT int primary key, nomecliT char (30) ) Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 43 insert into clientetemporario values (2, 'alberson') insert into clientetemporario values (3, 'wagner') insert into clientetemporario values (4, 'julia') insert into clientetemporario values (5, 'maria josé') Agora vamos fazer outro teste, cadastrando todos os professores da tabela clientetemporario, na tabela cliente. Vale lembrar que os campos das duas tabelas devem possuir tamanhos e tipos IDÊNTICOS. Veja o exemplo abaixo: insert into cliente(codcli, nomecli) select codcliT, NomecliT from clientetemporario O exemplo acima, seleciona codcliT e NomecliT de todos os registros gravados na tabela clientetemporario. Em seguida, os registros filtrados são gravados automaticamente na tabela cliente, nos campos codcli e nomecli. Esta sintaxe poderia também ser escrita da seguinte forma: insert into cliente(codcli, nomecli) select * from clientetemporario IMPORTANTE: Nos dois últimos exemplos, torna-se necessária a indicação dos nomes de campos que RECEBERÃO os registros filtrados da tabela clientetemporario, isto porque as tabelas não possuem a mesma quantidade de campos. Após a execução de um dos dois últimos exemplos, os registros serão gravados da seguinte forma, na tabela cliente: 1 joão da silva rua JK 127 (012) 3939-3021 2 alberson NULL NULL 3 wagner NULL NULL 4 julia NULL NULL 5 maria josé NULL NULL Repare que os registros de clientes com código maior ou igual a 2, não possuem endereços residenciais e telefones, isto porque na tabela clientetemporario estes dados não existem. Exemplo 4: Insert into datacomprasprodutos values (‘12/31/08’, 1, 1020) Este exemplo grava um produto de um cliente no dia 31/12/2008 na tabela datacomprasprodutos. Repare que a data, quando cadastrada, deve ser indicada no formato de padrão AMERICANO. 13.2 – OPERADORES RELACIONAIS, OPERADORES LÓGICOS e OPERADORES ARITIMÉTICOS DO SQL SERVER A seguir estão dispostos a relação dos operadores ARITIMÉTICOS, LÓGICOS E RELACIONAIS, mais utilizados na linguagem Transact-SQL. OPERADOR ARITMÉTICO UTILIDADE * Multiplicação + Soma / Divisão - Subtração % Módulo || Concatenação OPERADOR RELACIONAL UTILIDADE = Igual <> Diferente > Maior que < Menor que >= Maior ou igual <= Menor ou igual !< Não menor que !> Não maior que != Não igual Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 43 OPERADOR LÓGICO UTILIDADE Not Inverte o valor booleano And E Or Ou Between Entre Like Usado para encontrar padrões de strings IN Usado para verificar se conteúdodo campo possui algum valor estipulado 13.3 – COMANDO UPDATE (DML) Este comando é usado para alterar registros gravados numa tabela. Sintaxe: UPTADE <nome_tabela> SET <nome_campo> = <novo_valo> WHERE <critérios_para_alteração> Exemplo 1: Update cliente Set endcli = ‘nenhum’ O exemplo acima irá alterar os endereços de TODOS os clientes para ‘nenhum’, isto porque não foram definidos critérios (CONDIÇÕES) para indicar quais os registros seriam alterados. Exemplo 2: Update cliente Set endcli = ‘Rua da morte’ Where codcli = 1 O exemplo acima irá alterar somente o endereço do cliente que possui o código igual a 1, para ‘Rua da morte’. Exemplo 3: Update cliente Set endcli = ‘Rua JK’ , telefonecli = ‘(012) – ‘ Where codcli = 1 O exemplo acima altera o endereço do cliente para ‘Rua JK’ e o telefone do cliente para ‘(012) – ‘, do cliente cujo código é 1. Os operadores Relacionais, Lógicos e Aritméticos que podem ser utilizados em instruções Transact- SQL estão relacionados no item 13.2 desta apostila. 13.3 – COMANDO DELETE (DML) Este comando é usado para excluir REGISTROS de uma tabela. Sintaxe: Delete from <nome_tabela> Where <condição_critérios_exclusão> Exemplo 1: Delete from produtos Where nomeproduto like ‘a%’ No exemplo acima serão excluídos da tabela produtos, todos os produtos cujo nome inicie com a letra “a”. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 44 Perceba que não foi informado nenhum nome de campo após o comando delete, antes da cláusula “from”, pois, o comando delete exclui o registro TODO e não somente o conteúdo de um campo da tabela. Poderemos usar outros CURINGAS juntamente com o operador LIKE, vejam alguns exemplos: Nomecli Like ‘a[ul]ber[sc]on%’ Filtra registros que nomecli inciem com a letra “a”; o segundo dígito seja “u” OU “l”; a partir do 3º dígito contenha a seqüência “ber”; 6º dígito seja “s” OU “c”; 7º e o 8º dígito sejam “on” e que terminem com quaisquer outros caracteres. Nomecli like ‘%e%’ Filtra registros que nomecli contenha a letra “e” disposta em qualquer local da string gravada Nomecli like ‘%e’ Filtra registros que nomecli termine com a letra “e” Nomecli like ‘e%’ Filtra registros que nomecli inicie com a letra “e” Nomecli like ‘[a – c]%’ Filtra registros que nomecli inicie com qualquer caractere entre as letras “a” e “c” Nomecli like ’joão’ Filtra registros que nomecli seja EXATAMENTE igual a “joão”, pois o curinga % não foi utilizado na sintaxe. É bom dizer que o operador like pode ser usado em qualquer instrução SQL QUE POSSUA A CLÁUSULA WHERE e que o campo usado para filtro SEJA DO TIPO CHAR ou VARCHAR. 13.5 – COMANDO SELECT (DQL) Este comando é um dos comandos mais utilizados no SQL, pois é usado para filtrar registros de uma ou várias tabelas provendo com isso a criação de uma nova tabela temporária na memória do computador. Sintaxe 1 : Select <campo1> , .... , <campoN> From <nome_tabela1> , .... , <nome_tabelaN> Where <critérios_filtros_registros> Exemplo 1: Select * from cliente Mostrará codigo, nome, endereço e telefone de todos os clientes cadastrados. O “*”substitui o nome de todos os campos no exemplo acima. Pelo fato do exemplo não conter cláusula WHERE, todos os registros serão mostrados para o usuário. Exemplo 2: Select nomecli, codcli from cliente where endcli = ‘Rua JK’ and telefonecli like ‘012%’ O exemplo acima exibirá nome(s) e código(s) do(s) cliente(s) que resida(am) na ‘Rua JK’ E QUE O telefone inicie com ‘012’. A ordem de exibição dos campos será nome do cliente e código do cliente. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 45 14 – EXEMPLOS GERAIS DE INSTRUÇÕES TRANSACT-SQL Para os novos exemplos de instruções SQL, iremos usar as seguintes tabelas relacionadas: Figura 52 14.1 –PARÂMETRO DISTINCT Este parâmetro é usado com o comando SELECT. O distinct retorna somente registros diferentes de uma coluna da tabela. Exemplo: Select distinct datavenda from vendas O exemplo acima mostrará somente data de vendas DIFERENTES, gravadas na tabela vendas. Lembre-se que várias vendas são realizadas numa data. Se o distinct não fosse usado, as datas de vendas apareceriam várias vezes, pois corresponderiam as vendas efetuadas para cada dia. 14.2 – PARÂMETRO ORDER BY Este parâmetro é usado com o comando SELECT para ordenar os registros filtrados. Podemos ordenar os registros por vários campos filtrados de maneira ascendente (crescente) ou descendente (decrescente). Exemplo: Select * from cliente where idadecli between 15 and 21 order by idadecli asc, nomecli desc O exemplo acima irá mostrar todos os dados do cliente que possui idade entre 15 e 21 anos (BETWEEN). Neste caso, os registros filtrados serão ordenados primeiramente pela idade, de forma crescente. Caso existam clientes com a mesma idade, os registros serão ordenados pelo nome do cliente, de forma decrescente. 14.3 – UNION (UNINDO CAMPOS DE VÁRIAS TABELAS NUMA CONSULTA – ASSOCIAÇÃO INTERNA) Usando o comando SELECT podemos filtrar vários dados de diversas tabelas, usando somente uma instrução SELECT para filtrar registros. Banco de Dados UNIVAP - CTI Professor: Alberson Wander Página: 46 Exemplo 1: Select CLIENTE.nomecli, PRODUTOSVENDIDOS.*, VENDAS.*, PRODUTOS.nomeproduto From cliente, produtosvendidos, vendas, produtos Where VENDAS.nvenda = 1 AND VENDAS.codcliente = CLIENTE.codcli AND PRODUTOSVENDIDOS.nvenda = VENDAS.nvenda AND PRODUTOSVENDIDOS.codproduto = PRODUTOS.codproduto Observe o exemplo acima: 1) Os campos exibidos serão: Nome do cliente, gravado na tabela cliente; Todos os campos da tabela produtos vendidos; Todos os campos da tabela vendas; Nome do produto gravado na tabela produtos; 2) Na cláusula FROM, perceba que os registros serão filtrados das tabelas cliente, produtosvendidos, vendas e produtos; 3) O primeiro critério de filtro é que o número da venda seja 1. 4) Os trechos da sintaxe exposta em VERMELHO indicam os relacionamentos entre as tabelas. Isto deve ser feito para que sejam filtrados os registros EQUIVALENTES nas tabelas relacionadas. Só serão filtrados registros se, E SOMENTE SE: a. existir a venda número 1 cadastrada; b. existir o registro do cliente que comprou na venda 1; c. existir pelo menos UM produto vendido (produtosvendidos) na venda 1; d. existirem na tabela produtos, os mesmos código de produtos cadastrados em produtosvendidos referente à venda 1. Exemplo 2: Select CLIENTE.nomecli, VENDAS.codcliente, VENDAS.nvenda From cliente, vendas Where VENDAS.nvenda = 1 AND VENDAS.codcliente = CLIENTE.codcli Observe no exemplo acima: 1) Os campos exibidos serão: o nome do cliente, gravado na tabela CLIENTE; o código do cliente e o número da venda, gravados na tabela VENDAS; 2) Na cláusula FROM são indicados os nomes das tabelas de onde os registros serão filtrados; 3) O trecho da sintaxe exposta em VERMELHO indica o relacionamento
Compartilhar