Banco de Dados Colégio Singular Curso Profissionalizante: Informática 2016 AGENDA 2 Armazenamento de Informações Principais Tipos de Banco de Dados Banco de Dados Relacional Terminologia do Banco de Dados Relacionando Várias Tabelas Tipos de Relacionamentos Introdução aos comandos SQL Atividade Banco de Dados Relacional Armazenamento de Informações Armário de Arquivo; Planilhas Eletrônicas; Banco de Dados; – 3 Relação entre “Biblioteca” e “Banco de Dados”. Banco de Dados Relacional Principais Tipos de Banco de Dados 4 Hierárquico; De Rede; Relacional; Relacional de Objeto; Banco de Dados Relacional Banco de Dados Tradicional - Programas da aula Arquivo da aula Alunos Professor Curso Inscrição Secretaria Programas de contabilidade Arquivo de contabilidade Alunos Funcionários Mensalidades Financeiro Departamento de Contabilidade Programas de esportes 5 Departamento de Esportes Arquivo de esportes Atletas Inf. Acad. Equipes Financeiro Banco de Dados Relacional - Programas da aula Secretaria Programas de contabilidade Departamento de Contabilidade Sistema de gerenciamento de banco de dados Alunos Curso Inscrição Funcionários Mensalidades Financeiro Time Informações Acadêmica Programas de esportes 6 Departamento de Esportes Banco de Dados Relacional Conceito de Banco de Dados Relacional Dr. E. F. Codd Propôs o modelo relacional para banco de dados em 1970; Ele é a base para o RDBMS (Relational Database Management System / Sistema de gestão de bases de dados relacionais ); O modelo relacional é composto de 7 Um conjunto de Objetos ou relações que armazenam dados; Um conjunto de Operadores para agir sobre as relações; Integridade de dados para precisão e consistência. Banco de Dados Relacional Definição e um Banco de dados Relacional Banco de Dados Relacional é um conjunto de relações ou tabelas de duas dimensões. 8 Banco de Dados Relacional Terminologia do Banco de Dados Relacional Elementos da Tabela: CODIGO 0000969 0000971 0000972 0000973 0000974 0001480 0001481 0001482 0001483 0001484 0001485 9 CPF 99943898499 99995278635 99991468728 36151736999 99994399912 99999343978 99961714275 99975487381 99991293393 99975517221 99999694294 NOME JUCELINO PEREIR ELSO DO COSTA FRANCISCO TEIXE DIVINO SILVA RENATO COSTA JOSE LUIZ ROBERTO TEIXEIRA MARINA DOS SANTOS JOSE OTAVIANO REINALDO FERREIRA MARCIO DE ALMEIDA TIPO_PESSOA M M M J F M M F M M M EST_CIVIL C D S O S C C C C C S COD_END 00009690 00009710 00009720 00009731 00009740 00014800 00014811 00014820 00014830 00014840 00014850 Banco de Dados Relacional Terminologia do Banco de Dados Relacional Dado x Informação Dado: Conjunto de símbolos e sinais. Tudo que é captado pelos sentidos. Informação: É a interpretação de um conjunto de dados. É o dado transformado com um significado específico. 10 Banco de Dados Relacional Terminologia do Banco de Dados 1-Linha (Identificada por chave primária, para impedir linhas duplicadas); 2-Coluna, valor chave; 3-Coluna que não é valor chave; 4-Coluna, chave estrangeira; 5-Campo; 6-Campo nulo. 11 Banco de Dados Relacional Terminologia do Banco de Dados Relacional Elementos da Tabela: Linha CODIGO 0000969 0000971 0000972 0000973 0000974 0001480 0001481 0001482 0001483 0001484 0001485 12 Campo CPF 99943898499 99995278635 99991468728 36151736999 99994399912 99999343978 99961714275 99975487381 99991293393 99975517221 99999694294 Coluna , valor chave. Campo nulo NOME JUCELINO PEREIR ELSO DO COSTA FRANCISCO TEIXE DIVINO SILVA RENATO COSTA JOSE LUIZ ROBERTO TEIXEIRA MARINA DOS SANTOS JOSE OTAVIANO REINALDO FERREIRA MARCIO DE ALMEIDA TIPO_PESSOA M M M J F M M F M M M Coluna que não é um valor chave. EST_CIVIL C D S O S C C C C C S COD_END 00009690 00009710 00009720 00009731 00009740 00014800 00014811 00014820 00014830 00014840 00014850 Colunadechave estrangeira. Banco Dados Relacional Relacionando Várias Tabela 13 Cada Linha de dados de uma tabela é identificada com exclusividade por uma PK (Primary Key, Chave primaria); É possível relacionar dados de várias tabelas por meio de FK’s (Foreing Keys, Chaves estrangeiras). Banco de Dados Relacional Tipos de relacionamentos Um para Muitos; Um para Um; Muitos para Muitos (Livro x LivroAutor x Autor). 14 Banco de Dados Relacional Tipos de Relacionamentos 15 Banco de Dados Relacional Tipos de Relacionamentos 16 Banco de Dados Relacional Normalização de Tabelas Normalização é um processo a partir do qual se aplicam regras a todas as tabelas do banco de dados com o objetivo de evitar falhas no projeto, como redundância de dados e mistura de diferentes assuntos numa mesma tabela. Ao projetar um banco de dados, se temos um modelo de entidades e relacionamentos e a partir dele construirmos o modelo relacional seguindo as regras de transformação corretamente, o modelo relacional resultante estará, provavelmente, normalizado. Mas, nem sempre os modelos que nos deparamos são implementados dessa forma e, quando isso acontece, o suporte ao banco de dados é dificultado. Em ambos os casos, é necessário aplicar as técnicas de normalização, ou para normalizar (segundo caso citado), ou apenas para validar o esquema criado (primeiro caso citado). Aplicando as regras descritas a seguir, é possível garantir um banco de dados mais íntegro, sem redundâncias e inconsistências. Banco de Dados Relacional Normalização de Tabelas 1FN – Um agrupamento de dados somente estará na 1FN se não houver atributo ou conjunto de atributos em relação de ocorrência. 2FN – Um agrupamento de Dados somente estará na 2FN se os atributos não identificadores forem completamente dependentes do(s) atributos(s) identificador(es). 3FN – Um agrupamento de dados somente estará na 3FN se não houver relação de dependência entre os atributos não identificadores. Banco de Dados Relacional Normalização de Tabelas 1FN - 1ª Forma Normal: Todos os atributos de uma tabela devem ser atômicos, ou seja, a tabela não deve conter grupos repetidos e nem atributos com mais de um valor. Para deixar nesta forma normal, é preciso identificar a chave primária da tabela, identificar a(s) coluna(s) que tem(êm) dados repetidos e removê-la(s), criar uma nova tabela com a chave primária para armazenar o dado repetido e, por fim, criar uma relação entre a tabela principal e a tabela secundária. Por exemplo, considere a tabela Pessoas a seguir. PESSOAS = {ID+ NOME + ENDERECO + TELEFONES} Ela contém a chave primária ID e o atributo TELEFONES é um atributo multivalorado e, portanto, a tabela não está na 1FN. Para deixá-la na 1FN, vamos criar uma nova tabela chamada TELEFONES que conterá PESSOA_ID como chave estrangeira de PESSOAS e TELEFONE como o valor multivalorado que será armazenado. PESSOAS = { ID + NOME + ENDERECO } TELEFONES = { PESSOA_ID + TELEFONE }. Banco de Dados Relacional Normalização de Tabelas 2FN - 2ª Forma Normal: Antes de mais nada, para estar na 2FN é preciso estar na 1FN. Além disso, todos os atributos não chaves da tabela devem depender unicamente da chave primária (não podendo depender apenas de parte dela). Para deixar na segunda forma normal, é preciso identificar as colunas que não são funcionalmente dependentes da chave primária da tabela e, em seguida, remover essa coluna da tabela principal e criar uma nova tabela com esses dados. Por exemplo, considere a tabela ALUNOS_CURSOS a seguir. ALUNOS_CURSOS = { ID_ALUNO + ID_CURSO + NOTA + DESCRICAO_CURSO } Nessa tabela, o atributo DESCRICAO_CURSO depende apenas da chave primária ID_CURSO. Dessa forma, a tabela não está na 2FN. Para tanto, cria-se uma nova tabela chamada CURSOS que tem como chave primária ID_CURSO e atributo DESCRICAO retirando, assim, o atributo DESCRICAO_CURSO da tabela ALUNOS_CURSOS. ALUNOS_CURSOS = {ID_ALUNO + ID_CURSO + NOTA} CURSOS = {ID_CURSO + DESCRICAO} Banco de Dados Relacional Normalização de Tabelas 3FN - 3ª Forma Normal: Para estar na 3FN, é preciso estar na 2FN. Além disso, os atributos não chave de uma tabela devem ser mutuamente independentes e dependentes unicamente e exclusivamente da chave primária (um atributo B é funcionalmente dependente de A se, e somente se, para cada valor de A só existe um valor de B). Para atingir essa forma normal, é preciso identificar as colunas que são funcionalmente dependentes das outras colunas não chave e extraí-las para outra tabela. Considere, como exemplo, a tabela FUNCIONARIOS a seguir. FUNCIONARIOS = { ID + NOME + ID_CARGO + DESCRICAO_CARGO } O atributo DESCRICAO_CARGO depende exclusivamente de ID_CARGO (atributo não chave) e, portanto, deve-se criar uma nova tabela com esses atributos. Dessa forma, ficamos com as seguintes tabelas: FUNCIONARIOS = { ID + NOME + ID_CARGO } CARGOS = { ID_CARGO + DESCRICAO } Banco de Dados Relacional Normalização de Tabelas Como exercício, normalize a tabela EMPREGADOS a seguir: Banco de Dados Relacional Tipos de dados Tipos de dados definem os tipos de informação que podem ser inseridos em um campo. Os tipos suportados por um banco de dados podem variar de SGBD para SGBD, seguem os principais tipos encontrados na maior parte dos gerenciadores: Tipo INT Números inteiros. Existem outros tipos de números inteiros de acordo com o gerenciador utilizado. FLOAT Números reais. Permitem armazenar todo tipo de número não inteiro. Existem outros tipos de números reais de acordo com o gerenciador utilizado. CARACTER CHAR (NÚMERO) Caracter. Permite a inclusão de dados alfanuméricos com tamanho prédefinido. O número de caracteres é definido entre os parênteses. CARACTER VARIÁVEL VARCHAR (NÚMERO) Caracter. Permite a inclusão de dados alfanuméricos. O número de caracteres é definido entre os parênteses, porém o número de bytes utilizados pelo campo é de acordo com o dado inserido. INTEIRO REAL DATA 23 Abreviação Genérica Descrição BOOLEANO DATE Data. Existem diversos tipos de datas de acordo com o gerenciador utilizado. BOOLEAN Armazena um bit de informação, utilizado para verdadeiro ou falso. Banco de Dados Relacional Instruções SQL 24 DML(Data Manipulation Language) DDL(Data Definition Language) Controle de Transações DCL (Data Control Language) Banco de Dados Relacional Instruções SQL DML(Data Manipulation Language) – – – – – Select; Insert; Update; Delete; Merge. Selecionar/Recuperar Dados, informar novas linhas, alterar linhas existentes e excluir linhas desnecessárias das tabelas do banco de dados. 25 Banco de Dados Relacional Instruções SQL DDL(Data Definition Language) – – – – – – Create; Alter; Drop; Rename; Truncate; Comment. Possibilita que o profissional, configure, altere e remova estruturas de dados nas tabelas . 26 Banco de Dados Relacional Instruções SQL Controle de Transações – – – Commit; Rollback; SavePoint; Gerencia as alterações realizadas por instruções DML. Permite o agrupamento das alterações de dados de acordo com transações lógicas. 27 Banco de Dados Relacional Instruções SQL DCL(Data Control Language) – – Grant; Revoke. Administra, concedendo ou retirando acessos ao banco de dados e as estruturas nele contidas. 28 Banco de Dados Relacional Introdução aos Comandos SQL Versão do Banco mysql> SELECT VERSION(), CURRENT_DATE; +--------------+--------------+ | version() | CURRENT_DATE | +--------------+--------------+ | 3.22.20a-log | 1999-03-19 | +--------------+--------------+ 1 row in set (0.01 sec) Para sair do MySql mysql> QUIT (não necessita de ponto e vírgula) 29 Banco de Dados Relacional Introdução aos Comandos SQL O mysql como uma calculadora simples mysql> SELECT 2+2, (4+1)*5; +-------------+---------+ | 2+2 | (4+1)*5 | +-------------+---------+ | 4 | 25 | +-------------+---------+ Cancelar a Consulta digite “\c” mysql> SELECT -> USER() -> \c mysql> 30 Banco de Dados Relacional Introdução aos Comandos SQL Múltiplas instruções em uma única linha mysql> SELECT VERSION(); SELECT NOW(); +--------------+ | VERSION() | +--------------+ | 3.22.20a-log | +--------------+ +---------------------+ | NOW() | +---------------------+ | 1999-03-19 00:15:33 | +---------------------+ 31 Banco de Dados Relacional Introdução aos Comandos SQL Quais Bancos de Dados existem no Servidor mysql> SHOW DATABASES; +---------| Database +---------| mysql | test | tmp +---------- + | + | | | + Criando um Banco de Dados mysql> CREATE DATABASE menagerie; ( Case sensitive ) Utilizando um Banco de dados mysql> USE menagerie; 32 Banco de Dados Relacional Introdução aos Comandos SQL Visualizando as Tabelas; mysql> show tables; Criando uma Tabela; CREATE TABLE nome_tabela ( nome_campo_1 , nome_campo_2 , ... nome_campo_n ); tipo_1 tipo_2 tipo_n PRIMARY KEY NOT NULL DEFAULT ‘SP’ (PADRÃO) ou 33 CREATE TABLE nome_tabela ( nome_campo_1 tipo_1 , nome_campo_2 tipo_2 NOT NULL (REQUIRED) , ... nome_campo_n tipo_n , PRIMARY KEY (nome_campo_1,...) ); Banco de Dados Relacional Introdução aos Comandos SQL Criando uma Tabela; CREATE TABLE TB_CLIENTES ( COD_CLIENTE INT(10) , NOME VARCHAR(80) , DT_CADASTRO DATE , STATUS CHAR(1) , CREDITO FLOAT(12,2) ); NOT NOT NOT NOT NOT NULL PRIMARY KEY NULL NULL NULL DEFAULT ‘1’ NULL ou CREATE TABLE TB_CLIENTES ( COD_CLIENTE INT(10) , NOME VARCHAR(80) , PRIMARY KEY (COD_CLIENTE) ); 34 NOT NULL NOT NULL Banco de Dados Relacional Introdução aos Comandos SQL Auto Incremento Para definir um campo como auto-incremento, devemos inserir AUTO_INCREMENT na frente do campo determinado. Automatiza o código chave primária de uma tabela; CREATE TABLE TB_CLIENTES ( COD_CLIENTE INT(10) , NOME VARCHAR2(80) , PRIMARY KEY (COD_CLIENTE) ); NOT NULL NOT NULL AUTO_INCREMENT Visualizar a descrição de uma tabela; mysql> describe TB_CLIENTES; Ou mysql> desc TB_CLIENTES; 35 Banco de Dados Relacional Introdução aos Comandos SQL Chave Estrangeira Tem como finalidade estabelecer as relações entre duas ou mais tabelas de um Banco de Dados. A chave estrangeira referencia o campo que é chave primária de outra tabela. FOREIGN KEY (Campo1, Campo2, Campo3 ...) REFERENCES Nome_Tabela2 (Nome_Chave); CREATE TABLE TB_CLIENTES ( COD_CLIENTE INT(10) NOT NULL AUTO_INCREMENT , NOME VARCHAR(100) NOT NULL , COD_END INT(10) , PRIMARY KEY (COD_CLIENTE) , FOREIGN KEY (COD_END) REFERENCES TB_ENDERECO (COD_END) ); 36 Banco de Dados Relacional