Programação em Banco de Dados - Parte 1 Modelagem Física e SQL Prof. Pablo Passos prof.pablo.passos@gmail.com
SQL - Um modelo físico é gerado a partir de um modelo lógico já construído. A geração dos objetos de um modelo físico em um SGBD relacional é realizada através de uma linguagem de definição e manipulação de relações. SQL (Structured Query Language) é a linguagem utilizada atualmente para SGBD relacionais;
SQL Originalmente desenvolvida pela IBM na década de 70 com o objetivo de demonstrar a viabilidade da implementação do modelo relacional proposto por Codd; Padronizada pela ANSI (American National Standars Institute) em 1986 (SQL-86); Outras revisões aconteceram em: 1989, 1992, 1999, 2003, 2006, 2008 e 2011 ampliando gradativamente o escopo de funcionalidades da linguagem.
SQL Apesar do nome Linguagem de consulta, com SQL podemos realizar qualquer operação, como criar bancos de dados, objetos nele contidos, inserir, alterar, excluir ou recuperar dados de um banco de dados, especificar restrições de segurança, dentre outras operações; Dividida em 3 categorias Data Definition Language (DDL); Data Manipulation Language (DML); Data Control Language (DCL).
SQL Data Definition Language (DDL) Utilizada para definir bancos de dados e os objetos nele contidos; Exemplos de comandos DDL: CREATE TABLE; (criar tabelas) ALTER TABLE; (alterar estrutura de tabelas) DROP TABLE (eliminar tabelas), dentre outros;
SQL Data Manipulation Language (DML); Utilizada para manipular dados nos objetos contidos no banco de dados; Exemplos de comandos DML: INSERT; (inserir dados) UPDATE; (atualizar dados) DELETE;(excluir dados) SELECT;(consultar dados)
SQL Data Control Language (DCL); Utilizada para permitir (ou negar) o acesso aos objetos contidos no banco de dados a um usuário ou grupo de usuários; Exemplos de comandos DCL: GRANT; (conceder privilégios) REVOKE; (revogar privilégios)
SQL - DDL Definimos uma relação (tabela) com o comando CREATE TABLE CREATE TABLE table_name ( definicao_coluna [, definicao_coluna...] [constraints] ) definicao_coluna: col_name tipo_dado [NULL NOT NULL] constraints: PRIMARY KEY (chave primária) [CONSTRAINT constraint_name] PRIMARY KEY (col_name [,col_name2[,...]]) UNIQUE (unicidade) [CONSTRAINT constraint_name] UNIQUE (col_name [,col_name2[,...]]) FOREIGN KEY (chave estrangeira) [CONSTRAINT constraint_name] FOREIGN KEY (col_name [,col_name2[,...]]) REFERENCES ref_table (ref_col_name [,ref_col_name2[,...]])
SQL - DDL CREATE TABLE aluno ( num_matricula int not null, nome_aluno char(30) not null, endereco char(40) null, telefone char(15) null, codigo_curso int not null, CONSTRAINT PRIMARY KEY pk_aluno (num_matricula), ) CONSTRAINT fk_aluno_curso FOREIGN KEY (codigo_curso) REFERENCES curso (cod_curso)
SQL - DDL - Tipos de Dados Básicos SQL ANSI Char(n): String de caracteres de tamanho fixo com tamanho n especificado pelo usuário. Varchar(n): String de caracteres de tamanho variável com tamanho n especificado pelo usuário. Int: um número inteiro Decimal(p,e): um número de ponto fixo com precisão e escala especificados pelo usuário. Float(n): número de ponto flutuante com precisão especificado pelo usuário e escala limitada pela máquina. Date: armazenamento de datas
Tipos de Dados SQL Server 2014 Inteiros Bit Numérico Monetário Numérico de ponto flutuante Bigint Int Smallint Tinyint Bit Decimal Numeric Money Smallmoney Float Real -2^63 a 2^63 1: 8 bytes -2^31 a 2^31 1: 4 bytes -32.768 a 32.767: 2 bytes 0 a 255: 1 byte 0 ou 1: ocupa 1 byte até 8 colunas e 2 bytes acima de 8 colunas -10^38 +1 a 10^38 1: ocupa 5, 9, 13 ou 17 bytes a depender da precisão -922.337.203.685.477,5808 a 922.337.203.685.477,5807 : ocupa 8 bytes -214.748,3648 a 214.748,3647: até 4 casas decimais e ocupa 4 bytes -1,79E + 308 a 1,79E + 308: 4 a 8 bytes a depender da precisão -3,40E + 38 a 3,40E + 38: 4 bytes
Tipos de Dados SQL Server 2014 Data e Hora Datetime 01/01/1753 a 31/12/9999 com precisão de milésimo de segundo : ocupa 8 bytes Smalldatetime 01/01/1900 a 06/06/2079 com precisão de minuto: ocupa 4 bytes Date 0001-01-01 a 9999-12-31: ocupa 3 bytes String String Unicode * Time Char Varchar nchar nvarchar 00:00:00.0000000 a 23:59:59.9999999: ocupa 5 bytes String tamanho fixo até 8000 caracteres. String tamanho variável até 8000 caracteres. String unicode tamanho fixo até 4000. String unicode tamanho variável até 4000. Binários Binary Varbinary Binário tamanho fixo até 8000 bytes. Binário tamanho variável até 8000 bytes. * Unicode: Suporte a outros padrões de caracteres, como japonês, chinês, hebraico e outros
Tipos de Dados SQL Server 2014 Large-Value Data Types: Varchar(max), NVarchar(max), Varbinary(max); Permitem armazenar até 2Gb de dados; Substituem os antigos Text, NText e Image, garantindo maior flexibilidade. Espaciais - Geography: Representa coordenadas de latitude e longitude de áreas da superfície da Terra - Geometry: Representar polígonos, pontos e linhas de superfícies planas. XML Permite o armazenamento de um documento ou fragmento XML em variáveis ou campos de tabelas; Vantagens: Permite a criação de índices específicos para esse tipo de dado; A estrutura do conteúdo XML pode ser validada.
Modelagem Física Exemplo Definição dos tipos de dados dos atributos das relações
SQL - DDL Alteramos a definição de uma (tabela) com o comando ALTER TABLE: ALTER TABLE nome_tabela [ADD ( { col_name column_properties [column_constraint] [[,] table_constraint]} [,] next_col_name }... ) [DROP [CONSTRAINT] constraint_name [, constraint_name2]...]
SQL - DDL Restrições (Constraints) PRIMARY KEY: garante a unicidade e a não nulidade pois exige que todos os campos envolvidos sejam NOT NULL; CREATE TABLE equipamento ( cod_equipamento integer not null CONSTRAINT pk_equipamento PRIMARY KEY, desc_equipamento varchar(30) not null, valor_equipamento numeric(10,2) not null, cod_tipo_equipamento smallint not null ) ou ALTER TABLE equipamento ADD CONSTRAINT pk_equipamento PRIMARY KEY (cod_equipamento);
SQL - DDL Restrições (Constraints) FOREIGN KEY: garante a integridade referencial; CREATE TABLE equipamento ( cod_equipamento integer not null, desc_equipamento varchar(30) not null, valor_equipamento numeric(10,2) not null, cod_tipo_equipamento smallint not null CONSTRAINT fk_equip_tipo_equip FOREIGN KEY REFERENCES tipo_equipamento (num_tipo_equipamento) ); ou ALTER TABLE equipamento ADD CONSTRAINT fk_equip_tipo_equip FOREIGN KEY (num_tipo_equipamento) REFERENCES tipo_equipamento (num_tipo_equipamento);
SQL - DDL Alterações de tabelas (ALTER TABLE) Adição de um campo ALTER TABLE equipamento ADD ultima_atualizacao datetime; - Alteração do tipo de um campo ALTER TABLE equipamento ALTER COLUMN valor_equipamento float; Exclusão de coluna ALTER TABLE equipamento DROP COLUMN ultima_atualizacao;
SQL - DDL Restrições (Constraints) UNIQUE: garantem unicidade, mas não garantem não nulidade. CREATE TABLE equipamento ( cod_equipamento desc_equipamento integer not null primary key, varchar(30) null CONSTRAINT un_desc_equip UNIQUE, valor_equipamento cod_tipo_equipamento ); ou ALTER TABLE equipamento numeric(10,2) not null, smallint not null ADD CONSTRAINT un_desc_equip UNIQUE (desc_equipamento);