DepartamentodeEngenhariaInformática 2008/2009 BasesdeDados1ºsemestre Lab1:Introduçãoaoambiente O ficheiro create bank.sql contém um conjunto de instruções SQL para criar a base de dadosdeexemploilustradanafigura1. Figura1.Basededadosdeexemplo Para criar a base de dados é necessário criar as tabelas e carregar os registos de cada tabela.acriaçãodastabelaséfeitacomrecursoàinstruçãocreatetable.porexemplo, atabeladeclientespodesercriadacomaseguinteinstrução: create table customer (customer_name varchar(255) not null unique, customer_street varchar(255) not null, customer_city varchar(255) not null, primary key(customer_name)); Esta instrução especifica o nome da tabela, os nomes das três colunas, o tipo de cada coluna,eaindarestriçõestaiscomoosvaloresnãopoderemsernulleofactodachave primáriadatabelaseronomedocliente. IST/DEI Pág.1de8
BD Os registos de cada tabela são carregados através de instruções do tipo INSERT. Por exemplo: insert into customer values ('Jones','Main','Harrison'); emquesãoespecificados,respectivamente,osvaloresdecadacolunapelamesmaordem em que estes foram definidos aquando da criação da tabela 1. Esta instrução resulta na criaçãodeumnovoregistonatabeladeclientes. Utilizaçãodalinhadecomando OservidordebasesdedadosPostgresaserusadonasaulasdelaboratóriopodeser acedidonoendereço172.20.41.222,quandodentrodaredeist Tagus,ounoendereço 193.136.166.123quandonumaredeexternaaoIST Tagus. Cadaalunotemumabasededadosparautilizaçãonasaulas.Ologincorrespondenteé: Username:u<n.dealuno> Database:u<n.dealuno> Password:n.dealuno. O servidor de bases de dados pode ser acedido através da ferramenta de linha de comandospsqlouatravésdoclientegráficopgadminiii. Osalunosdevemterocuidadodealterarasuapasswordinicial,porexemploatravésda instrução: alter user u<n. de aluno> with password 'nova_password'; Utilizaçãodalinhadecomando Em geral todos os sistemas de gestão de base de dados dispõem de uma linha de comandoatravésdaqualépossívelexecutarinstruçõessqletambémoutroscomandos deadministraçãoemanutençãodosistema. 1 Existem outras variantes da instrução INSERT com as quais é possível especificar os valores por outra ordem,ouespecificarapenasalgunsdosvalorespretendidosdeixandoosrestantesanulloucomovalor poromissão(defaultvalue,quenestecasonãofoiespecificado) IST/DEI Pág.2de8
BD EnquantoquealinguagemSQLestánormalizadaepodeserusadaemtodosossistemas, já os comandos de administração e manutenção são específicos e diferentes para cada sistema. No Postgres a linha de comando está acessível através do programa psql, tal como se ilustranocomandoabaixo: psql -d u<n. de aluno> -U u<n. de aluno> -h <end. servidor> Algunscomandosúteisnoprogramadelinhadecomandoencontram selistadosabaixo: \h AjudasobrecomandosSQL \? Ajudasobreopgsql \q Sairdopsql \password Mudarapassworddeumutilizadordeformasegura \d Descreverumatabela,índiceouvista 1. Faça download do ficheiro create bank.sql e guarde o em C:\Temp ou noutro directórioàsuaescolha. 2. Através do menu Start do Windows, localize o grupo de aplicações do Postgres e chameocommandprompt. 3. Naveguenalinhadecomandoatéaodirectórioondeguardouoficheiro.sql. 4. Invoqueoprogramapsqlcomocomando: psql Uusername hhostname onde username é o nome de utilizador. O sistema pedirá a password, que também deve ser fornecida. Para saber o username e password que deve utilizar, entre em contactocomodocentedolaboratório. 5. Umavezdentrodosistema,utilizeocomando\hparaobterinformaçãosobretodos oscomandossqldisponíveis. 6. Utilize o comando \? para obter informação sobre todos os comandos de administraçãodisponíveis. 7. Ligue se à sua base de dados, utilizando o comando: \c nome da bd. Para saber o nome da base de dados que deve utilizar, entre em contacto com o docente do laboratório. 8. Seprecisardesairdoprograma,podeutilizaraqualquermomentoocomando\q IST/DEI Pág.3de8
BD 9. Nalistadecomandosdeadministraçãoteránotadoaexistênciadeumcomandonesta forma: \ifileexecutecommandsfromfile 10. É este commando que vamos utilizar para executar as instruções no ficheiro createbank.sql.executeocomando: \icreate bank.sql O Postgres produz algumas mensagens à medida que executa as instruções do ficheiro. 11. Depoisdecriadaabasededadospodefazeralgumasconsultas,nomeadamente: veralistacompletadeclientes: SELECT * FROM customer; veralistacompletadecontas: SELECT * FROM account; 12. O tempo que o sistema demora a responder a algumas consultas é um factor importantequandoovolumededadoséconsiderável.executeocomando: \timing Repita as consultas anteriores. Passará a ver o tempo que o sistema demora a responder. Utilizaçãodaaplicaçãodeadministração A linha de comando é geralmente a forma de ter acesso a todas as funcionalidades do sistema. No entanto, para um conjunto limitado de tarefas é possível recorrer a ferramentasmaissimples. AdistribuiçãodoPostgresincluiumaferramentadessegénerodesignadapgAdminIII.No MySQLexisteumaferramentaequivalenteconhecidapor MySQLQueryBrowser. 1. Através do menu Start do Windows, localize o grupo de aplicações do Postgres e chame a aplicação pgadmin III. Em Linux, a aplicação de administração pode ser acedidaatravésdocomandopgadmin3 2. Ligue seaoservidordebasededados. 3. Expandaaárvoreelocalizeabasededados bank,bemcomoassuastabelas,que foramcriadasquandoexecutou\icreate bank.sqlnalinhadecomando. IST/DEI Pág.4de8
BD 4. No menu de ferramentas, abra a ferramenta query tool ( ferramenta de consulta seosistemaestiveremportuguês) 5. Escrevaasmesmasconsultasquerealizouanteriormentenalinhadecomando.Após escrever o comando SQL use o botão executar consulta. Observe os resultados e reparequenocantoinferiordireitosurgeotempodeexecuçãoparaaconsulta. 6. Repitaasmesmasconsultasmasagorautilizeobotão explicarconsulta. 7. Repare que o sistema mostra graficamente o plano de execução que seguiu para responder à consulta. Para perguntas simples como esta, foi necessária apenas uma operação de pesquisa sequencial. Mais para a frente na disciplina veremos como o sistemageraplanospararesponderaperguntasmaiscomplexas. InstruçõessimplesnalinguagemSQL Procure explorar as possibilidades do Postgres através da utilização da aplicação gráfica pgadminiiioudaferramentadelinhadecomandos. Abaixo encontram se alguns exemplos de instruções simples em SQL. Com o apoio do docentedolaboratórioedadocumentação,deverátentarcompreenderosmecanismos essenciaisrelacionadoscomasinstruçõesdeexemploapresentadas. Criaçãodetabelas CREATE TABLE cities ( name varchar(80) UNIQUE, country varchar(80) NOT NULL, PRIMARY KEY (name) ); CREATE TABLE climate ( city varchar(80) UNIQUE, min_temp int, -- temperatura mínima max_temp int, -- temperatura máxima measurement_date date, PRIMARY KEY (city,measurement_date), CONSTRAINT valid_temp CHECK (max_temp < 60), FOREIGN KEY (city) REFERENCES cities (name) ); Inserçãodedados INSERT INTO cities VALUES ( Brooklyn, USA ); INSERT INTO cities VALUES ( Paulo Alto, USA ); IST/DEI Pág.5de8
BD INSERT INTO climate VALUES ( Brooklyn,46,50, 1994-11-27 ); INSERT INTO climate (city,min_temp,max_temp,measurement_date) VALUES ( Paulo Alto,43,55, 1994-11-29 ); Consultassimples SELECT city,(max_temp+min_temp)/2 AS avg_temp FROM climate; SELECT * FROM climate WHERE city = Paulo Alto ; SELECT DISTINCT city FROM climate ORDER BY city; SELECT * FROM climate, cities WHERE city = name; SELECT city, min_temp, max_temp, country FROM climate, cities WHERE city = name; Remoçãodetabelas DROP TABLE climate; DROP TABLE cities; Geraroscriptdeumabasededados A base de dados de exemplo foi criada com recurso a um script(ficheiro de texto) com uma série de instruções SQL. Durante a utilização da base de dados serão adicionados, removidosealteradosregistos,demodoqueoestadodabasededadoséoresultadodas operaçõesrealizadas. A qualquer momento é possível gerar um script quer para efeitos de backup, quer para efeitos de replicação da base de dados noutro sistema. Em geral existem mecanismos própriosquesãomaisadequadosparaesseefeito,masoscriptdecriaçãodeumabasede dadoséútilemmuitasocasiões. 1. Através do menu Start do Windows, localize o grupo de aplicações do Postgres e chameocommandprompt. 2. Invoqueoprogramapg_dumpcomocomando: pg_dump Uusername hhostnamedbname onde dbname éonomedabasededadoscujoscriptsepretendeobter. 3. Verá que o programa produz o script na linha de comando. Vamos redireccionar o outputdeformaaguardaroscriptnumficheiro. Invoquenovamenteoprogramapg_dumpcomosseguinteparâmetros: IST/DEI Pág.6de8
BD pg_dump Uusername hhostnamedbname>backup bank.sql ondedbnameéonomedabasededadosebackup bank.sqléonomedoficheiroque serácriado. 4. Abra o ficheiro backup bank.sql e compare o seu conteúdo com create bank.sql. Alguns elementos não existiam no ficheiro original. Contudo, observe que apesar de usarinstruçõesdiferentesestescriptcriaráumabasededadosidênticaàoriginal. NaferramentagráficapgadminIII,oscriptdeumabasededadospodesercriadodesdea árvoreondesãoexibidasasbasesdedadosexistentes.cliquecomobotãodireitodorato eseleccioneaopção Backup. Obterinformaçãosobreoesquemadeumabasededados Paraumabasededadosexistentenosistemamassobreaqualnãohajadocumentação,é possívelusarinstruçõesespeciaisparaobterinformaçãosobreosartefactosexistentesno sistema(basesdedados,tabelas,vistas,funções,etc.).geralmenteestesmecanismossão proprietáriosediferentesparacadasistema. NoPostgresessasfuncionalidadesestãodisponíveisatravésdocomando\devariantes. 13. Através do menu Start do Windows, localize o grupo de aplicações do Postgres e chameocommandprompt 14. Invoqueoprogramapsqlcomocomando: psql Uusername hhostname 15. Utilizeocomando\l( L pequeno)paraobterumarelaçãodetodasasbasesdedados existentesnosistema. 16. Paraseligaràbasededados dbname,utilizeocomando:\cdbname 17. Obtenhainformaçãosobreastabelasdeclientesecontas: \dcustomer \daccount Confirme que esta descrição corresponde às especificações com que essas tabelas foramcriadas. Importaçãodedados Muitasvezesénecessárioimportardadosqueseencontramnoutroformato,porexemplo numafolhadecálculo.égeralmentepossívelconverteressesdadosparaumficheirode IST/DEI Pág.7de8
BD texto separado por vírgulas (CSV) ou por tabs (TSV). Uma vez num destes formatos, o Postgresdispõedeumcomando\copyquepermiteimportaressesdados. 1. Crieumficheirodetextocomváriaslinhascorrespondentesanovosclientes,emque cadalinhatemaforma: nome,rua,cidade 2. Invoqueoprogramapsql. 3. Ligue seàbasededadospretendida. 4. Façaumaconsultaàtabelacustomerparaveroseuconteúdo. 5. Executeocomando: \copytabelafromficheirousingdelimiters',' onde tabela deve ser substituído pelo nome da tabela que receberá os dados e ficheiro devesersubstituídopelonomedoficheirodetextoquecriou. 6. Façaumaconsultaàtabelacustomerparaveroconteúdo. 7. Façaumaconsultaàtabelaaccountparaveroconteúdo. 8. Crieumficheirodetextocomumúnicalinhaquedescrevaumanovacontaaadicionar àtabelaaccount: A-555,New York,800.00 9. Executeumcomando\copyparaimportarestesdadosparaatabelaaccount. 10. Osistemaproduzumerro.Procureumapossívelexplicaçãoparaacausadesteerro. 11. Altere os dados da conta A 555 de modo que o sistema deixe de produzir o erro e aceiteosnovosdados. 12. Executenovamenteocomando\copyefaçaumaconsultaàtabelaaccountparavero conteúdo. IST/DEI Pág.8de8