A empresa brasileira de PostgreSQL

Documentos relacionados
A linguagem SQL

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

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

Linguagem de Consulta Estruturada (SQL)

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

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

SQL Básica. Andre Noel

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

Linguagem SQL (Parte II)

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

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

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

PostgreSQL Desenvolvedor

Marcio Victorino

O projeto físico do bando de dados consiste no mapeamento do projeto lógico para um DBMS real Projeto deve levar em conta fatores como:

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo

Banco de Dados. Linguagem SQL

SGPS Sistema Gerenciamento de Pet Shop

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

Tabelas. Banco de Dados I MySQL

A linguagem SQL

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

Refatoração de Software

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Banco de Dados. Professora: Luciana Faria

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

pgmodeler: muito mais que um modelador de bancos de dados PostgreSQL

Programação em Banco de dados

Linguagem SQL Sub-linguagem DDL

Banco de Dados I Introdução SQL

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

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

Conceito de Campos e Tabelas

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?

Modelagem Física e SQL

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

SGATF Sistema para Gerenciamento de Alugueis de Trajes para Festa

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

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

Modelagem Física e SQL

Reengenharia, Refatoração e Bad Smell

12.4 DER Mais sobre Cardinalidade DER Mais sobre Cardinalidade DER Mais sobre Cardinalidade DER Mais sobre Cardinalidade

BANCO DE DADOS II SQL Básico. COTEMIG Gerson Borges

Introdução ao PostgreSQL

ALISYS (Aliança System)

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

Programação SQL. Introdução

BANCO DE DADOS GERENCIAL 1 A U L A 2

Monitoria GDI. Aula Prática. OR (Aula 1)

Técnicas de Database Refactoring para ambientes 24x7. Matheus de Oliveira

Refatoração: Melhorando código existente

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

SQL Linguagem de Definição de Dados

Banco de Dados I. Prof. Diego Buchinger. Profa. Rebeca Schroeder Freitas Prof. Fabiano Baldo.

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

BANCO DE DADOS PARA NINJAS

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

STRBY Sistema de Gerenciamento de Lojas de Roupas

SQL. Autor: Renata Viegas

Projeto Físico de Banco de Dados

Prof. Carlos Majer Aplicações Corporativas UNICID

A U L A 8 C O N S U L T A S U N I N D O D U A S O U M A I S T A B E L A S P A R T E 2

Tarefa Orientada 8 Criação de tabelas

Processo de Seleção para Tutor bolsista (presencial e a distância) UAB/CAPES/MEC

Banco de dados. Prof. Me. Hélio Esperidião

Persistência de Classe e Auto- Relacionamento em Tabelas de Banco de Dados

Prefeitura da Cidade de Nova Iguaçú. SEMED Secretaria Municipal de Educação. Coordenadoria Municipal de Ciência e Tecnologia

Banco de Dados. Diego Silveira Costa Nascimento. 20 de março de Instituto Federal do Rio Grande do Norte

Disciplina: Banco de Dados Tema: SQL Parte 2

BCD29008 Banco de dados

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Sistema para gerenciamento de pizzaria e restaurante

TRABALHO DE BANCO DE DADOS

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU

Introdução em Banco de Dados

A linguagem SQL

Projeto Conceitual Usando o Modelo-Entidade Relacionamento

MySQL + PHP 06/05/2015. IFSC/campus Florianópolis Programação para a WEB Prof. Herval Daminelli

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

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

Transcrição:

Bad Smells (mal cheiros) em Bancos de Dados A empresa brasileira de PostgreSQL TDC2013, Porto Alegre, 2013-10-26

Palestrante Fabrízio de Royes Mello Desenvolvedor PostgreSQL Líder do PostgreSQL Brasil Pós-Graduando Uniritter (Agile) @fabriziomello http://fabriziomello.blogspot.com Timbira Consultor/Mentor/Coach A empresa brasileira de PostgreSQL Consultoria Desenvolvimento Suporte 24x7 Treinamento Timbira - A empresa brasileira de PostgreSQL 2 / 39

