Você está na página 1de 12

CAPTULO 6: AULA 6

Banco de Dados Relacionais:


Os Bancos de Dados Relacionais possuem vantagens significativas com relao a outros tipos de armazenamento: Acesso mais rpido aos dados Fcil consulta Mecanismos pr-definidos para acesso concorrente Acessos aleatrios aos dados Sistemas de privilgio

TABELAS: So agrupamentos de dados de objetos especficos. COLUNAS: Tem um nome nico, dados diferentes e tipos de dados associados a cada uma. LINHAS: So registros que so inseridos na tabelas. VALORES: So os valores de um registro para um coluna especfica. CHAVES: So os identificadores de um registro. Podemos ter uma chave primria (identificador nico) e uma chave estrangeira (identifica o relacionamento entre tabelas). RELACIONAMENTOS: So as relaes existentes entre as tabelas de um banco e so determinados pela chave estrangeira. Podem ser: 1 para 1: Um registro numa tabela possui um nico registro associado a ela numa outra tabela e vice-versa. 1 para N: Um registro numa tabela possui um nico registro associado a ela numa outra tabela, porm o registro da outra tabela pode conter vrios outros associados a ele. N para N: Um registro numa tabela possui vrios registros associados a ela numa outra tabela e vice-versa.

Dicas para a construo de Banco de Dados:


Pense nos objetos do mundo real que voc est modelando. Evitar armazenar dados redundantes. Cada coluna deve armazenar apenas um valor Escolha sempre chaves nicas. Pense nas perguntas que deseja fazer ao BD. Evite BD com muitos atributos vazios

Criando Banco de dados na Web:


Neste captulo iremos utilizar como exemplo uma aplicao on-line de uma livraria. Eis o esquema para a aplicao: Customers(CustomerID, Name, Address, City) Orders(OrderID, CustomerID, Amount, Date) Books(ISBN, Author, Title, Price) Order_items(OrderID, ISBN, Quantity)

Book_Reviews(ISBN, Reviews)

Criando o Banco de Dados


Para criar um banco de dados, faz-se necessrio apenas a aplicao de um comando simples no prompt do MySQL. O comando o CREATE DATABASE passando como parmetroo nome desejado para o banco. No caso do nosso exemplo, o banco a ser criado o books.
CREATE DATABASE books;

Usurios e privilgios no MySQL


Um sistema geralmente possui mais de um tipo de usurio no que diz respeito ao acesso ao banco. Cada tipo possura um conjunto diferente de permisses. O usurio root o utilizado nas tarefas administrativas do banco, por possuir permisso geral no banco. O princpio do menor privilgio pode ser aplicado para melhorar a segurana de qualquer aplicao. Nele, um usurio (ou processo) deve ter o nvel mais baixo de privilgio exigido a fim de realizar a tarefa atribuda a ele. Para trabalhar com o controle de permisses de usurios, existem 2 comandos no MySQL que tratam disso. Os comandos GRANT e REVOKE so utilizados para fornecer e retirar direitos do usurio em quatro nveis de privilgio: Global Banco de Dados Tabela Coluna A forma geral do comando GRANT :
GRANT privilegios [Colunas] ON item TO nome_do_usuario [IDENTIFIED BY 'senha'] [WITH GRANT OPTION]

As clusulas entre cochetes so opcionais. O privilgio deve ser uma lista de privilgios separados por vrgulas. O marcador colunas serve ara especificar privilgios especficos para colunas. O marcador item o banco de dados ou tabela a que os novos privilgios sero aplicados. Voc pode conceder privilgios em todos os bancos especificando *.* como o item. Isso chamado de concesso de privilgios globais. O nome_do_usuario deve ser o nome com o qual voc deseja que o usurio efetue um logon no MySQL. A senha deve ser a senha com a qual voc deseja que o usurio efetue o login. A expresso WITH GRANT OPTION, se especificada, premite que o usurio especificado conceda os prprios privilgios. Os privilgios so armazenados em quatro tabelas de sistema, no banco de dados chamado mysql. Essas quatro tabelas so mysql.user, mysql.db, mysql.tables_priv e mysql.collumns_priv e se relacionam diretamente com os quatro nveis de privilgio mencionados antes. TIPOS DE PRIVILGIOS:

