Linguagem de Consulta Estruturada (SQL)

Documentos relacionados
DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Banco de Dados I Introdução SQL

A linguagem SQL

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 16. Escola Politécnica da Universidade de São Paulo

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Banco de Dados. Professora: Luciana Faria

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

A linguagem SQL

Banco de Dados. Linguagem SQL

SQL PostgreSQL. I Criação de Tabelas. Disciplina: SCC0241 Bases de Dados Professor: Eduardo Hruschka Estagiária PAE: Dayse de Almeida

SQL Básica. Andre Noel

Modelagem Física e SQL

SQL Linguagem de Definição de Dados

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Modelagem Física e SQL

BCD29008 Banco de dados

Manipulação de Dados com SQL

Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD.

Prof. Dr. Joaquim Assunção Banco de Dados. SQL (parte 4) DDL Restrições

Linguagem SQL Sub-linguagem DDL

BANCO DE DADOS PARA NINJAS

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

SQL - Criação de Tabelas

SQL. Autor: Renata Viegas

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

Bancos (Bases) de Dados

SQL (Tópicos) Structured Query Language

Tabelas. Banco de Dados I MySQL

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

Revisão de Bancos de Dados

Bases de Dados. DDL Data Definition Language

BANCO DE DADOS GERENCIAL 1 A U L A 2

A linguagem SQL

SQL DDL. Frederico D. Bortoloti

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

A Linguagem SQL. Tecnologia de Base de Dados. MSc. Eugénio. Macumbe

Linguagem de Definição de Dados (DDL)

Disciplina: Banco de Dados Tema: SQL Parte 2

Modelo Relacional + SQL (DDL) Material elaborado pela Prof. Karin Becker

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Mysql. Quanto mais informações você busca, mais você evolui. Vitor Ramos. Disciplina de Banco de Dados

Programação SQL. Introdução

'%'! $!0" $ 8 ' %%! % '! $ $$% + ' %!%$/)!'4!+,"/)!)+,/)% *! +,"0''% * %$!*!$$ #!"%&%'%'%$! "94(# ' %'$%$$$%0%$%' *!% %%%'!**% > %% %%!31?

CREATE TABLE AUTOR ( cod_autor int not null primary key, nome_autor varchar (60) )

Banco de dados 1. Linguagem SQL DDL e DML. Professor: Victor Hugo L. Lopes

Introdução ao PostgreSQL

Structured Query Language (SQL) Aula Prática

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

MySql. Introdução a MySQL. Andréa Garcia Trindade

SQL (Structured Query Language)

MYSQL - PRIMEIROS COMANDOS CRIAÇÃCO DO BD E DAS TABELAS, INSERÇÃO E CONSULTA DE REGISTROS. create database [if not exists] <nome>

Fundamentos de Banco de Dados Postgre com Sql

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

SQL (Structured Query Language)

SQL (Structured Query Language)

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

SQL. Prof. Roger Cristhian Gomes

E-BOOK GUIA RÁPIDO DE SQL W W W. T R E I N A W E B.C O M. B R

Utilizando o Postgres - comandos SQL para a manipulação de dados

IMPLEMENTAÇÃO DE BANCO DE DADOS

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Conceitos SQL SQL 19/03/2017 O que é dado? O que é BD? O que é uma informação? O que é SGBD? O que é SQL? O que é BD? O que é SGBD?

Material Teórico. Organização de Dados. Responsável pelo Conteúdo: Prof. Ms. Alexander Gobbato Albuquerque

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

Conceito de Campos e Tabelas

Programação com acesso a BD. Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Marcelo Henrique dos Santos

Comandos DDL. id_modulo = id_m odulo

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

MODELO RELACIONAL Prof.: Jacson Tiola Técnico em Redes de Computadores

Page 1. Prof. Constantino Jacob

MODELAGEM DE DADOS MODELO FÍSICO

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Aula 06 Sistemas Embarcados LT38C

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

Transcrição:

Linguagem de Consulta Estruturada (SQL)

SQL SQL (Structured Query Language), ou Linguagem de Consulta Estruturada. Usada em Bancos de Dados Relacionais. É padronizada (SQL ANSI). ANSI (American National Standards Institute) ISO (International Standards Organization) Cada SGBD pode ter uma extensão.

SQL : Comandos DDL e DML DDL (Data Definition Language) Linguagem para Definição de Dados DML (Data Manipulation Language) Linguagem para Manipulação de Dados DDL (Estruturas) DML (Dados)