Sobre este material esta apresentação está disponível em: http://www..com.br/material esta apresentação está sob licença Creative Commons Atribuição 3.0 Brasil: http://www.creativecommons.org/licenses/by/3.0/br Embora este material tenha sido elaborado com toda precaução, os autores não assumem quaisquer responsabilidades por erros, omissões ou danos resultantes da utilização das informações aqui contidas. Se você encontrar qualquer erro, por favor reporte-o a contato@.com.br

Resumo 1 Prelúdio 2 Introdução 3 Bad Smells 4 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 1 / 39

Como tudo começou na minha vida... 1993 - Basic 1994 - CLIPPER (e um pouco de C) 1996 - C e Pascal 1998 - SQL - mudou minha vida ;-) 1999 - Teoria Relacional... 2004 - Web (PHP, HTML, CSS, Javascript)... 2009 - Database Refactoring... 2013 - Bad Smells em Bancos de Dados Timbira - A empresa brasileira de PostgreSQL 2 / 39

Resumo 1 Prelúdio 2 Introdução 3 Bad Smells 4 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 3 / 39

Bancos de Dados Tendem a se deteriorar ao longo do tempo. Alguns motivos: crescimento volume de dados/transações; aumento natural de usuários que o utilizam; dificuldades na evolução do schema; estratégias de manutenção. Timbira - A empresa brasileira de PostgreSQL 4 / 39

Refatoração em Bancos de Dados Deterioração + Mudanças em Requisitos = Necessidade de Refatoração. Timbira - A empresa brasileira de PostgreSQL 5 / 39

Refatoração em Bancos de Dados Deterioração + Mudanças em Requisitos = Necessidade de Refatoração. Mas não é tão simples assim: além de manter comportamento também é preciso manter informação (dados); acoplamento com diversas origens (apps, bds, integrações, 3rd,...) Timbira - A empresa brasileira de PostgreSQL 5 / 39

Resumo 1 Prelúdio 2 Introdução 3 Bad Smells 4 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 6 / 39

Code Smell É uma categoria comum de problema no código fonte que indica a necessidade de refatoração. (Martin Fowler) Timbira - A empresa brasileira de PostgreSQL 7 / 39

Database Smell Similarmente aos Code Smells existem problemas comuns em bancos de dados que indicam uma potencial necessidade de refatoração. (Scott Ambler) Timbira - A empresa brasileira de PostgreSQL 8 / 39

Database Smell Multi-purpose column Se uma coluna for utilizada para vários fins, é provável que exista um código extra para garantir que a mesma seja usada corretamente e, muitas vezes, verificando valores de uma ou mais colunas. Timbira - A empresa brasileira de PostgreSQL 9 / 39

Multi-purpose column CREATE TABLE pessoa ( id SERIAL PRIMARY KEY, tipo CHAR(1) CHECK (tipo IN ( F, J )), nome VARCHAR(100) NOT NULL, data DATE ); Timbira - A empresa brasileira de PostgreSQL 10 / 39

Multi-purpose column CREATE TABLE pessoa ( id SERIAL PRIMARY KEY, tipo CHAR(1) CHECK (tipo IN ( F, J )), nome VARCHAR(100) NOT NULL, data DATE ); Se tipo = F então DATA = nascimento Se tipo = J então DATA = inicio atividades Timbira - A empresa brasileira de PostgreSQL 10 / 39

Multi-purpose column Sugestão(ões) Database Refactoring: Split Column Move Column Timbira - A empresa brasileira de PostgreSQL 11 / 39

Database Smell Multi-purpose table Quando uma tabela é utilizada para armazenar vários tipos de entidades provavelmente existe uma falha de projeto. Timbira - A empresa brasileira de PostgreSQL 12 / 39

Multi-purpose table CREATE TABLE pessoa ( id SERIAL PRIMARY KEY, tipo CHAR(1) CHECK (tipo IN ( F, J )), nome VARCHAR(100) NOT NULL, nome_fantasia VARCHAR(100), cnpj CHAR(14), cpf CHAR(11), rg CHAR(10), data DATE ); Timbira - A empresa brasileira de PostgreSQL 13 / 39