Existem 3 tipos de privilgios bsicos no MySQL: privilgios adequados para conceder a usurios regulares, privilgios adequados para administradores e dois privilgios especiais. Os privilgios para usurios regulares se relacionam diretamente aos tipos de comandos especficos de SQL e se um usurio tem ou no permisso de execut-los. Privilgio SELECT INSERT Aplica-se a Descrio

Tabelas, colunas Permite que os usurios selecionem linhas de tabelas. Tabelas, colunas Permite que os usurios insiram novas linhas em tabelas.

UPDATE Tabelas, colunas Permite que os usurios modifiquem valores em linhas existentes de tabela. DELETE Tabelas Permite que os usurios excluam linhas existentes de tabelas Permite que os usurios criem e excluam ndices em tabelas Permite que os usurios alterem a estrutura de tabelas existentes.

INDEX

Tabelas

ALTER

Tabelas

CREATE Banco de dados, Permite que os usurios criem novos bancos de dados ou tabelas tabelas. DROP Banco de dados, Permite que os usurios excluam bancos de dados ou tabelas tabelas

Table 1: Privilgios para usurios O COMANDO REVOKE: Este comando utilizado para revogar os privilgios de um usurio:
REVOKE privilegios[(colunas)] ON item FROM nome_usuario

Neste momento o banco possui um usurio root sem senha.

Utilizando o Banco de Dados:


A primeira ao necessria ao efetuar logon especificar qual o banco de dados voc quer utilizar:
USE nomedodb;

Criando tabelas de Banco de Dados:


O prximo passo na configurao do banco de dados realmente criar as tabelas utilizando o comando CREATE TABLE.
CREATE TABLE nomedatabela(colunas);

Para aplicao da livraria temos o seguinte script de criao das tabelas:


CREATE TABLE cutomers ( customerid int unsigned not null auto_increment primary key, name char(30) not null, address char(40) not null, city char(20) not null );

CREATE TABLE orders ( orderid int unsigned not null auto_increment primary key, customerid int unsigned not null, amount float(6,2), date date not null );

CREATE TABLE books ( isbn char(13) not null primary key, author char(30), title char(60), price float(4,2) );

CREATE TABLE order_items ( orderid int unsigned not null, isbn char(13) not null, quantity tinyint unsigned, primary key(orderid,isbn)

);

CREATE TABLE book_reviews ( isbn char(13) not null primary key, review text );

SIGNIFICADOS DAS PALAVRAS: NOT NULL: Significa que todas as linhas na tabela devem ter um valor nesse atributo. AUTO_INCREMENT: Isso significa que se deixarmos aquele camppo em branco ao inserir linhas na tabela, o MySQL automaticamente gerar um valor identificador nico. O valor ser maior que o valor mximo j existente na coluna. PRIMARY_KEY: Especifica que essa coluna a chave primria para tabela. As entradas nessa coluna precisam ser nicas. S pode ser usado quando a tabela possui uma nica chave primria. A construo do PRIMARY JEY na tabela ORDER_ITEMS a alternativa quando se tem mais duma chave primria. UNSIGNED: Significa que um tipo inteiro s pode ter um zero ou valor positivo.

Inserindo dados no Banco de Dados:


A instruo INSERT utilizada para inserir dados em tabelas do banco. A forma normal :
INSERT [INTO] tabela [(coluna1, coluna2, coluna3, ...)] VALUES (valor1, valor2, valor3, ...);

Podemos usar como exemplo insero de um registro na tabela CUSTOMERS:


INSERT INTO customers VALUES (NULL, "Julie Smith", "25 Oak Street", "Airport West");

Neste exemplo no especificamos quais colunas iramos inserir registros. Isto significa que todas as colunas devem apresentar valores associados. Por isso, tivemos que inserir o valor NULL para a coluna CUSTOMERID. Se quisermos especificar quais colunas devem ser inseridas e em qual ordem seguimos o exemplo abaixo:
INSERT INTO customers (name, city) VALUES ("Melissa Jones", "Nar Nar Goon North");

Vamos agora inserir uma poro de registros no nosso banco:


INSERT INTO customers VALUES (NULL, "Julie Smith", "25 Oak Street", "Airport West"), (NULL, "Alan Wong", "1/47 Haines Avenue", "Box Hill"),

(NULL, "Michelle Arthur", "357 North Road", "Yarraville");

INSERT INTO orders VALUES (NULL, 3, 69.98, "2000-04-02"), (NULL, 1, 49.99, "2000-04-15"), (NULL, 2, 74.98, "2000-04-19"), (NULL, 3, 24.99, "2000-05-01");