Linguagem para Definição de Dados (DDL) Comandos usados para DEFINIR e DESCREVER os dados e suas relações em um banco de dados: Criação Exclusão Alteração

DDL - Exemplos (Criação) Create database domain table... (Exclusão) Drop database domain table (Alteração) Alter domain table...

DDL - Criação CREATE DATABASE CREATE DATABASE BD01;

ALGUNS TIPOS DE DADOS Categoria Tipo de dado Descrição Caracter/String Text Permite armazenar número ilimitado de caracteres. Varchar(T) T refere-se à quantidade máxima de caracteres a serem armazenados. Tanto text, como varchar ocupam para armazenamento somente a quantidade de caracteres efetivamente utilizada. Char(T) T refere-se à quantidade máxima de caracteres a serem armazenados. Diferente de text e varchar, ocupa o espaço total de armazenamento referido em T. Numéricos Integer Número inteiro na faixa de 2 bilhões. Int2 Número inteiro na faixa de 32 mil. Int8 Número inteiro na faixa de 4 x 10 18 Numeric(P,D) Número real com precisão definida. Ex.: numeric(8,2) define um número com até 6 dígitos antes da vírgula e 2 após a vírgula. Float Número de ponto flutuante, com 15 dígitos de precisão. Float4 Número de ponto flutuante, com 6 dígitos de precisão. Temporais Date Data no formato yy-mm-dd. Time Hora no formato hh:mm:ss. Timestamp Data e hora no formato yy-mm-dd hh:mm:ss. Interval Intervalo de tempo, gerado pela subtração de 2 dados do tipo timestamp. Ex.: 5 horas e 7 dias. Lógicos Bool Dado booleano, pode ser entrado como true, t, yes, y ou 1 e também false, f, no, n ou 0. Mas armazena o dado como t ou f.

O que é um Domínio? É um apelido (aliás) para um determinado tipo de dado. Domínios SIMPLES CREATE DOMAIN ENDER AS VARCHAR (30) CREATE DOMAIN FONE AS VARCHAR (20)

Domínios COMPLEXOS CREATE DOMAIN SALARIO AS NUMERIC (15,2) DEFAULT 1500 CHECK (VALUE>0) CREATE DOMAIN DEPTO AS INT2 CHECK (VALUE BETWEEN 0 AND 6)

DDL - Criação CREATE TABLE (SEM DEFINIR A PRIMARY KEY) Fornecedor cnpj nome Fornecedor cnpj nome CREATE TABLE FORNECEDOR ( CNPJ INT NOT NULL, NOME VARCHAR(30) )

CREATE TABLE e Domínios nome Cliente endereço salario Cliente nome endereço salario CREATE TABLE CLIENTE ( NOME VARCHAR(30), ENDERECO ENDER, SALARIO SALARIO ) Domínios

CREATE TABLE e Chave Primária (PK) Funcionário Código Salario Nome Funcionário Código Nome Salario CREATE TABLE FUNCIONARIO ( CODIGO INT, NOME VARCHAR(30), SALARIO FLOAT, PRIMARY KEY(CODIGO) );

CREATE TABLE e Chave Estrangeira (FK) Nome Cliente Fone* Endereço Codigo Data_nasc ddd número Cliente Codigo Nome Endereço Data_nasc Fone Número DDD Cliente

CREATE TABLE CLIENTE ( CODIGO INT2, NOME VARCHAR(30), ENDERECO VARCHAR(30), DATA_NASC DATE, PRIMARY KEY (CODIGO) ); DICA: Crie sempre a tabela ORIGEM antes da tabela destino

CREATE TABLE FONE ( NUMERO VARCHAR(20), DDD VARCHAR(10), CLIENTE INT2 NOT NULL, PRIMARY KEY (NUMERO,DDD,CLIENTE), FOREIGN KEY(CLIENTE) REFERENCES CLIENTE(CODIGO) );

CREATE TABLE e Relacionamento 1:1 Funcionário 1 1 Gerencia Depto Funcionário Codigo Nome Salario Depto Codigo Gerente Nome

CREATE TABLE FUNCIONARIO ( CODIGO INT2, NOME VARCHAR(30), SALARIO FLOAT, PRIMARY KEY(CODIGO) );

CREATE TABLE DEPARTAMENTO ( CODIGO INT2, GERENTE INT2, NOMED VARCHAR(30), PRIMARY KEY(CODIGO), FOREIGN KEY(GERENTE) REFERENCES FUNCIONARIO(CODIGO) );

