bases de dados - te orico/pr aticaspedro/lectivos/basesdados/apontamentosprati... · mysql |...
TRANSCRIPT
Bases de Dados - Teorico/Praticas(2018/10/29 (v595))
Pedro Quaresma
Departamento de MatematicaUniversidade de Coimbra
2018/2019
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2018/10/29 (v595)) 2018/2019 1 / 55
MySQL — Instalacao
Linux — LAMPI mysql-server — serverI mysql-client — command-line clientI mysql-workbench — GUI clientI php-mysql — MySQL module for PHP (≥ 7.0)I + dependencias (Apache2, PHP, . . . )
MS-Windows — WAMPI http://www.easyphp.org/ — EasyPHP
OU (exclusivo)I http://www.wampserver.com/en/ — WampServer
Para as todas as plataformas — MySQLI http://dev.mysql.com/downloads/I MySQL Community ServerI MySQL WorkbenchI MySQL Utilities
https://en.wikipedia.org/wiki/List_of_Apache-MySQL-PHP_packages
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 2 / 55
MySQL — Servidor/Grupos de TrabalhoCada grupo tem uma conta em �rena4.mat.uc.pt�, bdN, e tempermissoes para criar bases de dados cujos nomes tem de(obrigatoriamente) ter como prefixo o nome do grupo bdN....
/home/users% mysql -u bd01 -p -h rena4.mat.uc.pt
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 5337
Server version: 5.0.45 SUSE MySQL RPM
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
mysql>
show databases;
+-----------+
| Database |
+-----------+
| bd01Proj1 |
+-----------+
1 row in set (0.00 sec)
mysql>
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 3 / 55
MySQL — Meta-comandosmysql — interpretador de linha de comando ($ man mysql)
$ mysql -p -u <nome utilizador> -h <nome de servidor>
a opcao -p e de �password�.
use/connect <nome bd> — estabelece a ligacao a uma base de dados.
show databases/tables — mostra as bases de dados/tabelas disponıveis.
describe <nome tabela> — mostra a estrutura interna de uma tabela.
source <nome de ficheiro> — carrega um ficheiro e (tenta) executa oscomandos SQL nele contidos.
quit — sai do interpretador.
Um comando util e o comando mysqldump o qual permite fazer copias deseguranca das bases de dados, por exemplo:
$ mysqldump -p --databases bd01projecto1 > bd01Projecto1.sql
cria o ficheiro �bd01Projecto1.sql� no qual estao todos os comandos SQLnecessarios para (re)criar a base de dados �bd01Projecto1�.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 4 / 55
Linguagem de Definicao de Dados (DDL)
Linguagem de Definicao de Dados (DDL) — Linguagem para especificar ainformacao acerca de cada relacao, incluindo:
O esquema de cada relacao.
O domınio de valores associados com cada atributo.
Restricoes de integridade
O conjunto de ındices a manter para cada relacao.
Informacao de seguranca e autorizacao para cada relacao.
As estruturas de armazenamento fısico em disco de cada relacao.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 5 / 55
Criacao de Bases Dados/Tabelas (Relacoes)
Instrucao CREATE DATABASE <nome da bd>, cria uma base dedados com o nome escolhido.
Instrucao:CREATE TABLE <nome da tabela> (
<campo 1 tipo 1>,...,
<campo n tipo n>)cria a tabela (relacao).
Exemplo:
CREATE TABLE Branch( branchName char ( 1 5 ) NOT NULL,b r a n c h C i t y char ( 3 0 ) ,a s s e t s i n t e g e r )
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 6 / 55
Tipos em SQL
char(n). Cadeia de caracteres de comprimento fixo n.
varchar(n). Cadeia de caracteres de comprimento variavel, com omaximo n especificado pelo utilizador.
int. inteiro (um subconjunto finito dos inteiros, dependente damaquina).
smallint. Inteiro pequeno (um subconjunto do tipo int).
numeric(p,d). Numero de vırgula fixa, com precisao de p dıgitos ecom n casas decimais.
real, double precision. Numeros de vırgula flutuante, comprecisao dependente da maquina.
float(n). Numero de vırgula flutuante, com um mınimo de precisaode n dıgitos.
Os valores nulos sao permitidos em todos os tipos de dados. Adeclaracao de um atributo como not null proıbe os valores nulospara esse atributo.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 7 / 55
Tipos em SQL
date. datas, contendo um ano com (4 dıgitos), mes e diaI E.g. date 2001-7-27
time. Tempo (diario), em horas, minutos e segundos.I E.g. time 09:00:30 time 09:00:30.75
timestamp: data mais horaI E.g. timestamp 2001-7-27 09:00:30.75
Interval: perıodo de tempoI E.g. Interval 1 dayI A subtraccao de dois valores de date/time/timestamp devolve um
intervaloI Os valores de intervalos podem ser adicionados a valores de
date/time/timestamp
Pode-se extrair campos do valor date/time/timestampI E.g. extract (year from SYSDATE)
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 8 / 55
Alteracao de Tabelas (Relacoes)
Instrucao ALTER TABLE — a instrucao alter table e utilizada paramodificar o esquema, ou as restricoes sobre relacoes ja existente.
Para adicionar novos atributos:
ALTER TABLE r ADD A D
Todos os tuplos existentes ficam com null no novo atributo.
Para eliminar um atributo:
ALTER TABLE r DROP A
em que A e o nome de um atributo na relacao r.
Para modificar um atributo:
ALTER TABLE r MODIFY A D
em que A e o nome do atributo a adicionar a relacao r e D o domınio de A.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 9 / 55
Destruicao de Bases Dados/Tabelas (Relacoes)
Instrucao DROP DATABASE <nome da bd>, apaga a base de dadoscom o nome escolhido.
Instrucao DROP TABLE <nome da tabela>, apaga a tabela com onome escolhido (da base de dados corrente).
A especificacao completa destes comandos em MySQL pode ser obtida nomanual de referencia on-line (http://dev.mysql.com/doc/).
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 10 / 55
Bases de Dados e Paginas da Rede — Porque?
Bases de Dados Informacao:
Banca: todas as transaccoes e movimentos;Companhias aereas: reservas, horarios;Universidades: inscricoes, notas;Vendas: clientes, produtos, compras;Sistema de gestao de artigos numa conferencia/revista;lojas �on-line�;...
Paginas da Rede Disseminacao de Informacao:
Acesso Global (geografico);Acesso Generalizado:
I rede — larga cobertura a nıvel mundial;I navegadores — total.
Interface uniforme e facil de usar/programar.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 11 / 55
Bases de Dados e Paginas da Rede — Como?
Linguagem de Programacao
Ligacao a base de dados:I −→ SQL;I ←− estruturas de dados de transferencia.
Ligacao a Pagina de Rede:I −→ escrita de ficheiros HTML;I ←− formularios HTML + estruturas de dados de
transferencia.
entre outras aproximacoes possıveis.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 12 / 55
Bases de Dados e Paginas da Rede — Como?
Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).
HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.
PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.
MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).
Solucao possıvel em: Linux; MacOS; MS-Windows; . . .
Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55
Bases de Dados e Paginas da Rede — Como?
Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).
HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.
PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.
MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).
Solucao possıvel em: Linux; MacOS; MS-Windows; . . .
Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55
Bases de Dados e Paginas da Rede — Como?
Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).
HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.
PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.
MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).
Solucao possıvel em: Linux; MacOS; MS-Windows; . . .
Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55
Bases de Dados e Paginas da Rede — Como?
Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).
HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.
PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.
MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).
Solucao possıvel em: Linux; MacOS; MS-Windows; . . .
Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55
Bases de Dados e Paginas da Rede — Como?
Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).
HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.
PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.
MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).
Solucao possıvel em: Linux; MacOS; MS-Windows; . . .
Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55
Apache
O programa Apache e o servidor de paginas �Web�.
Responde aos pedidos dos clientes.
Trata das questoes de seguranca inerentes a um servico �publico�.
Tem como clientes os Navegadores com os quais comunica.
Interpreta (se configurado para tal) a linguagem PHP, assim comooutras linguagens �externas�.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 14 / 55
Apache — Convencoes
Num sistema Linux/Unix cada utilizador pode criar uma pagina. Poromissao o directorio a usar deve-se designar por public html:
I ~nomeUtilizador/public html/index.html ← Sistema de ficheirosUnix.
I http://nomeDoDominio/~nomeUtilizador/index.html ← URL
Por omissao o ficheiro inicial designa-se por index.html
I ~nomeUtilizador/public html/index.html ← Sistema de ficheirosUnix.
I http://nomeDoDominio/~nomeUtilizador/ ← URL
Para que num ficheiro contendo codigo PHP este seja interpretado deforma correcta, a extensao do ficheiro tem de ser php.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 15 / 55
HTML — HyperText Markup Language
Uma coleccao de �meta-marcas� (�markup tags�) usadas para definir asvarias componentes de um texto da rede.
�HTML5 Tutorial� — http://www.w3schools.com/html/
�Getting started with HTML� Dave Raggett (2005) —https://www.w3.org/MarkUp/Guide/
Formularios I —https://www.w3.org/TR/html401/interact/forms.html
Formularios II —http://www.mat.uc.pt/~pedro/manuais/overview.html.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 16 / 55
HTML, (muito) Breve Introducao
O HTML (HyperText Markup Language) e uma meta-linguagem comcapacidade de referenciacao. Isto e, e uma linguagem que descreve umaoutra linguagem (a linguagem dos textos da rede) e que e capaz de incluir,num dado texto, referencias a outros textos.
Cabecalho (�head�) - contem dados gerais sobre o texto que sesegue.
Corpo (�body�) - contem a descricao do texto atraves de uma seriede comandos que lidam com as varias estruturas de um texto.
I O espacamento entre palavras e definido de forma dinamica. Umespaco no texto fonte, vale tanto como vinte espacos, o resultado finale o mesmo.
I Nao tem a nocao de linha, ou melhor de quebra de linha. As linhaspodem ter uma largura variavel.
I Nao tem a nocao de pagina de texto. O comprimento dos textos e, emteoria, infinito.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 17 / 55
HTML — Um exemplo
<html><head><TITLE>Um exemplo s i m p l e s de um t e x t o em HTML</TITLE>
</ head>
<body><H1>HTML &e a c u t e ; s i m p l e s de Aprender</H1>
<P>Exemplo de um par&a a c u t e ; g r a f o em HTML.Como podem v e r tem a marca ” tag ” , ”P” !
</P>
<P>Todos ( quase t o d o s ) os comandos HTML tem uma marca i n i c i a l euma marca f i n a l , sendo que e s s a s&o a c u t e ; d i f e r e da i n i c i a lp e l o p r e f i x o ”/” .
</P>
</ body></ html>
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 18 / 55
HTML, (muito) Breve Introducao
Como numa linguagem de programacao �normal� o uso daindentacao e opcional.
A utilizacao de editores especializados permite �esquecer� ospormenores da linguagem (nao podem ser usados processadores detexto).Geany, Emacs, ....
O HTML e uma linguagem sem a nocao de estado (�stateless�), istoe nao permite, entre outras, a comunicacao entre textos atraves deparametros.
A comunicacao entre texto e feita atraves do mecanismos deformularios
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 19 / 55
HTML, Marcas
HTML Marca o inıcio (e o fim) do texto HTML. Informa onavegador que o texto contem codigo HTML (a extensao.html tem o mesmo efeito).
HEAD Define o cabecalho - informacao generica sobre o documento.
TITLE Contem o tıtulo �exterior� do documento, isto e identifica otexto no contexto global (e uma das informacoes que o�google� procura).
BODY Define o corpo do documento, isto e, o documento que vaiser visıvel atraves do navegador. E aqui que se pode definir otexto atraves de um conjunto de marcas para as variasestruturas em que um texto e constituıdo.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 20 / 55
HTML, Marcas (continuacao)
Headings Cabecalhos, o HTML tem seis nıveis de cabecalhos: <Hx>,com x = 1, 2, . . . , 6.
Paragrafos Dado que o HTML nao tem a nocao de linha (nem deespacamento fixo), sempre que se quer comecar um novoparagrafo e necessario usar a marca <P>.
Listas O HTML suporta: listas nao ordenadas (numeradas); listasordenadas; e listas de definicoes.
Listas Nao Ordenadas: Marca de inıcio/fim de lista nao ordenada<UL>; marca de inıcio/fim de um elemento (�item�) da lista <LI>.
Listas Ordenadas: Marca de inıcio/fim de lista ordenada <OL>;marca de inıcio/fim de um elemento (�item�) da lista <LI>.
Listas de Definicoes: Marca de inıcio/fim de lista de definicoes<DL>; marca de inıcio/fim do tıtulo para o elemento a definir <DT>;marca de inıcio/fim da definicao <DD>;
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 21 / 55
HTML, Marcas: Tabelas
A marca <TABLE> delimita o espaco de construcao de uma tabela, isto e,um texto formatado em linhas, em que cada linha esta dividida emcolunas. Dentro desse espaco temos acesso as seguintes marcas:
Linhas cada linha da tabela e definida atraves da marca <TR>.
Cabecalhos (das colunas) podemos definir uma linha de cabecalhos (emgeral a linha de topo) usando a marca <TH>, uma por coluna.
Colunas dentro de cada linha podemos definir as colunas atraves damarca <TD>.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 22 / 55
HTML, Marcas (continuacao)
Texto pre-formatado <PRE> seccao de texto em que os espacos e asmudancas de linha sao significativas e em que o tipo de letrausado e de largura fixa. Optimo para incorporar descricoes deprogramas escritos numa dada linguagem de programacao.
Mudancas de linha pode-se forcar a mudanca de linha utilizando a marca<BR/>. Note-se que neste caso nao se esta perante um parde marcas, so existe a marca descrita.
Linhas Horizontais pode-se introduzir uma linha horizontal (a separar duasseccoes de texto), atraves da marca <HR/>. Esta e tambemuma marca isolada.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 23 / 55
HTML, Atributos
(± desactualizado, ver estilos em HTML5)Muitas das marcas no HTML podem ter a sua accao modificada atravesda utilizacao de atributos.
Por exemplo:
<P ALIGN="center"> permite definir um paragrafo centrado.
<TABLE border="1">, define uma tabela com uma bordadura detipo 1 (espessura mınima).
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 24 / 55
HTML, Formularios
Sendo que o HTML e uma linguagem sem a nocao de estado. . . como eque e possıvel comunicar entre paginas, e entre uma pagina e umprograma?
A resposta e dada pelas �Forms�.
<FORM ACTION="url" METHOD="POST"> ... </FORM>
Os formularios em HTML podem ser de dois tipos (Method=...):
GET os dados sao passados atraves do URL.
POST os dados sao passados atraves da construcao de uma paginapropria para o efeito.
Temos entao a marca <Form> a marcar o inıcio/fim de um formulario.Neste caso a especificacao dos atributos e essencial.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 25 / 55
HTML, Formularios
Atributos da marca �Form�
ACTION define o �URL� do programa que e suposto processar ainformacao recolhida pelo formulario.
METHOD �GET�, ou �POST�, define a forma como os valores saopassados.Qual dos metodos a utilizar vai depender da aplicacaopretendida, em geral o primeiro reserva-se para quando aquantidade de informacao a passar e pequena e/ou publica,ficando o outro metodo reservado para os outros casos.
No ambito dos formularios temos acesso as seguintes marcas:
INPUT um elemento simples (uma so linha de texto).
SELECT a escolha de um elemento entre varias opcoes.
TEXTAREA um elemento multi-linhas.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 26 / 55
HTML, Formularios, INPUT
< i n p u t type =’ text ’ name=’nomeVar ’ s i z e = ’80 ’ maxlength = ’80 ’>
Os atributos desta marca sao:
TYPE text; password; checkbox; radio; submit; reset.
NAME define (a exemplo de uma variavel) um identificador para oelemento que se esta a especificar.
VALUE pode ser usado para se definir o valor do elemento.
CHECKED especifica se um elemento do tipo checkbox ou radio estaactivado, por omissao.
SIZE tamanho fısico (em caracteres) do campo de entrada talcomo ele vai ser formatado.
MAXLENGTH tamanho maximo (em caracteres) do elemento de entrada.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 27 / 55
HTML, Formularios, SELECT
<SELECT NAME="lista-de-opc~oes">
<OPTION> Primeira opc~ao</OPTION>
...
<OPTION> opc~ao N</OPTION>
</SELECT>
Os atributos desta marca sao:
NAME define (a exemplo de uma variavel) um identificador para oelemento que se esta a especificar.
SIZE numero de elementos visıveis da lista de opcoes, para umadada posicao da barra de corrimento.
MULTIPLE se presente pode-se escolher varios elementos
Os atributos da marca �OPTION� sao:
SELECTED especifica que a opcao em causa e seleccionada por omissao.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 28 / 55
HTML, Formularios, TEXTAREA
<TEXTAREA NAME = ”nomeVar” ROWS=4 COLS=40>E s t e &e a c u t e ; o c o n t e&u a c u t e ; do por omiss&a t i l d e ; o
</TEXTAREA>
Os atributos desta marca sao:
NAME define (a exemplo de uma variavel) um identificador para oelemento que se esta a especificar.
ROWS o numero de linhas da janela de entrada.
COLS o numero de colunas (caracteres) da janela de entrada.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 29 / 55
PHP — Bibliografia
Manual do PHP (�on-line�)http://php.net/manual/pt_BR/index.php
Luke Welling & Laura Thomson, PHP and MySQL Web Development(Developer’s Library), 5th Edition, Addison-Wesley Professional,2016. ISBN-13: 978-0321833891 (new PHP 7 coverage)
. . . PHP (≥ 7.0)
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 30 / 55
PHP
Linguagem de programacao generica embutida em ficheiros HTML.
Um ficheiro de extensao php pode conter: HTML; marcas PHP;codigo PHP (entre um par de marcas PHP);
O Apache (ou outro programa que faca a gestao do servico) tem deestar configurado para interpretar o codigo PHP.
Os ficheiros que contem codigo PHP tem de ter a extensao php
Um exemplo de programa (exemplo.php).
<?phpecho ”<p>Ol&a a c u t e ; mundo</p>” ;
?>
O PHP e uma das mais populares linguagens para construcao de paginasdinamicas numa perspectiva de uma solucao servidor (todo oprocessamento e feito no servidor).O PHP providencia uma muito facil ligacao a bases de dados.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 31 / 55
PHP — Introducao
A sintaxe, do PHP e semelhante a linguagem C (assim como aspotencialidades).
VariaveisI sem declaracao explıcita, uma dada instrucao de atribuicao cria a
variavel, de um dado tipo, com um dado valor;I o valor, assim como o tipo de uma variavel pode ser mudado por uma
outra atribuicao posterior.I identificam-se pelo caracter $ inicial, por exemplo: $nome
TiposI Inteiros;I Reais;I Sequencias de caracteres;I Booleanas;I Tabelas;
A linguagem e �case sensitive�, ou seja maiusculas e minusculas saoconsideradas diferentes.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 32 / 55
PHP — Ambito das Variaveis
O PHP nao tem mecanismos (explıcitos) de comunicacao entre ficheiros,como tal o ambito de uma variavel esta sempre ligado ao ficheiro aonde foidefinida.
Entre ficheiros (sessoes Apache):
Variaveis Super Globais – sempre visıveis.
Num dado ficheiro:
Constantes – sempre visıveis.
Variaveis Globais – em todo o ficheiro excepto dentro das funcoes.
Variaveis declaradas dentro de uma funcao como estaticas, referem-seas variaveis com o mesmo nome, mas mantem o valor entrechamadas sucessivas.
Variaveis declaradas dentro de uma funcao sao locais a essa funcao.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 33 / 55
PHP
Algumas variaveis Super Globais
$ SERVER - tabela contendo as variaveis de ambiente do servidor;
$ SESSION - tabela contendo as variaveis de sessao;
$ GET - tabela contendo as variaveis de um formulario HTML emmodo �get�;
$ POST - tabela contendo as variaveis de um formulario HTML emmodo �post�;
Os operadores sao os usuais da linguagem C
As precedencia dos operadores sao tambem as usuais;
Os comentarios sao tambem os usuais.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 34 / 55
PHP — Estruturas de Controlo
Estruturas de Controlo
composicao sequencial;
atribuicao.
condicionais:I ifI if elseI elseifI switch
Ciclos:I whileI forI for eachI do ...while
Funcoes.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 35 / 55
PHP — Programacao ModularProgramacao modular - O PHP tem uma dupla personalidade:programacao imperativa classica; programacao orientada aos objectos.Nestas breves notas vou tratar so da primeira aproximacao.
Funcoes a sintaxe e semantica da declaracao de funcoes e similar a dalinguagem C;
function nome da funcao($arg1,$arg2,...,$argN);
Comunicacao entre funcoes a chamada de uma funcao e tambem identicaa da linguagem C;
nome da funcao(val1,val2,...,valN);
Alem dos argumentos a comunicacao pode tambem ser feitaatraves da utilizacao de variaveis globais.
Comunicacao entre modulos por modulos entenda-se ficheiros. Esta e facilde responder: nao e possıvel (a menos das variaveissuper-globais).
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 36 / 55
PHP — Comunicacao Entre Ficheiros
Comunicacao entre ficheiros: como foi dito anteriormente nao hamecanismos de comunicacao entre ficheiros, isto dado que o protocoloHTML nao tem a nocao de estado.Solucoes?
Formularios (POST ou GET).
Sessoes (com as respectivas variaveis de sessao).
Ficheiros auxiliares: e possıvel ler e escrever ficheiros
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 37 / 55
PHP & HTML
A entradas e saıdas na linguagem PHP sao sempre feitas atraves dalinguagem HTML:
Saıdas Os comandos usuais de visualizacao de uma linguagem deprogramacao estao presentes no PHP (sintaxe similar ao C),no entanto elas tem de ser pensadas como tendo um passointermedio que e o HTML
PHP
HTML
<p>Olá Mundo</p>
Olá Mundo
ecrã (Navegador)
C
ecrã
Olá Mundo
printf(’Olá Mundo’); printf(’<p>Olá Mundo</p>’);
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 38 / 55
PHP & HTML
Entradas a leitura de valores e feita somente atraves dos formulariosHTML
especificacao do ficheiro PHP que vai processar osdados do formulario (no formulario HTML):
<form action=’processa.php’ method=’post’>
Especificacao dos nomes dos campos que vao receber osvalores do formulario (no formulario HTML):
<input type=’text’ name=’nomedocampo’>
a �leitura� dos valores no PHP e feita atraves da matrizassociativa $ POST (ou $ GET) (no ficheiro PHP):
$nomeVariavel = $ POST[’nomedocampo’];
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 39 / 55
MySQL
Referencias — MySQL, paginas oficiais.
http://www.mysql.com/ — Pagina geral
http://dev.mysql.com/doc/ — �MySQL Documentation�
http://dev.mysql.com/doc/refman/5.7/en/ — Manual deReferencia.
�MySQL Workbench� — ferramenta graficas de administracao/utilizacao.
http://dev.mysql.com/downloads/tools/workbench/
Alguns dos comandos mais uteis na linha de comando:
use — seleccionar uma base de dados;
show databases/tables — mostrar as bases de dados/tabelasacessıveis;
describe <nome da tabela> — mostra a informacao respeitanteaos campos de uma dada tabela.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 40 / 55
MySQL
Uma base de dados de exemplo:
Avioes
matricula
nome
modelo
Marcas
modelo
lugares
autonomia
Pilotos
licencaPilotagem
nome
Voos
nVoo
partida
destino
data
hora
matricula
licencaPilotagem
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 41 / 55
PHP & MySQL
A ligacao entre o PHP e o MySQL e feita atraves de um conjunto defuncoes propria do PHP.
Ligacao ao Servidor MySQL funcao mysqli connect, argumentos:nomes do servidor, utilizador e senha de acesso.
@ $ligacao = mysqli connect($servidor,$utilizador,$senha,$basedados);
if (mysqli errno()) { // verifica a ligac~ao ao servidor
echo "<p>Erro: ligac~ao aos servidor n~ao possıvel</p>";
exit;
}
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 42 / 55
PHP & MySQL
Comandos SQL: coloca-se a pesquisa que se quer efectuar numavariavel do tipo �string�, e apos isso usa-se a funcao mysqli query,tendo como argumentos os comandos SQL e a ligacao.
I Obter elementos$sql = "SELECT correio electronico,utilizador,senha FROM pessoa";
$resultado = mysqli query($ligacao,$sql);
I Inserir elementos$sql = "INSERT INTO pessoa (correio electronico,utilizador,senha)
VALUES (’[email protected]’,’Ana’,’xpto’)";
$resultado = mysqli query($ligacao,$sql);
Obtencao dos Resultados: os resultados sao obtidos atraves devarias funcoes, entre elas temos mysqli fetch assoc que permiterecolher os resultados obtidos numa tabela associativa;
$linha = mysqli fetch assoc($resultado);
$utilizador = $linha[’utilizador’];
$senha = $linha[’senha’];
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 43 / 55
Exemplo Pratico 1
Dada a base de dados bdXProj2 (com x = 01, 02, . . .) construa:
formularios de entrada de valores para as varias tabelas.
uma pagina aonde se visualize o conteudo da tabela Voos.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 44 / 55
Exemplo Pratico — resolucao
1 Apache — convencoes — criacao da pagina pessoal (Linux):
1 criar o directorio public html
2 colocar as permissoes correctamente nesse directorio:F o directorio deve estar acessıvel para leitura para todos;F o caminho ate ao directorio tambem deve estar acessıvel (para leitura) para
todos.F todos os ficheiros no directorio public html devem ser acessıveis para leitura
para todos.
3 criar o ficheiro index.html, a �porta de entrada� para a pagina. Por exemplo:
<HTML><HEAD><TITLE>P r o j e c t o 2 − Grupo N</TITLE>
</HEAD><BODY><H2>P r o j e c t o 2 − Grupo N</H2>
<UL><LI>
<A HREF=” t r a b a l h o 2 . html ”>Traba lho 2 de Bases de Dados
</A></ LI>
</UL></BODY>
</HTML>
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 45 / 55
HTML & PHP
No ambito deste exemplo (de Base de Dados) os ficheiros HTML serao omais simples possıvel.Ficheiro de entrada do Exeplo, exemplo.html contendo uma lista naonumerada referenciando os dois pedidos:
um formulario de entrada de valores para a tabela pessoa.
uma pagina aonde se visualize o conteudo da tabela pessoa.
Por exemplo:
<BODY><H2>Exemplo de Bases de Dados</H2>
<UL><LI><A HREF=” v i s u a l i z a r . php”>V i s u a l i z e o c o n t e&u a c u t e ; do da t a b e l a</A>
</ LI><LI><A HREF=” i n s e r i r . html ”>I n t r o d u z i r novos v a l o r e s na t a b e l a</A>
</ LI></UL>
</BODY>
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 46 / 55
HTML & PHP & MySQL
A ligacao com a Base de Dados (MySQL) e feita atraves do PHP.
1 Fazer a ligacao a Bases de Dados. Como este e uma tarefa que terade ser repetida de todas as vezes que se queira obter/colocarinformacao na base de dados, o melhor sera criar um ficheiro PHPseparado, so para essa tarefa, ligacao.php.
<?php$ u t i l i z a d o r B D = $ SESSION [ ’ u t i l i z a d o r B D ’ ] ;$senhaBD = $ SESSION [ ’ senhaBD ’ ] ;$ s e r v i d o r = $ SESSION [ ’ s e r v i d o r ’ ] ;$nomeBD = ” bd01exemplo ” ;
@ $ l i g a c a o = m y s q l i c o n n e c t ( $ s e r v i d o r , $ u t i l i z a d o r , $senha , $basedados ) ;
i f ( m y s q l i e r r n o ( ) ) { // v e r i f i c a a l i g a c a o ao s e r v i d o recho ”<p>E r r o : l i g a&c c e d i l ;& a t i l d e ; o ao SGBD</p>” ;e x i t ; // te rm ina de imed i a t o
}?>
Notar a utilizacao das variaveis de sessao.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 47 / 55
Ligacao com a Base de DadosPor questoes de seguranca a senha de ligacao a base de dados (entre outros) nao deveficar exposta num ficheiro com acesso publico.Solucao:
1 Colocar a informacao sensıvel num ficheiro a parte (.dados.php);
2 colocar esse ficheiro numa zona exterior ao directorio (publico) public html, eprotege-lo (˜/DadosBD);
3 Ir buscar esses valores atraves de variaveis de sessao.
<?php$ SESSION [ ’ u t i l i z a d o r B D ’ ]=”bdXX” ;$ SESSION [ ’ senhaBD ’ ]=”senhaBDXX” ;$ SESSION [ ’ s e r v i d o r ’ ]=” r e n a 4 . mat . uc . pt ” ;
?>
Depois e so uma questao de utilizar sessoes e, sempre que se queira efectuar a ligacao abase de dados, carregar (require) os ficheiros apropriados:
<?phps e s s i o n\ s t a r t ( ) ;. . .// Faz a l i g a c a o a base de dadosr e q u i r e o n c e ( ’ . . / . . / DadosBD / . dados . php ’ ) ;r e q u i r e ( ’ l i g a . php ’ ) ;. . .
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 48 / 55
HTML & PHP & MySQLPara o caso da visualizacao dos conteudos da base de dados.
2 Enviar as pesquisas e receber os resultados (visualizar.php):
1 fazer a ligacao;2 construir o comando (�query�) SQL;3 enviar o comando ao SGBD;4 receber os resultados;5 processar/vizualizar os resultados.
Para o caso da introducao de novos dados na base de dados.
2 Construir um Formulario HTML (inserir.html):
1 especificar qual e o ficheiro PHP que vai processar os dados;2 especificar os campos que vao receber os dados.
3 Enviar as pesquisas e receber os resultados (processaInserir.php):
1 fazer a ligacao;2 receber os dados do formulario;3 construir o comando (�query�) SQL;4 enviar o comando ao SGBD;5 mostrar os resultados da consulta.
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 49 / 55
HTML & PHP & MySQL — visualizar.php
<?phps e s s i o n s t a r t ( ) ;echo ”<body><H2>Exemplo de Bases de Dados − V i s u a l i z a r Dados</H2>” ;// Faz a l i g a c a o a Bases de Dadosr e q u i r e ( ” . . / . . / DadosBD / . dados . php” ) ;r e q u i r e ( ” l i g a c a o . php” ) ;// Con s t r o i o comando SQL$ s q l = ”SELECT c o r r e i o e l e c t r o n i c o , u t i l i z a d o r , senha
FROM p e s s o a ” ;
// Env ia o comando ao SGBD$ r e s u l t a d o = m y s q l i q u e r y ( $ l i g a c a o , $ s q l ) ;
// r e s u l t a d o num ve c t o r a s s o c i a t i v oecho ”<CENTER>\n” ;echo ”<TABLE BORDER=’2’>\n” ;echo ”<TR><TH>U t i l i z a d o r </TH><TH>Senha</TH></TR>\n” ;// Os i d e n t i f i c a d o r e s dos campos da mat r i z sao os nomes dos campos da t a b e l a da bdw h i l e ( $ l i n h a = m y s q l i f e t c h a s s o c ( $ r e s u l t a d o ) ) {
$ u t i l i z a d o r = $ l i n h a [ ’ u t i l i z a d o r ’ ] ;$senha = $ l i n h a [ ’ senha ’ ] ;$ c o r r e i o E = $ l i n h a [ ’ c o r r e i o e l e c t r o n i c o ’ ] ;echo ”<TR>\n” ;echo ”<TD>$ u t i l i z a d o r </TD><TD>$senha</TD><TD>$ c o r r e i o E </TD>\n” ;echo ”</TR>\n” ;
}echo ”</TABLE>\n” ;echo ”</CENTER>\n” ;
?>
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 50 / 55
HTML & PHP & MySQL — inserir.html
<h2>Exemplo de Bases de Dados − I n t r o d u z i r Dados</h2><form a c t i o n =’ p r o c e s s a I n s e r i r . php ’ method=’ post ’><c e n t e r><t a b l e width =’90\%’ b g c o l o r =’ s k y b l u e ’ b o r d e r = ’2 ’><t r><th width =’100\%’ c o l s p a n = ’4 ’ a l i g n =’ center ’><b>I n t r o d u z i r Dados na Tabela ” p e s s o a ”{}</b>
</ th></ t r><t r><td a l i g n =’ center ’><b>U t i l i z a d o r</b></ td><td a l i g n =’ center ’><i n p u t type =’ text ’ name=’ U t i l i z a d o r ’ s i z e = ’15 ’ maxlength = ’15 ’></ td><td a l i g n =’ center ’><b>Senha</b></ td><td a l i g n =’ l e f t ’><i n p u t type =’ text ’ name=’Senha ’ s i z e = ’40 ’ maxlength = ’40 ’></ td>
</ t r><t r><td a l i g n =’ center ’><b>C o r r e i o E l e c t r o n i c o</b></ td><td a l i g n =’ center ’ c o l s p a n = ’3 ’><i n p u t type =’ text ’ name=’ C o r r e i o E ’ s i z e = ’100 ’ maxlength = ’100 ’>
</ td></ t r><t r><td width=100\% c o l s p a n = ’4 ’ a l i g n =’ center ’><i n p u t type =’ submit ’ v a l u e =’ I n s e r e a Nova Informacao ’>
</ td></ t r>
</ t a b l e></ c e n t e r>
</ form>
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 51 / 55
HTML & PHP & MySQL — processaInserir.php
<?phps e s s i o n\ s t a r t ( ) ;
// Faz a l i g a c a o a Bases de Dadosr e q u i r e ( ” . . / . . / DadosBD / . dados . php” ) ;r e q u i r e ( ” l i g a c a o . php” ) ;
// Obtem os v a l o r e s do f o rmu l a r i o ( v a r i a v e l POST)$ c o r r e i o E = $ POST [ ’ C o r r e i o E ’ ] ;$ u t i l i z a d o r = $ POST [ ’ U t i l i z a d o r ’ ] ;$senha = $ POST [ ’ Senha ’ ] ;
// Con s t r o i o comando SQL$ s q l = ”INSERT INTO p e s s o a ( c o r r e i o E l e c t r o n i c o , u t i l i z a d o r , senha )
VALUES ( ’ $ c o r r e i o E ’ , ’ $ u t i l i z a d o r ’ , ’ $senha ’ ) ” ;
// Env ia o comando ao SGBD$ r e s u l t a d o = m y s q l i q u e r y ( $ l i g a c a o , $ s q l ) ;
i f ( $ r e s u l t a d o ) {echo ” I n t r o d u c a o de novos dados f e i t a com s u c e s s o .\n” ;echo ”<meta http−e q u i v =’ r e f r e s h ’ c o n t e n t = ’2; u r l=exemplo . html ’ />” ;
}e l s e {
echo ” E r r o − a i n t r o d u c a o de novos dados f a l h o u\n” ;echo ”{}<meta http−e q u i v =’ r e f r e s h ’ c o n t e n t = ’2; u r l=exemplo . html ’ />” ;
}?>
Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 52 / 55
Operacao de Divisao
PropriedadeI Seja q = r ÷ sI Entao q e a maior relacao satisfazendo q × s ⊆ r .
Definicao em termos de operacoes basicas da algebra rel.Sejam r(R) e s(S) relacoes, com S ⊂ R
r ÷ s = ΠR−S(r)− ΠR−S((ΠR−S(r)× s)− ΠR−S,S(r))
Porque?I ΠR−S(r)× s da os elementos de r com todos os valores de S .I ΠR−S,S(r) construi uma versao de r com os atributos da expressao
anterior.I ΠR−S(ΠR−S(r)× s)− ΠR−S,S(r)) da os tuplos t em ΠR−S(r) tal que
para algum tuplo u ∈ s, tu 6∈ r .
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2016/12/05 (v236)) 2018/2019 53 / 55
MySQL — Exemplos de Consultas
Uma aproximacao as consultas do tipo ÷ (do manual do MySQL, 13.2.8.6)
Que tipos de lojas estao presentes em uma, ou mais, cidades?
SELECT DISTINCT t i p o s L o j a sFROM L o j a s
WHERE EXISTS (SELECT ∗FROM C i d a d e s L o j a s
WHERE C i d a d e s L o j a s . t i p o L o j a = L o j a s . t i p o s L o j a s ) ;
Que tipos de lojas estao presentes em nenhuma cidade?
SELECT DISTINCT t i p o L o j aFROM L o j a s
WHERE NOT EXISTS(SELECT ∗
FROM C i d a d e s L o j a sWHERE C i d a d e s L o j a s . t i p o L o j a s = L o j a s . t i p o L o j a s ) ;
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2016/12/05 (v236)) 2018/2019 54 / 55
MySQL — Exemplos de Consultas
Que tipos de lojas estao presentes em todas as cidades?
SELECT DISTINCT s t o r e T y p eFROM S t o r e s
WHERE NOT EXISTS(SELECT ∗
FROM C i t i e sWHERE NOT EXISTS
(SELECT ∗ FROM C i t i e s S t o r e sWHERE C i t i e s S t o r e s . c i t y = C i t i e s . c i t y
AND C i t i e s S t o r e s . s t o r e T y p e = S t o r e s . s t o r e T y p e ) ) ;
Este ultimo exame e uma consulta �NOT EXISTS� duplamente embutida. Istoe, contem uma clausula �NOT EXISTS� dentro de uma outra clausula domesmo tipo.Formalmente, responde a questao �existe uma cidade com uma loja que nao estaem Lojas?�. E mais facil de ver que uma consulta �NOT EXISTS� duplamenteembutida responde a questao �e x verdade para todo o y?�
Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2016/12/05 (v236)) 2018/2019 55 / 55