INSERT INTO books VALUES ("0-672-31697-8", "Michael Morgan", "Java", 34.99), ("0-672-31745-1", "Thomas Down", "Debian", 24.99), ("0-672-31509-2", "Pruit, et al.", "GIMP", 24.99), ("0-672-31769-9", "Thomas Schenk", "OpenLinux", 49.99);

INSERT INTO order_items VALUES (1, "0-672-31697-8", 2), (2, "0-672-31769-9", 1), (3, "0-672-31769-9", 1), (3, "0-672-31509-2", 1), (4, "0-672-31745-1", 3);

INSERT INTO book_reviews VALUES ("0-672-31697-8", "O livro um bom suporte para a tecnologia Java");

Recuperando dados no Banco de Dados:


A instruo SELECT utilizada para recuperar dados de um banco selecionando linhas que correspondem ao critrio especificado de uma tabela. H uma grande quantidade de opes e maneiras diferentes de se fazer uma consulta ao BD. A forma bsica do SELECT :
SELECT items FROM tabelas [ WHERE condio ]

[ GROUP BY tipo_de_grupo ] [ HAVING definio_de_where ] [ ORDER BY tipo_de_pedido ] [ LIMIT critrios_de_limite ]

Cada consulta ser analizada separadamente, mas vale a pena realizar duas consultas simples para verificar o funcionamento do comando. A primeira sero especificadas as colunas que se deseja selecionar e na segunda ser utilizado o * que representa que todas as colunas da tabela sero selecionadas.
SELECT name, city FROM customers; SELECT * FROM order_items;

Para acessar um subconjunto de linhas em uma tabela, precisamos especificar alguns critrios de seleo usando a clusula WHERE.
SELECT * FROM orders WHERE customerid = 3;

Neste exemplo, o comano ir selecionar todas as colunas da tabela pedidos onde somente as linhas com um ID de 3. Existe uma srie de operadores de comparao para clusulas WHERE, confome o especificado na tabela abaixo. Operador > < >= Nome Maior que Menor que Exemplo Amount > 60.00 Amount < 60.00 Descrio Testa se o valor maior que outro Testa se o valor menor que outro

Maior ou igual Amount>=60.00 Testa se o valor maior ou igual ao outro. Menor igual Diferente ou Amount <= 60.00 Testa se o valor menor ou igual ao outro. Quantify != 0 Testa se um valor diferente do outro.

<-

!= ou <> IS NOT NULL

Address is not Testa se o canpo contm um valor. null

Operador IS NULL

Nome

Exemplo Address is null

Descrio Testa se o campo no contm um valor.

BETWEEN

Amount between Testa se um valor maior ou igual a 0 and 60.00 um e menor que outro. City in (So Testa se um valor est em um Paulo, Aracaju) conjunto particular. City not in (So Testa se um valor no est em um Paulo, Aracaju) conjunto particular. Correspondn Name like (Fred Verifica se um valor corresponde a um cia de padro %) padro utilizando correspondncia de padro.

IN

NOT IN

LIKE

RECUPERANDO DADOS DE DIVERSAS TABELAS: Frequentemente faz-se necessrio realizar consultas em vrias tabelas ao mesmo tempo. Para tanto, voc deve realizar uma operao juno ou JOIN. Isso significa simplesmente unir duas ou mais tabelas para seguir os relacionamentos entre os dados. Existem vrios tipos de junes. O primeiro tipo o INNER JOIN que pode ou no possuir uma construo prpria para esta juno. A operao de INNER JOIN significa: Aceite as tabelas listadas e faa uma tabela grande. A tabela grande deve ter uma linha para cada possvel combinao de linhas de cada uma das tabelas listadas, quer isso faa sentido ou no. No exemplo:
SELECT orders.orderid, orders.amount, orders.date FROM customers, orders WHERE customers.cname = 'Julie Smith' AND customers.cutomerid = orders.customerid;

Neste caso, obtemos uma tabela, que tem cada linha da tabela Customers correspondida a cada linha da tabela Orders, independentemente de um cliente particular ter feito um pedido particular. RECUPERANDO DADOS EM UMA ORDEM PARTICULAR Se quiser exibir linhas recuperadas por uma consulta em uma ordem particular, voc pode utilizar a clasula ORDER BY da instruo SELECT.
SELECT name, address FROM customers ORDER BY name;