CREATE TABLE e Relacionamento 1:N Aluno N 1 estuda Curso Aluno CPF Nome Sexo Curso Curso Codigo Nome

CREATE TABLE CURSO ( CODIGO INTEGER, NOME VARCHAR(30), PRIMARY KEY(CODIGO) );

CREATE TABLE ALUNO ( CPF INT2, SEXO CHAR(1), CURSO INTEGER, NOMEC VARCHAR(30), PRIMARY KEY(CPF), FOREIGN KEY(CURSO) REFERENCES CURSO(CODIGO) );

CREATE TABLE e Relacionamento N:N Atleta N Pratica N Modalidade Atleta Código Nome Endereço Data_nasc. Pratica Atleta Modalidade Modalidade Código Nome

CREATE TABLE ATLETA ( CODIGO INTEGER, NOMEATLETA VARCHAR(30), ENDERECO VARCHAR(30), DATA_NASC DATE, PRIMARY KEY(CODIGO) ); CREATE TABLE MODALIDADE ( CODM INTEGER, NOMEMOD VARCHAR(30), PRIMARY KEY(CODM)

CREATE TABLE PRATICA ( ATLETA INTEGER, MODALIDADE INTEGER, PRIMARY KEY(ATLETA,MODALIDADE), FOREIGN KEY(ATLETA) REFERENCES ATLETA(CODIGO), FOREIGN KEY(MODALIDADE) REFERENCES MODALIDADE(CODM) );

CREATE TABLE e Chave Candidata Professor Codigo Nome Endereço RG CREATE TABLE PROFESSOR ( CODIGO INT2, NOME VARCHAR(30), RG INT2 NOT NULL, PRIMARY KEY(CODIGO), UNIQUE(RG) );

CREATE TABLE PRODUTO ( ); CREATE TABLE e Restrição de Restrição: Aceitar somente produtos cujo peso é maior que 50 CODIGO INTEGER, DESCRICAO TEXT, Produto Codigo Descricao Peso Volume PESO FLOAT CHECK (PESO > 50), VOLUME FLOAT Coluna (Check)

CREATE TABLE e Valor Default CREATE TABLE PRODUTO ( ); Caso o volume não seja informado, atribuir o valor 0 de modo automático CODIGO INTEGER, DESCRICAO TEXT, PESO FLOAT CHECK (PESO > 50), VOLUME FLOAT DEFAULT 0 Produto Codigo Descricao Peso Volume

CREATE TABLE e Restrição de Tabela (Check) Restrição: Aceitar somente produtos cujo volume é menor que o peso. CREATE TABLE PRODUTO ( CODIGO INTEGER, DESCRICAO TEXT, PESO FLOAT CHECK (PESO > 50), VOLUME FLOAT DEFAULT 0, CHECK (VOLUME < PESO) ); Produto Codigo Descricao Peso Volume

Operadores Relacionais = igual a > maior que < menor que >= maior ou igual a <= menor ou igual a!= diferente de

Crie a tabela produto de maneira que não seja possível inserir produtos cujo peso é igual ao volume CREATE TABLE PRODUTO ( ); CODIGO INTEGER, DESCRICAO TEXT, PESO FLOAT, VOLUME FLOAT CHECK (VOLUME!= PESO) Produto Codigo Descricao Peso Volume

Operadores Lógicos AND OR NOT IN BETWEEN LIKE e ou não dentro de entre como

Crie a tabela produto de maneira que seja possível inserir somente produtos cujo peso é igual a 50, 60, 70 ou 80. CREATE TABLE PRODUTO ( CODIGO INTEGER, DESCRICAO TEXT, PESO FLOAT CHECK (PESO IN (50,60,70,80)), VOLUME FLOAT ); Produto Codigo Descricao Peso Volume

Crie a tabela produto de maneira que seja possível somente inserir produtos cujo volume esteja entre 20 e 80. CREATE TABLE PRODUTO ( ); CODIGO INTEGER, DESCRICAO TEXT, PESO FLOAT, VOLUME FLOAT Produto Codigo Descricao Peso Volume CHECK (VOLUME BETWEEN 20 AND 80)

DDL - Exclusão DROP DATABASE Apaga o banco de dados atual e todos os dados que ele contêm! DROP DATABASE BD1;

DDL - Exclusão DROP DOMAIN Apaga um domínio do banco de dados DROP DOMAIN SALARIO; A exclusão falha se houverem colunas usando o domínio. Portanto, deve-se alterar o domínio ou excluir as colunas primeiro!

DDL - Exclusão DROP TABLE Apaga tabelas Fornecedor cnpj nome DROP TABLE FORNECEDOR;

Exemplo Aluno RA Nome Sexo Curso Curso Codigo Nome DROP TABLE ALUNO; DROP TABLE CURSO; DICA: Apague sempre a tabela DESTINO antes da tabela origem

Exemplo Atleta Código Nome Endereço Data_nasc. Pratica Atleta Modalidade Modalidade Código Nome DROP TABLE PRATICA; DROP TABLE ATLETA; DROP TABLE MODALIDADE;

Exemplo Funcionário Codigo Nome Salario Departamento Codigo Gerente Nome DROP TABLE DEPARTAMENTO; DROP TABLE FUNCIONARIO;

DDL - Alteração ALTER DOMAIN Altera a definição de um domínio, afetando as colunas nele baseadas ALTER DOMAIN SALARIO TO NOVO_SALARIO; ALTER DOMAIN DEPTO TO DEPTO_1 TYPE INTEGER;

DDL - Alteração ALTER TABLE Adiciona ou elimina colunas a uma tabela. Adiciona ou elimina restrições em uma tabela Chave Primária (PK) Chave Estrangeira (FK) Chave Candidata (UNIQUE) Cláusula Verificação (CHECK)

ALTER TABLE p/ Adicionar Colunas Fornecedor nome descrição cnpj ALTER TABLE FORNECEDOR ADD COLUMN DESCRICAO TEXT;

create domain lo as oid; CREATE TABLE imagem ( nome varchar(30) NOT NULL, figura lo, PRIMARY KEY (nome) ) INSERT INTO cliente VALUES ('figura1.jpg', lo_import ('d:/meus documentos/minhas imagens/ale/imagem5.jpg')); SELECT lo_export(figura, 'd:/temp/figura1.jpg') FROM cliente WHERE imagem = 'figura1.jpg';

ALTER TABLE p/ eliminar Colunas Fornecedor nome cnpj ALTER TABLE FORNECEDOR DROP COLUMN DESCRICAO;

ALTER TABLE p/ adicionar restrição de Chave Primária (PK) Fornecedor nome cnpj ALTER TABLE FORNECEDOR ADD CONSTRAINT PK_CNPJ PRIMARY KEY(CNPJ);

ALTER TABLE p/ eliminar restrição de Chave Primária (PK) Fornecedor nome cnpj ALTER TABLE FORNECEDOR DROP CONSTRAINT PK_CNPJ;

Exercício: Escreva o comando para criar a tabela cidade conforme o modelo abaixo. Escreva o comando para alterar a tabela criada de maneira que a coluna Código seja chave primária. Cidade Nome Codigo

CREATE TABLE CIDADE ( CODIGO INT2, NOME VARCHAR(30) ); ALTER TABLE CIDADE ADD CONSTRAINT PK_CODIGO PRIMARY KEY(CODIGO);

ALTER TABLE p/ adicionar restrição de Chave Estrangeira (FK) Fornecedor N 1 pertence Cidade nome cnpj nome codigo ALTER TABLE FORNECEDOR ADD COLUMN CIDADE INT2 NOT NULL; ALTER TABLE FORNECEDOR ADD CONSTRAINT FK_CODIGO FOREIGN KEY(CIDADE) REFERENCES CIDADE(CODIGO);

ALTER TABLE p/ eliminar restrição de Chave Estrangeira (FK) Fornecedor Cnpj Nome Cidade ESTRANG Cidade Codigo Nome ALTER TABLE FORNECEDOR DROP CONSTRAINT FK_CODIGO;

ALTER TABLE p/ adicionar restrição de Chave Candidata Professor código nome rg endereço ALTER TABLE PROFESSOR ADD CONSTRAINT CANDIDATA UNIQUE(RG);

ALTER TABLE p/ eliminar restrição de Chave Candidata Professor código nome rg endereço ALTER TABLE PROFESSOR DROP CONSTRAINT CANDIDATA;

ALTER TABLE p/ adicionar restrição (CHECK) Produto código descrição volume peso Restrição: VOLUME < PESO ALTER TABLE PRODUTO ADD CONSTRAINT TESTE CHECK (VOLUME < PESO);

ALTER TABLE p/ eliminar restrição (CHECK) Produto código descrição volume peso ALTER TABLE PRODUTO DROP CONSTRAINT TESTE;

ALTER TABLE p/ alterar nomes de colunas Fornecedor cnpj nome ALTER TABLE FORNECEDOR RENAME COLUMN NOME TO RAZAO_SOCIAL;

ALTER TABLE p/ alterar tipos de dados CREATE TABLE FORNECEDOR ( NOME CHAR(30), CNPJ INT NOT NULL ); ALTER TABLE FORNECEDOR ALTER COLUMN NOME TYPE VARCHAR(30);

Restrições de dados: NOT NULL torna a entrada de valores obrigatória na coluna. CHECK verifica em cada operação de inclusão e alteração se a condição especificada para o campo está sendo cumprida. DEFAULT especifica um valor padrão a ser atribuído ao campo quando nenhuma entrada for especificada. UNIQUE não permite que valores duplicados apareçam na coluna. Todos os campos designados como chave candidata (entrada não repetida), devem ser especificados como UNIQUE. PRIMARY KEY especifica uma chave primária, ou seja, identifica unicamente cada linha.

REFERENCES especifica uma chave estrangeira, ou seja, o valor do campo é baseado nos valores de chave primária de outra tabela. Quando estamos declarando um campo como chave estrangeira em uma tabela, podemos especificar quais ações devem ser tomadas no caso de exclusão ou alteração da chave estrangeira: ON DELETE ON UPDATE SET NULL CASCADE SET DEFAULT Quando a tupla Quando a tupla Quando a tupla correspondente a FK é correspondente a FK é correspondente a FK é excluída seu valor é excluído todas as tuplas excluída seu valor é marcado como nulo. que a tinham como FK marcado com o valor Quando a tupla correspondente a FK é alterada seu valor é marcado como nulo. são excluídas também. Quando a tupla correspondente a FK é alterada todas as tuplas que a tinham como FK são alteradas também. default especificado. Quando a tupla correspondente a FK é alterada seu valor é marcado com o valor default especificado. A opção NO ACTION é o default do Postgresql, e especifica que não podem ser feitas alterações e exclusões em campos que são referenciados como chave estrangeira.

Ex. de restrições CREATE TABLE vendedor( cod_vendedor INT2 PRIMARY KEY, nome varchar(30) NOT NULL, endereco varchar(80), cep char(8), datanascimento date, telefone varchar(18), funcao varchar(50), datacontratacao date, cod_departamento INT2 REFERENCES departamento (coddepto) ON UPDATE CASCADE ON DELETE SET NULL, cod_cidade INT2 DEFAULT 1 REFERENCES cidade (codcidade) ON UPDATE SET NULL ON DELETE SET DEFAULT);

MySQL x PostgreSQL MySQL ou PostgreSQL, qual usar? Ambos são muito bons e não fazem feio diante das alternativas pagas. Além disso, possuem recursos e vantagens em comum, o que significa que, para a maioria das aplicações, ambos podem ser usados. Na verdade, o correto não é tentar descobrir qual é o melhor, mas em que situação um ou outro deve ser utilizado.

O PostgreSQL é otimizado para aplicações complexas, isto é, que envolvem grandes volumes de dados ou que tratam de informações críticas. Assim, para um sistema de comércio eletrônico de porte médio/alto, por exemplo, o PostGreSQL é mais interessante, já que esse SGBD é capaz de lidar de maneira satisfatória com o volume de dados gerado pelas operações de consulta e venda.

O MySQL, por sua vez, é focado na agilidade. Assim, se sua aplicação necessita de retornos rápidos e não envolve operações complexas, o MySQL é a opção mais adequada, pois é otimizado para proporcionar processamento rápido dos dados e tempo curto de resposta sem exigir muito do hardware. Se você precisa, por exemplo, de um banco de dados para armazenar o conteúdo do seu site, de seu fórum ou necessita manter um cadastro de usuários de um portal, o MySQL "serve como uma luva", pois tais aplicações não necessitam dos recursos avançados que o PostgreSQL oferece.

Para escolher um destes dois SGBD, procure entender bem quais recursos sua aplicação precisa. Tente estimar o volume de dados, avalie o hardware disponível, certifiquese das funcionalidades necessárias e, posteriormente, procure por informações mais detalhadas do MySQL e do PostGreSQL. Se sua aplicação for simples - principalmente se for algo ligado à internet -, não é preciso pensar muito: o MySQL é uma escolha satisfatória, pois é facilmente encontrado em serviços de hospedagem.