Multi-purpose table CREATE TABLE pessoa ( id SERIAL PRIMARY KEY, tipo CHAR(1) CHECK (tipo IN ( F, J )), nome VARCHAR(100) NOT NULL, nome_fantasia VARCHAR(100), cnpj CHAR(14), cpf CHAR(11), rg CHAR(10), data DATE ); Se tipo = F então NOME = nome, Se tipo = J então NOME = razão social Se tipo = F então CNPJ e NOME_FANTASIA = NULL Se tipo = J então CPF e RG = NULL Timbira - A empresa brasileira de PostgreSQL 13 / 39

Multi-purpose table Sugestão(ões) Database Refactoring: Split Column Move Column Split Table Timbira - A empresa brasileira de PostgreSQL 14 / 39

Database Smell Redundant data É um problema sério em bases de dados porque quando o dado é armazenado em vários locais, ocorre uma oportunidade de inconsistência. Timbira - A empresa brasileira de PostgreSQL 15 / 39

Redundant data CREATE TABLE sys.usuario ( id SERIAL PRIMARY KEY, nome VARCHAR(100) NOT NULL, endereco VARCHAR(100), numero INTEGER, complemento VARCHAR(40) ); CREATE TABLE rh.funcionario ( id SERIAL PRIMARY KEY, nome VARCHAR(100) NOT NULL, endereco VARCHAR(100), numero INTEGER, complemento VARCHAR(40) ); Timbira - A empresa brasileira de PostgreSQL 16 / 39

Redundant data Sugestão(ões) Database Refactoring: Merge Tables Move Data Drop Column Timbira - A empresa brasileira de PostgreSQL 17 / 39

Database Smell Tables with too many columns Quando uma tabela tem muitas colunas é indicativo de falta de coesão, pois está armazenando dados de várias entidades. Timbira - A empresa brasileira de PostgreSQL 18 / 39

Tables with too many columns CREATE TABLE pessoa ( id SERIAL PRIMARY KEY, nome VARCHAR(100) NOT NULL, end_entrega VARCHAR(200), end_cobranca VARCHAR(200), end_residenc VARCHAR(200), end_profiss VARCHAR(200), fone_celular VARCHAR(20), fone_casa VARCHAR(20), fone_fax VARCHAR(20), fone_contato VARCHAR(20) ); Timbira - A empresa brasileira de PostgreSQL 19 / 39

Tables with too many columns CREATE TABLE parametro ( parametro1 VARCHAR(100), parametro2 VARCHAR(100), parametro3 VARCHAR(100), parametro4 VARCHAR(100), parametro5 VARCHAR(100), parametro6 VARCHAR(100),... parametron VARCHAR(100) ); Timbira - A empresa brasileira de PostgreSQL 20 / 39

Tables with too many columns Sugestão(ões) Database Refactoring: Split Table Move Column Timbira - A empresa brasileira de PostgreSQL 21 / 39

Database Smell Tables with too many rows Tabelas muito grandes podem nos levar a problemas de performance. O custo (memória e tempo) para buscar ou alterar dados em uma tabela varia de acordo com o número de linhas. Timbira - A empresa brasileira de PostgreSQL 22 / 39