Aps o nome da ou das colunas que se deja fazer a ordenao, pode ser indicado se essa ordeno ascendente (ASC) ou descendente (DESC). AGRUPANDO E AGREGANDO DADOS: O MySQL possui um conjunto de funes agregadas que aumenta as possibilidades de consultas a serem realizadas. Estas funes podem ser aplicadas a uma tabela como a um total ou grupos de dados dentro de uma tabela. Nome AVG(coluna) COUNT(itens) Descrio Mdia de valores na coluna especificada. Se voc especificar uma coluna, essa funo fornecer o nmero de valores no-NULL nessa coluna. Se adicionar a palavra DISTINCT na frente do nome de coluna, voc obter uma contagem de valores distintos somente nessa coluna. O valor mnimo na coluna especificada. O valor mximo na coluna especificada. Desvio padro dos valores na coluna especificada. Soma de valores na coluna especificada.

MIN(coluna) MAX(coluna) STD(coluna) SUM(coluna)


SELECT avg(amount) FROM orders;

A fim de obter informaes mais detalhadas, podemos utilizar a clusula GROUP BY. Isso permite visualizar o total mdio de pedidos por grupo por exemplo, por nmero de cliente.
SELECT customeridm,avg(amount) FROM orders GROUP BY customerid; SELECT customeridm,avg(amount) FROM orders GROUP BY customerid HAVING avg(amount) > 50;

Atualizando registros no Banco de Dados:

A forma normal para alterao de dados usando a instruo UPDATE :


UPDATE nomedatabela SET coluna1=expressao1, coluna2=expressao2, ... [ WHERE condicao] [ LIMIT numero ]

A idia bsica atualizar a tabela chamada nomedatabela, configurando cada uma das colunas chamadas como expresso apropriada. Voc pode limitar UPDATE para linhas particulares com uma clusula WHERE e limitar o nmero total de linhas para afetar com uma clusula LIMIT. EXEMPLOS: 1) Se quisermos aumentar 10% do preo de todos livros:
UPDATE books SET price = price*1.1;

2) Se quisermos alterar uma nica linha, por exemplo, atualizar um endereo do cliente:
UPDATE customers SET address = '250 Olsens Road' WHERE cutomerid = 4;

Excluindo registros do Banco de Dados:


Excluir linhas do banco de dados muito simples. s aplicar a instruo DELETE abaixo:
DELETE FROM tabela [ WHERE condicao ] [ LIMIT numero ]

SAIBA MAIS sobre SQL e MySQL: www.ansi.org e www.mysql.com

Prtica 1(exerccios)
Crie um BD com nome Clinica;

Crie as seguintes tabelas neste BD, considerando que os atributos sublinhados so chaves primrias e os em itlico so chaves estrangeiras: Ambulatorios: nroa (int), andar (numeric(3)) (no nulo), capacidade (smallint) Medicos: codm (int), nome (varchar(40)) (no nulo), idade (smallint) (no nulo), especialidade (char(20)), CPF (numeric(11)) (nico), cidade (varchar(30)), nroa (int) Pacientes: codp (int), nome (varchar(40)) (no nulo), idade (smallint) (no nulo), cidade (char(30)), CPF (numeric(11)) (nico), doenca (varchar(40)) (no nulo) Funcionarios: codf (int), nome (varchar(40)) (no nulo), idade (smallint), CPF (numeric(11)) (nico), cidade (varchar(30)), salario (numeric(10)), cargo (varchar(20)) 5. Consultas: codm (int), codp (int), data (date), hora (time); Crie a coluna nroa (int) na tabela Funcionrios; Crie os seguintes ndices: Mdicos: CPF (nico), nroa; Pacientes: doena;

Remover o ndice doena em Pacientes; Remover as colunas cargo e nroa da tabela de Funcionrios; Povoar as tabelas conforme o prximo Slide.

Realizar as seguintes atualizaes no BD:

O paciente Paulo mudou-se para Ilhota; A consulta do mdico 1 com o paciente 4 passou para s 12:00 horas do dia 4 de Julho de 2006; A paciente Ana fez aniversrio e sua doena agora cncer; A consulta do mdico Pedro com o paciente Carlos passou para uma hora e meia depois; O funcionrio Carlos deixou a clnica; As consultas marcadas aps as 19 horas foram canceladas; Os pacientes com cncer ou idade inferior a 10 anos deixaram a clnica; Os mdicos que residem em Baguau e Palhoa deixaram a clnica.

Você também pode gostar