Tables with too many rows CREATE TABLE measurement ( city_id int not null, logdate date not null, peaktemp int, unitsales int ); CREATE TABLE measurement_y2006m02 ( ) INHERITS (measurement CREATE TABLE measurement_y2006m03 ( ) INHERITS (measurement... CREATE TABLE measurement_y2007m11 ( ) INHERITS (measurement CREATE TABLE measurement_y2007m12 ( ) INHERITS (measurement CREATE TABLE measurement_y2008m01 ( ) INHERITS (measurement Timbira - A empresa brasileira de PostgreSQL 23 / 39

Tables with too many rows Sugestão(ões) Database Refactoring: Split Table Move Rows Move Column Timbira - A empresa brasileira de PostgreSQL 24 / 39

Database Smell Smart columns Coluna onde em diferentes posições do dado representam conceitos diferentes. Timbira - A empresa brasileira de PostgreSQL 25 / 39

Smart columns CREATE TABLE processo ( numero CHAR(10) PRIMARY KEY,... ); CREATE TABLE debito ( processamento CHAR(15) PRIMARY KEY... ); Timbira - A empresa brasileira de PostgreSQL 26 / 39

Smart columns CREATE TABLE processo ( numero CHAR(10) PRIMARY KEY,... ); CREATE TABLE debito ( processamento CHAR(15) PRIMARY KEY... ); numero = 4 digitos ano + 6 digitos sequencial processamento = 4 digitos ano + 6 digitos sequencial + 2 digitos parcela + 2 digitos total parcelas + 1 digito verificador Timbira - A empresa brasileira de PostgreSQL 26 / 39

Smart columns Sugestão(ões) Database Refactoring: Split Column Timbira - A empresa brasileira de PostgreSQL 27 / 39

Database Smell Phantom foreign-key Quando uma coluna em uma tabela pode receber um valor que dependendo de outra coluna estabelece relacionamento de chave estrangeira com outra tabela. Timbira - A empresa brasileira de PostgreSQL 28 / 39

Phantom foreign-key CREATE TABLE tabela (... tipo INTEGER, codigo INTEGER,... ); Timbira - A empresa brasileira de PostgreSQL 29 / 39

Phantom foreign-key CREATE TABLE tabela (... tipo INTEGER, codigo INTEGER,... ); Se TIPO = 1 entao CODIGO é ref. TABELA1 Se TIPO = 2 entao CODIGO é ref. TABELA2 Se TIPO = 3 entao CODIGO é ref. TABELA3... Timbira - A empresa brasileira de PostgreSQL 29 / 39

Phantom foreign-key Sugestão(ões) Database Refactoring: Introduce new table Introduce table constraint Move Column Timbira - A empresa brasileira de PostgreSQL 30 / 39

Database Smell Wrong data type Tipos de dados possuem uma assinatura, que descreve as validações mínimas para seu uso. Timbira - A empresa brasileira de PostgreSQL 31 / 39

Wrong data type CREATE TABLE pessoa ( id SERIAL PRIMARY KEY, nome VARCHAR(100) NOT NULL, cnpj CHAR(14), cpf CHAR(11), rg CHAR(10) ); CREATE TABLE atributo_dinamico ( nome VARCHAR(100), tipo INTEGER, valor TEXT ); Timbira - A empresa brasileira de PostgreSQL 32 / 39

Wrong data type CREATE TABLE pessoa ( id SERIAL PRIMARY KEY, nome VARCHAR(100) NOT NULL, cnpj CHAR(14), cpf CHAR(11), rg CHAR(10) ); CREATE TABLE atributo_dinamico ( nome VARCHAR(100), tipo INTEGER, valor TEXT ); CNPJ, CPF e RG não são números? VALOR é um campo "flex" Timbira - A empresa brasileira de PostgreSQL 32 / 39

Wrong data type Sugestão(ões) Database Refactoring: Replace column Timbira - A empresa brasileira de PostgreSQL 33 / 39

Database Smell Smells detectados pela minha experiência (não estão na literatura): Phantom foreign-key Wrong data type Trigger Spaghetti Timbira - A empresa brasileira de PostgreSQL 34 / 39

Database Smell Fear of change Dentre os database smells citados, devemos ter atenção especial a este, pois pode ser considerado o pior de todos, pois: inibe a inovação, reduz a efetividade, produz ainda mais bagunça e ao longo do tempo a situação fica cada vez pior. "Lempre-se do valor Coragem do XP!!!!" Timbira - A empresa brasileira de PostgreSQL 35 / 39

Resumo 1 Prelúdio 2 Introdução 3 Bad Smells 4 Considerações Finais Timbira - A empresa brasileira de PostgreSQL 36 / 39

Considerações Finais Coragem para evoluir Taxonomia dos Database Smells Ferramenta para detecção Timbira - A empresa brasileira de PostgreSQL 37 / 39

Referências Refactoring Improving the Desing of Existing Code (Martin Fowler) Refactoring Databases: Evolutionary Database Design (Scott Ambler e Pramod Sadalage) http://martinfowler.com/books/refactoring.html http: //agiledata.org/essays/databaserefactoring.html http://www.agiledata.org/essays/ databaserefactoringsmells.html Timbira - A empresa brasileira de PostgreSQL 38 / 39

Perguntas? Fabrízio de Royes Mello @fabriziomello fabrizio@.com.br http://www..com.br http://slideshare.net/fabriziomello Timbira - A empresa brasileira de PostgreSQL 39 / 39